diff --git a/TS SE Tool/CustomClasses/ExternalData/GameMod.cs b/TS SE Tool/CustomClasses/ExternalData/GameMod.cs new file mode 100644 index 00000000..4277d842 --- /dev/null +++ b/TS SE Tool/CustomClasses/ExternalData/GameMod.cs @@ -0,0 +1,94 @@ +/* + Copyright 2016-2020 LIPtoH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System.IO; +using TS_SE_Tool.Utilities; +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Linq; +using FuzzySharp; + +namespace TS_SE_Tool { + public class GameMod { + public bool Enabled { + get => !File.IsDisabled(); + set { + if (hasFile) File.Toggle(value); + } + } + + [Browsable(false)] + public string Id { get; set; } + public string Name { get; set; } // { get => File?.FileNameWithoutExtension().Trim(); } + public DateTime? InstallDate { + get { + if (hasFile) return File.LastWriteTime; + return null; + } + } + + [JsonIgnore] + public bool hasFile { get => File != null && File.Exists; } + + [JsonIgnore] + [Browsable(false)] + public FileInfo File { get; set; } + [Browsable(false)] + public string FilePath { get => File?.FullName; } + + public bool Delete() { + try { + if (hasFile) File.Delete(); + } catch (Exception ex) { + IO_Utilities.LogWriter($"Failed to delete {File.FullString()}: {ex}"); + return false; + } + return true; + } + + public override bool Equals(object obj) { + if (obj == null || GetType() != obj.GetType()) + return false; + var other = obj as GameMod; + return FilePath == other.FilePath; + } + + public override int GetHashCode() { + unchecked { + int hash = 17; + hash = hash * 23 + (FilePath ?? "").GetHashCode(); + return hash; + } + } + } + public static class GameModExtensions { + public static IEnumerable AddSafe(this IEnumerable mods, GameMod pluginToAdd) { + List modList = new List(mods); + if (!modList.Any(plugin => plugin.FilePath == pluginToAdd.FilePath)) { + modList.Add(pluginToAdd); + } + return modList; + } + public static GameMod? GetDirectMatch(this IEnumerable mods, FileInfo file) { + return mods.FirstOrDefault(f => f.Name == file.FileNameWithoutExtension().Trim()); + } + public static GameMod? GetFuzzyMatch(this IEnumerable mods, FileInfo file, int ratio = 70) { + return mods.FirstOrDefault(f => Fuzz.Ratio(file.Name, f.Name) > 70); + } + } +} diff --git a/TS SE Tool/CustomClasses/ExternalData/GamePlugin.cs b/TS SE Tool/CustomClasses/ExternalData/GamePlugin.cs new file mode 100644 index 00000000..d8951478 --- /dev/null +++ b/TS SE Tool/CustomClasses/ExternalData/GamePlugin.cs @@ -0,0 +1,121 @@ +/* + Copyright 2016-2020 LIPtoH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System.IO; +using TS_SE_Tool.Utilities; +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Linq; +using FuzzySharp; + +namespace TS_SE_Tool { + public class GamePlugin { + public bool Enabled { + get => !File32bit.IsDisabled() && !File64bit.IsDisabled(); + set { + if (x86) File32bit.Toggle(value); + if (x64) File64bit.Toggle(value); + } + } + public string Name { get => File32bit?.FileNameWithoutExtension().RemoveAll("_win32", "_x86").Trim() ?? File64bit?.FileNameWithoutExtension().RemoveAll("_win64", "_x64").Trim(); } + public DateTime? InstallDate { + get { + if (x86) return File32bit.LastWriteTime; + else if (x64) return File64bit.LastWriteTime; + return null; + } + } + + [JsonIgnore] + public bool x86 { get => File32bit != null && File32bit.Exists; } + [JsonIgnore] + public bool x64 { get => File64bit != null && File64bit.Exists; } + + [JsonIgnore] + [Browsable(false)] + public FileInfo File32bit { get; set; } + [Browsable(false)] + public string Path32bit { get => File32bit?.FullName; } + + [JsonIgnore] + [Browsable(false)] + public FileInfo File64bit { get; set; } + [Browsable(false)] + public string Path64bit { get => File64bit?.FullName; } + + [JsonIgnore] + [Browsable(false)] + public List Files { + get { + var list = new List(); + if (x86) list.Add(File32bit); + if (x64) list.Add(File64bit); + return list; + } + } + + public bool Delete() { + try { + if (x86) File32bit.Delete(); + } catch (Exception ex) { + IO_Utilities.LogWriter($"Failed to delete {File32bit.FullString()}: {ex}"); + return false; + } + try { + if (x64) File64bit.Delete(); + } catch (Exception ex) { + IO_Utilities.LogWriter($"Failed to delete {File64bit.FullString()}: {ex}"); + return false; + } + return true; + } + + public override bool Equals(object obj) { + if (obj == null || GetType() != obj.GetType()) + return false; + GamePlugin other = (GamePlugin)obj; + return Path32bit == other.Path32bit && Path64bit == other.Path64bit; + } + + public override int GetHashCode() { + // Combine hashes of Name, Path32bit, and Path64bit + unchecked { + int hash = 17; + //hash = hash * 23 + (Name ?? "").GetHashCode(); + hash = hash * 23 + (Path32bit ?? "").GetHashCode(); + hash = hash * 23 + (Path64bit ?? "").GetHashCode(); + return hash; + } + } + } + public static class GamePluginExtensions { + public static IEnumerable AddSafe(this IEnumerable plugins, GamePlugin pluginToAdd) { + List pluginsList = new List(plugins); + if (!pluginsList.Any(plugin => plugin.Path32bit == pluginToAdd.Path32bit || plugin.Path64bit == pluginToAdd.Path64bit)) { + pluginsList.Add(pluginToAdd); + } + return pluginsList; + } + public static GamePlugin? GetDirectMatch(this IEnumerable plugins, FileInfo file) { + return plugins.FirstOrDefault(f => f.Name == file.FileNameWithoutExtension().RemoveAll("_win32", "_x86", "_win64", "_x64").Trim()); + } + public static GamePlugin? GetFuzzyMatch(this IEnumerable plugins, FileInfo file, int ratio = 70) { + return plugins.FirstOrDefault(f => Fuzz.Ratio(file.Name, f.Name) > 70); + } + } +} diff --git a/TS SE Tool/CustomClasses/ExternalData/ProfileMod.cs b/TS SE Tool/CustomClasses/ExternalData/ProfileMod.cs new file mode 100644 index 00000000..3b86815d --- /dev/null +++ b/TS SE Tool/CustomClasses/ExternalData/ProfileMod.cs @@ -0,0 +1,86 @@ +/* + Copyright 2016-2020 LIPtoH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System.IO; +using TS_SE_Tool.Utilities; +using System.ComponentModel; +using System.Collections.Generic; +using System.Text.Json.Serialization; +using System.Linq; +using FuzzySharp; +using System.Windows.Forms; + +namespace TS_SE_Tool { + public class ProfileMod { + [Browsable(false)] + public int LoadOrder { get; set; } + [AutoSizeColumnMode(DataGridViewAutoSizeColumnMode.ColumnHeader)] + [DisplayName("#")] + [JsonIgnore] + public int LoadOrderFriendly { get => LoadOrder + 1; } + [Browsable(false)] + public string Id { get; set; } + public string Name { get; set; } // { get => File?.FileNameWithoutExtension().Trim(); } + + [JsonIgnore] + //[Browsable(false)] + [AutoSizeColumnMode(DataGridViewAutoSizeColumnMode.ColumnHeader)] + public bool Exists { get => GameMod != null && GameMod.File != null && GameMod.File.Exists; } + + [Browsable(false)] + public GameMod? GameMod { get; set; } + + public ProfileMod(string profileEntry, int loadOrder) { + var split = profileEntry.Trim('\"').Split('|'); + Id = split.First(); + Name = split.Last(); + LoadOrder = loadOrder; + } + + public bool Delete() { + return GameMod.Delete(); + } + + public override bool Equals(object obj) { + if (obj == null || GetType() != obj.GetType()) + return false; + var other = obj as ProfileMod; + return Id == other.Id; + } + + public override int GetHashCode() { + unchecked { + int hash = 17; + hash = hash * 23 + (Id ?? "").GetHashCode(); + return hash; + } + } + } + public static class ProfileModExtensions { + public static IEnumerable AddSafe(this IEnumerable mods, ProfileMod modToAdd) { + List modList = new List(mods); + if (!modList.Any(mod => mod.Id == modToAdd.Id)) { + modList.Add(modToAdd); + } + return modList; + } + public static ProfileMod? GetDirectMatch(this IEnumerable mods, FileInfo file) { + return mods.FirstOrDefault(f => f.Name == file.FileNameWithoutExtension().Trim()); + } + public static ProfileMod? GetFuzzyMatch(this IEnumerable mods, FileInfo file, int ratio = 70) { + return mods.FirstOrDefault(f => Fuzz.Ratio(file.Name, f.Name) > 70); + } + } +} diff --git a/TS SE Tool/CustomClasses/Program/ProgSettings.cs b/TS SE Tool/CustomClasses/Program/ProgSettings.cs index cc0ca38b..6eb5ffa8 100644 --- a/TS SE Tool/CustomClasses/Program/ProgSettings.cs +++ b/TS SE Tool/CustomClasses/Program/ProgSettings.cs @@ -24,60 +24,52 @@ limitations under the License. using System.Text; using System.Threading.Tasks; using TS_SE_Tool.Utilities; +using System.Security.AccessControl; -namespace TS_SE_Tool -{ - class ProgSettings - { - public ProgSettings() - { } +namespace TS_SE_Tool { + class ProgSettings { + public ProgSettings() { } - public string ProgramVersion { get; set; } = "0.1.0.0"; + public string ProgramVersion { get; set; } = "0.1.0.0"; - public string ProgPrevVersion { get; set; } = ""; + public string ProgPrevVersion { get; set; } = ""; - public string Language { get; set; } = "Default"; + public string Language { get; set; } = "Default"; - public bool ProposeRandom { get; set; } = false; + public bool ProposeRandom { get; set; } = false; - public Int16 JobPickupTime { get; set; } = 72; + public Int16 JobPickupTime { get; set; } = 72; - public byte LoopEvery { get; set; } = 0; + public byte LoopEvery { get; set; } = 0; - public double TimeMultiplier { get; set; } = 1.0; + public double TimeMultiplier { get; set; } = 1.0; - public string DistanceMes { get; set; } = "km"; + public string DistanceMes { get; set; } = "km"; - public string WeightMes { get; set; } = "kg"; + public string WeightMes { get; set; } = "kg"; - public string CurrencyMesETS2 { get; set; } = "EUR"; + public string CurrencyMesETS2 { get; set; } = "EUR"; - public string CurrencyMesATS { get; set; } = "USD"; + public string CurrencyMesATS { get; set; } = "USD"; public DateTime LastUpdateCheck { get; set; } = DateTime.Now; - public Dictionary> CustomPaths { get; set; } = new Dictionary>(); + public Dictionary> CustomPaths { get; set; } = new Dictionary>(); // todo: List - public void LoadConfigFromFile() - { - try - { + public void LoadConfigFromFile() { + try { string GameType = ""; - foreach (string line in File.ReadAllLines(Directory.GetCurrentDirectory() + @"\config.cfg")) - { - string tag = line.Split(new char[] { '=' })[0], + foreach (string line in File.ReadAllLines(Directory.GetCurrentDirectory() + @"\config.cfg")) { + string tag = line.Split(new char[] { '=' })[0], data = line.Split(new char[] { '=' })[1]; - switch (tag) - { - case "ProgramVersion": - { + switch (tag) { + case "ProgramVersion": { ProgPrevVersion = data; break; } - case "Language": - { + case "Language": { Language = data; if (Language == "Default") @@ -86,81 +78,65 @@ public void LoadConfigFromFile() break; } - case "JobPickupTime": - { + case "JobPickupTime": { JobPickupTime = short.Parse(data); break; } - case "LoopEvery": - { + case "LoopEvery": { LoopEvery = byte.Parse(data); break; } - case "ProposeRandom": - { + case "ProposeRandom": { ProposeRandom = bool.Parse(data); break; } - case "TimeMultiplier": - { + case "TimeMultiplier": { TimeMultiplier = short.Parse(data); - if (TimeMultiplier > 7.0) - { + if (TimeMultiplier > 7.0) { TimeMultiplier = 7.0; - } - else if (TimeMultiplier < 0.1) - { + } else if (TimeMultiplier < 0.1) { TimeMultiplier = 0.1; } break; } - case "DistanceMes": - { + case "DistanceMes": { DistanceMes = data; break; } - case "WeightMes": - { + case "WeightMes": { WeightMes = data; break; } - case "CurrencyMesETS2": - { + case "CurrencyMesETS2": { CurrencyMesETS2 = data; break; } - case "CurrencyMesATS": - { + case "CurrencyMesATS": { CurrencyMesATS = data; break; } - case "CustomPathGame": - { + case "CustomPathGame": { GameType = data; break; } - case "CustomPath": - { + case "CustomPath": { if (GameType == "" || GameType == null) break; - if (CustomPaths.ContainsKey(GameType)) - { + if (CustomPaths.ContainsKey(GameType)) { CustomPaths[GameType].Add(data); - } - else - { + } else { List tmp = new List(); tmp.Add(data); @@ -170,15 +146,13 @@ public void LoadConfigFromFile() break; } - case "LastUpdateCheck": - { + case "LastUpdateCheck": { LastUpdateCheck = DateTime.FromFileTimeUtc(long.Parse(data)).ToLocalTime(); break; } - default: - { + default: { break; } } @@ -186,27 +160,21 @@ public void LoadConfigFromFile() CustomPaths = CustomPaths.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value); - } - catch - { + } catch { IO_Utilities.LogWriter("Config.cfg file not found or have wrong format. Restoring default"); WriteConfigToFile(); } } - public void WriteConfigToFile() - { + public void WriteConfigToFile() { string[] ExcludeList = new string[] { "CustomPaths", "ProgPrevVersion", "LastUpdateCheck" }; - try - { - using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\config.cfg", false)) - { + try { + using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\config.cfg", false)) { PropertyInfo[] properties = this.GetType().GetProperties(); - foreach (PropertyInfo property in properties) - { - if(!ExcludeList.Contains(property.Name)) + foreach (PropertyInfo property in properties) { + if (!ExcludeList.Contains(property.Name)) writer.WriteLine(property.Name + "=" + property.GetValue(this).ToString()); } @@ -216,22 +184,17 @@ public void WriteConfigToFile() //Write Custom paths string GameType = ""; - foreach (KeyValuePair> gameCustomPath in CustomPaths) - { - if (GameType != gameCustomPath.Key) - { + foreach (KeyValuePair> gameCustomPath in CustomPaths) { + if (GameType != gameCustomPath.Key) { GameType = gameCustomPath.Key; writer.WriteLine("CustomPathGame=" + gameCustomPath.Key); } - foreach (string customPath in gameCustomPath.Value) - { + foreach (string customPath in gameCustomPath.Value) { writer.WriteLine("CustomPath=" + customPath); } } } - } - catch - { + } catch { IO_Utilities.LogWriter("Could not write to " + Directory.GetCurrentDirectory()); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_write_to_file", Directory.GetCurrentDirectory() + @"\config.cfg"); } diff --git a/TS SE Tool/CustomClasses/Program/SupportedGame.cs b/TS SE Tool/CustomClasses/Program/SupportedGame.cs new file mode 100644 index 00000000..24627f3a --- /dev/null +++ b/TS SE Tool/CustomClasses/Program/SupportedGame.cs @@ -0,0 +1,88 @@ +using MoreLinq.Extensions; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text.Json.Serialization; +using TS_SE_Tool.Utilities; + +namespace TS_SE_Tool.CustomClasses.Program { + public class SupportedGame { + public long SteamAppId { get; internal set; } + public string Type { get; internal set; } + public string Name { get; internal set; } + public string Description { get; internal set; } + public string ExecutableName { get; internal set; } + + public Version MinSupportedGameVersion { get; internal set; } = new(); + public Version MaxSupportedGameVersion { get; internal set; } = new(); + [JsonIgnore] + [Browsable(false)] + public string SupportedGameVersionString { get => $"{MinSupportedGameVersion}-{MaxSupportedGameVersion}"; } + [Browsable(false)] + public List SupportedSaveFileVersions { get; internal set; } = new(); + [JsonIgnore] + [Browsable(false)] + public string SupportedSaveFileVersionString { get => SupportedSaveFileVersions.Count < 1 ? string.Empty : string.Join(", ", SupportedSaveFileVersions); } + //[JsonIgnore] + //[Browsable(false)] + //public string SupportedGameVersionsString { get => string.Join(", ", SupportedGameVersions); } + //[JsonIgnore] + //[Browsable(false)] + //public string SupportedSaveFileVersionsString { get => string.Join(", ", SupportedSaveFileVersions.Select(v => v.ToString())); } + + public bool Installed { + get { + try { var _ = Globals.SteamGameLocator.getGameInfoByFolder(Name).steamGameLocation; return true; } catch { return false; } + } + } + public DirectoryInfo SteamUserDataDir { get => Globals.GetLatestSteamUserDataDir().Combine(SteamAppId.ToString()); } + public DirectoryInfo SteamRemoteDir { get => SteamUserDataDir.Combine("remote"); } + + public DirectoryInfo? GameDir { get => Installed ? new DirectoryInfo(Globals.SteamGameLocator.getGameInfoByFolder(Name).steamGameLocation) : null; } + public FileInfo? Executable { get => Installed ? GameDir.CombineFile("bin", "win_x64", ExecutableName) : null; } + public DateTime? LastUpdated { get => Installed ? Executable.LastWriteTime : null; } + public Version? Version { get => Installed ? new Version(Executable.GetVersionInfo().ProductVersion.TrimEnd('0')) : null; } + public bool? IsSupported { get => Installed ? (Version > MinSupportedGameVersion && Version < MaxSupportedGameVersion) : null; } + public List PluginDirs { get => new() { GameDir.Combine("bin", "win_x64", "plugins"), GameDir.Combine("bin", "win_x86", "plugins") }; } + + public DirectoryInfo DocumentsDir { get => Globals.DocumentsDir.Combine(Name); } + public DirectoryInfo ModsDir { get => DocumentsDir.Combine("mod"); } + + public List Processes { get => Installed ? Process.GetProcessesByName(Executable.Name).ToList() : new(); } + public bool IsRunning { get => Processes.Count > 0; } + + public int LicensePlateWidth { get; internal set; } + public List PlayerLevelUps { get; internal set; } = new(); + public List Currencies { get; internal set; } = new(); + + //public SupportedGame(long steamAppId, string type, string name, string description, string supportedGameVersions, List supportedSaveFileVersions) => + // new SupportedGame(steamAppId, type, name, description, supportedGameVersions.ParseVersions(), supportedSaveFileVersions); + //public SupportedGame(long steamAppId, string type, string name, string description, List supportedGameVersions, List supportedSaveFileVersions) { + // SteamAppId = steamAppId; + // Type = type; + // Name = name; + // Description = description; + // SupportedGameVersions = supportedGameVersions; + // SupportedSaveFileVersions = supportedSaveFileVersions; + //} + } + public static class SupportedGameExtensions { + public static SupportedGame Get(this IEnumerable games, string type) => games.FirstOrDefault(g => g.Type == type); + public static Currency Get(this IEnumerable currencies, string name) => currencies.FirstOrDefault(g => g.Name == name); + } + public class Currency { + public string Name { get; set; } + public double ConversionRate { get; set; } + public List FormatSymbols { get; set; } + + public Currency(string name, double conversionRate, List formatSymbols) { + Name = name; + ConversionRate = Math.Round(conversionRate, 2); + FormatSymbols = formatSymbols ?? throw new ArgumentNullException(nameof(formatSymbols)); + } + } + +} diff --git a/TS SE Tool/CustomClasses/SCSLicensePlate.cs b/TS SE Tool/CustomClasses/SCSLicensePlate.cs index ebdaa6e8..df37c781 100644 --- a/TS SE Tool/CustomClasses/SCSLicensePlate.cs +++ b/TS SE Tool/CustomClasses/SCSLicensePlate.cs @@ -24,10 +24,8 @@ limitations under the License. using System.IO; using System.Windows.Forms; -namespace TS_SE_Tool.SCS -{ - class SCSLicensePlate - { +namespace TS_SE_Tool.SCS { + class SCSLicensePlate { static FormMain MainForm = Application.OpenForms.OfType().Single(); // // @@ -46,7 +44,7 @@ class SCSLicensePlate // //Fixed variables private decimal scaleXmult = 3.2m, scaleYmult = 3.2m; - private Dictionary baseLeftOffset = new Dictionary {{ "ETS2", 228 }, { "ATS", 256 }}; + private Dictionary baseLeftOffset = new Dictionary { { "ETS2", 228 }, { "ATS", 256 } }; private Dictionary baseAllignOffset = new Dictionary { { "ETS2", 52 }, { "ATS", 0 } }; private Dictionary baseTopOffset = new Dictionary { { "ETS2", -2 }, { "ATS", 8 } }; // @@ -62,24 +60,22 @@ class SCSLicensePlate // LPtype LicensePlateType = LPtype.Truck; - internal enum LPtype : byte - { + internal enum LPtype : byte { Truck = 0, Trailer = 1 } - public SCSLicensePlate(string _input, LPtype _type) - { + public SCSLicensePlate(string _input, LPtype _type) { SourceText = _input; LicensePlateType = _type; ValidLPtext = CheckSourceText(); - leftOffset = baseAllignOffset[MainForm.GameType]; - allignOffset = baseLeftOffset[MainForm.GameType]; + leftOffset = baseAllignOffset[MainForm.SelectedGame.Type]; + allignOffset = baseLeftOffset[MainForm.SelectedGame.Type]; //Load Font data - string fontDataPath = @"img\" + MainForm.GameType + @"\lpFont\" + SourceLPCountry + @".font"; + string fontDataPath = @"img\" + MainForm.SelectedGame.Type + @"\lpFont\" + SourceLPCountry + @".font"; if (File.Exists(fontDataPath)) CreateFontMap(fontDataPath); @@ -88,37 +84,29 @@ public SCSLicensePlate(string _input, LPtype _type) Create(); } - public void Reset() - { + public void Reset() { ValidLPtext = CheckSourceText(); Create(); } - public void UpdateCustom(string _input) - { + public void UpdateCustom(string _input) { ValidLPtext = CheckSourceText(); Create(); } - internal bool CheckSourceText() - { - try - { + internal bool CheckSourceText() { + try { SourceLPText = SourceText.Split(new char[] { '|' })[0]; SourceLPCountry = SourceText.Split(new char[] { '|' })[1].Trim(new char[] { '_', ' ' }); - } - catch - { + } catch { return false; } return true; } - public void Create() - { - if (!ValidLPtext) - { + public void Create() { + if (!ValidLPtext) { LicensePlateTXT = "NON VALID FORMAT"; DrawWarning(LicensePlateTXT); return; @@ -137,12 +125,10 @@ public void Create() else platePriority = new string[] { "trailer", "rear", "front" }; - string folderPath = @"img\" + MainForm.GameType + @"\lp\" + SourceLPCountry + @"\", IMGpath = ""; + string folderPath = @"img\" + MainForm.SelectedGame.Type + @"\lp\" + SourceLPCountry + @"\", IMGpath = ""; - foreach (string plate in platePriority) - { - if (File.Exists(folderPath + plate + @".dds")) - { + foreach (string plate in platePriority) { + if (File.Exists(folderPath + plate + @".dds")) { IMGpath = folderPath + plate + @".dds"; break; } @@ -155,8 +141,7 @@ public void Create() Dictionary thisFontMap = new Dictionary(); - if (ValidLPcountry) - { + if (ValidLPcountry) { //Load BG image Image BGImg = Utilities.Graphics_TSSET.ddsImgLoader(IMGpath).images[0]; @@ -173,8 +158,7 @@ public void Create() Image LicensePlateBGImg = SimpleResizeImage(BGImg, BGImg.Width * 4, BGImg.Height * 4); //Draw BG - using (var canvas = Graphics.FromImage(LicensePlateIMG)) - { + using (var canvas = Graphics.FromImage(LicensePlateIMG)) { canvas.DrawImage(LicensePlateBGImg, 0, 0); } // @@ -184,30 +168,24 @@ public void Create() UInt16 prevLetterUTF = 0; - for (int i = 0; i < lpLength; i++) - { + for (int i = 0; i < lpLength; i++) { string letter = _lpText.Substring(i, 1); string tag = ""; - if (letter == "<") - { + if (letter == "<") { int arrowIdxClose = _lpText.IndexOf('>', i + 1), arrowIdxOpen = _lpText.IndexOf('<', i + 1); - if (arrowIdxClose != -1 && (arrowIdxOpen == -1 || arrowIdxClose < arrowIdxOpen) ) - { + if (arrowIdxClose != -1 && (arrowIdxOpen == -1 || arrowIdxClose < arrowIdxOpen)) { string tagtext = _lpText.Substring(i + 1, _lpText.IndexOf('>', i + 1) - i - 1).Trim(new char[] { ' ' }); //Detect tag type int tagend = tagtext.IndexOf(' '); int blockend = tagtext.Length - 1; - if (tagend != -1 && blockend > tagend) - { + if (tagend != -1 && blockend > tagend) { tag = tagtext.Substring(0, tagend); - } - else if (tagend == -1) - { + } else if (tagend == -1) { tag = tagtext.Substring(0, ++blockend); } @@ -219,21 +197,16 @@ public void Create() i = i + skip; continue; } - } - else - { - if (ValidLPcountry) - { + } else { + if (ValidLPcountry) { byte[] utf8bytes = Encoding.UTF8.GetBytes(letter); ushort utf8number = utf8bytes[0]; - if (thisFontMap.ContainsKey(utf8number)) - { + if (thisFontMap.ContainsKey(utf8number)) { decimal combXScale = scaleXmult * fontXscale * fontSupSubScale; decimal combYScale = scaleYmult * fontYscale * fontSupSubScale; - if (thisFontMap[utf8number].LetterImage != null) - { + if (thisFontMap[utf8number].LetterImage != null) { Int16 Kern = 0; if (thisFontMap[utf8number].Kerning != null) if (thisFontMap[utf8number].Kerning.ContainsKey(prevLetterUTF)) @@ -258,8 +231,7 @@ public void Create() tmpLetterImage = ReColor(tmpLetterImage, FontColor); // - using (var canvas = Graphics.FromImage(LPtextBitmap)) - { + using (var canvas = Graphics.FromImage(LPtextBitmap)) { canvas.InterpolationMode = InterpolationMode.NearestNeighbor; canvas.SmoothingMode = SmoothingMode.HighQuality; @@ -278,9 +250,7 @@ public void Create() if (cursorPos > rightMostPos) rightMostPos = cursorPos; - } - else if (utf8number == 46) - { + } else if (utf8number == 46) { cursorPos += 4; if (cursorPos > rightMostPos) @@ -290,9 +260,7 @@ public void Create() LicensePlateTXT += letter; prevLetterUTF = Encoding.UTF8.GetBytes(letter)[0]; - } - else - { + } else { //MakeText LicensePlateTXT += letter; } @@ -303,19 +271,15 @@ public void Create() DrawTextToLP(); } - private void DrawTextToLP() - { - using (var canvas = Graphics.FromImage(LicensePlateIMG)) - { - canvas.DrawImage(LPtextBitmap, leftOffset + allignOffset - (rightMostPos / 2), baseTopOffset[MainForm.GameType] - BaseLine - (TopMostPxl - BaseLine) + (LicensePlateIMG.Height / 2 - (DownMostPxl - TopMostPxl) / 2)); //Draw from center + private void DrawTextToLP() { + using (var canvas = Graphics.FromImage(LicensePlateIMG)) { + canvas.DrawImage(LPtextBitmap, leftOffset + allignOffset - (rightMostPos / 2), baseTopOffset[MainForm.SelectedGame.Type] - BaseLine - (TopMostPxl - BaseLine) + (LicensePlateIMG.Height / 2 - (DownMostPxl - TopMostPxl) / 2)); //Draw from center } } - private void DrawWarning(string _input) - { + private void DrawWarning(string _input) { //Draw text - using (var canvas = Graphics.FromImage(LicensePlateIMG)) - { + using (var canvas = Graphics.FromImage(LicensePlateIMG)) { canvas.SmoothingMode = SmoothingMode.HighQuality; Point point1 = new Point(0, 0); @@ -329,8 +293,7 @@ private void DrawWarning(string _input) Pen linesPen = new Pen(Color.DarkOrange, 10); - for (int i = 0; i < LicensePlateIMG.Width + LicensePlateIMG.Height; i++) - { + for (int i = 0; i < LicensePlateIMG.Width + LicensePlateIMG.Height; i++) { Point p1 = new Point(i, -10); Point p2 = new Point(i - LicensePlateIMG.Height, LicensePlateIMG.Height + 10); @@ -344,7 +307,7 @@ private void DrawWarning(string _input) stringFormat.LineAlignment = StringAlignment.Center; GraphicsPath p = new GraphicsPath(); - p.AddString( _input, FontFamily.GenericMonospace, (int)FontStyle.Bold, canvas.DpiY * 40 / 72, + p.AddString(_input, FontFamily.GenericMonospace, (int)FontStyle.Bold, canvas.DpiY * 40 / 72, new RectangleF(0, 0, LicensePlateIMG.Width, LicensePlateIMG.Height), stringFormat); Pen outlinePen = new Pen(Color.Black, 10); @@ -355,29 +318,25 @@ private void DrawWarning(string _input) } } - private void DetectTag(string _tag, string _tagtext) - { + private void DetectTag(string _tag, string _tagtext) { int datapos = 0, eqpos = 0, spacepos = 0; - switch (_tag) - { - case "offset": - { + switch (_tag) { + case "offset": { if (!ValidLPcountry) break; datapos = _tagtext.IndexOf("hshift"); - if (datapos != -1) + if (datapos != -1) cursorPos += (int)Math.Round(processData() * 3.2); datapos = _tagtext.IndexOf("vshift"); - if (datapos != -1) - vshift += processData(); + if (datapos != -1) + vshift += processData(); - int processData() - { + int processData() { eqpos = _tagtext.IndexOf('=', datapos) + 1; spacepos = _tagtext.IndexOf(' ', eqpos); @@ -386,10 +345,8 @@ int processData() string Number = _tagtext.Substring(eqpos, spacepos - eqpos); - if (Number != "") - { - if (int.TryParse(Number, out int res)) - { + if (Number != "") { + if (int.TryParse(Number, out int res)) { return res; } } @@ -400,8 +357,7 @@ int processData() break; } - case "img": - { + case "img": { LicensePlateTXT += " "; // if (!ValidLPcountry) @@ -430,7 +386,7 @@ int processData() if (imgwidth < 0) break; - + // datapos = _tagtext.IndexOf("height"); @@ -440,8 +396,7 @@ int processData() if (imgheight < 0) break; - int processData() - { + int processData() { eqpos = _tagtext.IndexOf('=', datapos) + 1; spacepos = _tagtext.IndexOf(' ', eqpos); @@ -450,10 +405,8 @@ int processData() string Number = _tagtext.Substring(eqpos, spacepos - eqpos); - if (Number != "") - { - if (int.TryParse(Number, out int res)) - { + if (Number != "") { + if (int.TryParse(Number, out int res)) { return res; } } @@ -467,8 +420,7 @@ int processData() string imgpath = gameFilepathMat.Substring(0, gameFilepathMat.LastIndexOf('/') + 1); //Side detect - if (gameFilepathMat.IndexOf("$SIDE$") != 1) - { + if (gameFilepathMat.IndexOf("$SIDE$") != 1) { string side = "front"; if (LicensePlateType == LPtype.Trailer) @@ -479,30 +431,26 @@ int processData() //TOBJ string tobjFilepath = ""; - string imgToLoadMat = @"img\" + MainForm.GameType + @"\lp" + gameFilepathMat; + string imgToLoadMat = @"img\" + MainForm.SelectedGame.Type + @"\lp" + gameFilepathMat; - if (File.Exists(imgToLoadMat)) - { + if (File.Exists(imgToLoadMat)) { tobjFilepath = new SCSfiles.fileMAT(imgToLoadMat).texture; - } - else + } else break; //DDS string gameFilepathDds = ""; - string imgToLoadTobj = @"img\" + MainForm.GameType + @"\lp" + imgpath + tobjFilepath; + string imgToLoadTobj = @"img\" + MainForm.SelectedGame.Type + @"\lp" + imgpath + tobjFilepath; - if (File.Exists(imgToLoadTobj)) - { + if (File.Exists(imgToLoadTobj)) { gameFilepathDds = new SCSfiles.fileTOBJ(imgToLoadTobj).texture_path; - } - else + } else break; string ddsFilepath = gameFilepathDds.Split(new string[] { "/material/ui/lp" }, StringSplitOptions.RemoveEmptyEntries).Last(); //Load img - string tmpImgPath = @"img\" + MainForm.GameType + @"\lp" + ddsFilepath; + string tmpImgPath = @"img\" + MainForm.SelectedGame.Type + @"\lp" + ddsFilepath; var tmpTuple = Utilities.Graphics_TSSET.ddsImgLoader(new string[] { tmpImgPath }); Image tmpImg; @@ -513,17 +461,14 @@ int processData() tmpImg = null; //Draw img - if (tmpImg != null) - { + if (tmpImg != null) { int imgSpacing = 0; - if (imgwidth == 0) - { + if (imgwidth == 0) { imgwidth = tmpImg.Width; } - if (imgheight == 0) - { + if (imgheight == 0) { imgheight = tmpImg.Height; } @@ -538,8 +483,7 @@ int processData() if (yPoint + lettetHeight > DownMostPxl) DownMostPxl = yPoint + lettetHeight; - using (var canvas = Graphics.FromImage(LPtextBitmap)) - { + using (var canvas = Graphics.FromImage(LPtextBitmap)) { canvas.InterpolationMode = InterpolationMode.NearestNeighbor; canvas.SmoothingMode = SmoothingMode.HighQuality; @@ -561,24 +505,22 @@ int processData() break; } - case "font": - { + case "font": { if (!ValidLPcountry) break; // datapos = _tagtext.IndexOf("xscale"); - if (datapos != -1) - fontXscale = processData(); + if (datapos != -1) + fontXscale = processData(); datapos = _tagtext.IndexOf("yscale"); - if (datapos != -1) - fontYscale = processData(); + if (datapos != -1) + fontYscale = processData(); - decimal processData() - { + decimal processData() { eqpos = _tagtext.IndexOf('=', datapos) + 1; spacepos = _tagtext.IndexOf(' ', eqpos); @@ -587,10 +529,8 @@ decimal processData() string Number = _tagtext.Substring(eqpos, spacepos - eqpos); - if (Number != "") - { - if (decimal.TryParse(Number, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out decimal res)) - { + if (Number != "") { + if (decimal.TryParse(Number, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out decimal res)) { return res; } } @@ -601,23 +541,20 @@ decimal processData() break; } - case "/font": - { + case "/font": { fontXscale = 1; fontYscale = 1; break; } - case "color": - { + case "color": { if (!ValidLPcountry) break; //value = FF0009C5 A B G R datapos = _tagtext.IndexOf("value"); - if (datapos != -1) - { + if (datapos != -1) { eqpos = _tagtext.IndexOf('=', datapos) + 1; spacepos = _tagtext.IndexOf(' ', datapos); @@ -626,8 +563,7 @@ decimal processData() string hexScsColorString = _tagtext.Substring(eqpos, spacepos - eqpos); - if (hexScsColorString.Length == 8) - { + if (hexScsColorString.Length == 8) { int[] hexColorParts = SplitNConvertSSCHexColor(hexScsColorString, 2).ToArray(); int tmpAlpha = hexColorParts[0], tmpRed = hexColorParts[3], tmpGreen = hexColorParts[2], tmpBlue = hexColorParts[1]; @@ -639,8 +575,7 @@ decimal processData() break; } - case "align": - { + case "align": { if (!ValidLPcountry) break; @@ -659,12 +594,10 @@ decimal processData() else datapos = _tagtext.IndexOf("right"); - if (datapos != -1) - { + if (datapos != -1) { eqpos = _tagtext.IndexOf('=', datapos); - if (eqpos != -1 && eqpos >= datapos + 4) - { + if (eqpos != -1 && eqpos >= datapos + 4) { eqpos++; spacepos = _tagtext.IndexOf(' ', eqpos); @@ -674,14 +607,12 @@ decimal processData() string offsetNumber = _tagtext.Substring(eqpos, spacepos - eqpos); - if (offsetNumber != "") - { - if (int.TryParse(offsetNumber, out int res)) - { + if (offsetNumber != "") { + if (int.TryParse(offsetNumber, out int res)) { allignOffset = (int)Math.Round(res * 1.6, 0); if (left) - leftOffset = baseAllignOffset[MainForm.GameType] + 232; + leftOffset = baseAllignOffset[MainForm.SelectedGame.Type] + 232; } } } @@ -690,8 +621,7 @@ decimal processData() break; } - case "/align": - { + case "/align": { if (!ValidLPcountry) break; @@ -703,13 +633,12 @@ decimal processData() cursorPos = 0; rightMostPos = cursorPos; - allignOffset = baseLeftOffset[MainForm.GameType]; + allignOffset = baseLeftOffset[MainForm.SelectedGame.Type]; break; } - case "ret": - { + case "ret": { LicensePlateTXT += " "; // if (!ValidLPcountry) @@ -724,31 +653,27 @@ decimal processData() break; } - case "sup": - { + case "sup": { // 75% size 44% up fontSupSubScale = 0.6m; vshift += 2; break; } - case "/sup": - { + case "/sup": { fontSupSubScale = 1m; vshift -= 2; break; } - case "sub": - { + case "sub": { // 75% size 16% down fontSupSubScale = 0.75m; vshift -= 5; break; } - case "/sub": - { + case "/sub": { fontSupSubScale = 1m; vshift += 5; break; @@ -756,8 +681,7 @@ decimal processData() } } - private void CreateFontMap(string _fontDataPath) - { + private void CreateFontMap(string _fontDataPath) { if (!File.Exists(_fontDataPath)) return; @@ -766,7 +690,7 @@ private void CreateFontMap(string _fontDataPath) return; //Game type - string gametype = MainForm.GameType; + string gametype = MainForm.SelectedGame.Type; string IMGpath = ""; //Img Font map @@ -775,12 +699,10 @@ private void CreateFontMap(string _fontDataPath) string fontimg = ""; //Read - try - { + try { string[] tempFile = File.ReadAllLines(_fontDataPath); - for (int i = 0; i < tempFile.Length; i++) - { + for (int i = 0; i < tempFile.Length; i++) { string line = tempFile[i]; //line_spacing: 0 # suggested number of pixels to put between lines @@ -789,16 +711,14 @@ private void CreateFontMap(string _fontDataPath) //Font image to load //Can be multiple imgs //image:/font/license_plate/netherlands_0.mat, 128, 128 - if (line.StartsWith("image:")) - { + if (line.StartsWith("image:")) { string info = line.Split(new char[] { ':' }, 2)[1]; fontimg = info.Split(new char[] { ',' }, 3)[0].Split(new char[] { '/' }).Last().Split(new char[] { '.' }, 2)[0]; } //Letters map - if (line.StartsWith("x")) - { + if (line.StartsWith("x")) { string info = line.Split(new char[] { '#' }, 2)[0]; string[] dataparts = info.Remove(0, 1).Split(new char[] { ',' }, 9); @@ -811,22 +731,19 @@ private void CreateFontMap(string _fontDataPath) //Kerning //kern: x0059, x0042, -2 # 'Y' -> 'B' //kern: x0059, x0054, -1 # 'Y' -> 'T' - if (line.StartsWith("kern:")) - { + if (line.StartsWith("kern:")) { string[] dataparts = line.Split(new char[] { ':', '#' })[1].Trim(' ').Split(new char[] { ',' }); UInt16 targetL = Convert.ToUInt16(dataparts[1].Trim(' ').Remove(0, 1), 16), prevL = Convert.ToUInt16(dataparts[0].Trim(' ').Remove(0, 1), 16); Int16 Kern = Convert.ToInt16(dataparts[2]); - if(thisFontMap[targetL].Kerning == null) + if (thisFontMap[targetL].Kerning == null) thisFontMap[targetL].Kerning = new Dictionary(); thisFontMap[targetL].Kerning.Add(prevL, Kern); } } - } - catch - { + } catch { //FormMain.LogWriter("Font file is missing"); } @@ -841,12 +758,8 @@ private void CreateFontMap(string _fontDataPath) return; //Create font map - foreach (KeyValuePair< UInt16, SCSFontLetter> letter in thisFontMap) - { - if (letter.Value.Width == 0 || letter.Value.Height == 0) - { } - else - { + foreach (KeyValuePair letter in thisFontMap) { + if (letter.Value.Width == 0 || letter.Value.Height == 0) { } else { Rectangle rect = new Rectangle(letter.Value.P_x, letter.Value.P_y, letter.Value.Width, letter.Value.Height); Bitmap tmpLetter = new Bitmap(FontImg).Clone(rect, PixelFormat.Format32bppArgb); @@ -857,15 +770,13 @@ private void CreateFontMap(string _fontDataPath) MainForm.GlobalFontMap.Add(SourceLPCountry, thisFontMap); } - - public static Image SimpleResizeImage(Image _inputImage, int _newWidth, int _newHeight) - { + + public static Image SimpleResizeImage(Image _inputImage, int _newWidth, int _newHeight) { //Image newImage = new Bitmap(_inputImage, _newWidth, _newHeight); Image newImage = new Bitmap(_newWidth, _newHeight); - using (var canvas = Graphics.FromImage(newImage)) - { + using (var canvas = Graphics.FromImage(newImage)) { canvas.InterpolationMode = InterpolationMode.Bicubic; canvas.SmoothingMode = SmoothingMode.HighQuality; @@ -881,19 +792,15 @@ public static Image SimpleResizeImage(Image _inputImage, int _newWidth, int _new return newImage; } - static IEnumerable SplitNConvertSSCHexColor(string str, int chunkSize) - { + static IEnumerable SplitNConvertSSCHexColor(string str, int chunkSize) { return Enumerable.Range(0, str.Length / chunkSize).Select(i => Convert.ToInt32(str.Substring(i * chunkSize, chunkSize), 16)); } - private Image ReColor(Image _inpulLetter, Color _newColor ) - { + private Image ReColor(Image _inpulLetter, Color _newColor) { Bitmap tmp = new Bitmap(_inpulLetter); - for (int y = 0; y < _inpulLetter.Height; y++) - { - for (int x = 0; x < _inpulLetter.Width; x++) - { + for (int y = 0; y < _inpulLetter.Height; y++) { + for (int x = 0; x < _inpulLetter.Width; x++) { tmp.SetPixel(x, y, Color.FromArgb(tmp.GetPixel(x, y).A, _newColor.R, _newColor.G, _newColor.B)); } } diff --git a/TS SE Tool/CustomClasses/Save/Items/Economy.cs b/TS SE Tool/CustomClasses/Save/Items/Economy.cs index ef802c35..6ea25c12 100644 --- a/TS SE Tool/CustomClasses/Save/Items/Economy.cs +++ b/TS SE Tool/CustomClasses/Save/Items/Economy.cs @@ -7,11 +7,11 @@ using TS_SE_Tool.Utilities; using TS_SE_Tool.Save.DataFormat; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool.Save.Items -{ - class Economy : SiiNBlockCore - { +namespace TS_SE_Tool.Save.Items { + class Economy : SiiNBlockCore { + FormMain MainForm = System.Windows.Forms.Application.OpenForms.OfType().Single(); #region variables internal string bank { get; set; } = ""; internal string player { get; set; } = ""; @@ -197,929 +197,771 @@ class Economy : SiiNBlockCore #endregion - internal Economy() - { } + internal Economy() { } - internal Economy(string[] _input) - { + internal Economy(string[] _input) { string tagLine = "", dataLine = ""; - foreach (string currentLine in _input) - { - if (currentLine.Contains(':')) - { + foreach (string currentLine in _input) { + if (currentLine.Contains(':')) { string[] splittedLine = currentLine.Split(new char[] { ':' }, 2); tagLine = splittedLine[0].Trim(); dataLine = splittedLine[1].Trim(); - } - else - { + } else { tagLine = currentLine.Trim(); dataLine = ""; } - try - { - switch (tagLine) - { + try { + switch (tagLine) { case "": case "economy": - case "}": - { + case "}": { break; } - case "bank": - { + case "bank": { bank = dataLine; break; } - case "player": - { + case "player": { player = dataLine; break; } - case "companies": - { + case "companies": { companies.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("companies["): - { + case var s when s.StartsWith("companies["): { companies.Add(dataLine); break; } - case "garages": - { + case "garages": { garages.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("garages["): - { + case var s when s.StartsWith("garages["): { garages.Add(dataLine); break; } - case "garage_ignore_list": - { + case "garage_ignore_list": { garage_ignore_list.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("garage_ignore_list["): - { + case var s when s.StartsWith("garage_ignore_list["): { garage_ignore_list.Add(dataLine); break; } - case "game_progress": - { + case "game_progress": { game_progress = dataLine; break; } - case "event_queue": - { + case "event_queue": { event_queue = dataLine; break; } - case "mail_ctrl": - { + case "mail_ctrl": { mail_ctrl = dataLine; break; } - case "oversize_offer_ctrl": - { + case "oversize_offer_ctrl": { oversize_offer_ctrl = dataLine; break; } - case "game_time": - { + case "game_time": { game_time = uint.Parse(dataLine); break; } - case "game_time_secs": - { + case "game_time_secs": { game_time_secs = dataLine; break; } - case "game_time_initial": - { + case "game_time_initial": { game_time_initial = int.Parse(dataLine); break; } - case "achievements_added": - { + case "achievements_added": { achievements_added = int.Parse(dataLine); break; } - case "new_game": - { + case "new_game": { new_game = bool.Parse(dataLine); break; } - case "total_distance": - { + case "total_distance": { total_distance = int.Parse(dataLine); break; } - case "experience_points": - { + case "experience_points": { experience_points = uint.Parse(dataLine); break; } - case "adr": - { + case "adr": { adr = byte.Parse(dataLine); break; } - case "long_dist": - { + case "long_dist": { long_dist = byte.Parse(dataLine); break; } - case "heavy": - { + case "heavy": { heavy = byte.Parse(dataLine); break; } - case "fragile": - { + case "fragile": { fragile = byte.Parse(dataLine); break; } - case "urgent": - { + case "urgent": { urgent = byte.Parse(dataLine); break; } - case "mechanical": - { + case "mechanical": { mechanical = byte.Parse(dataLine); break; } - case "user_colors": - { + case "user_colors": { user_colors.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("user_colors["): - { + case var s when s.StartsWith("user_colors["): { user_colors.Add(new SCS_Color(dataLine)); break; } - case "delivery_log": - { + case "delivery_log": { delivery_log = dataLine; break; } - case "ferry_log": - { + case "ferry_log": { ferry_log = dataLine; break; } - case "police_offence_log": - { + case "police_offence_log": { police_offence_log = dataLine; break; } - case "stored_camera_mode": - { + case "stored_camera_mode": { stored_camera_mode = int.Parse(dataLine); break; } - case "stored_actor_state": - { + case "stored_actor_state": { stored_actor_state = int.Parse(dataLine); break; } - case "stored_high_beam_style": - { + case "stored_high_beam_style": { stored_high_beam_style = int.Parse(dataLine); break; } - case "stored_actor_windows_state": - { + case "stored_actor_windows_state": { stored_actor_windows_state = new SCS_Float_2(dataLine); break; } - case "stored_actor_wiper_mode": - { + case "stored_actor_wiper_mode": { stored_actor_wiper_mode = int.Parse(dataLine); break; } - case "stored_actor_retarder": - { + case "stored_actor_retarder": { stored_actor_retarder = int.Parse(dataLine); break; } - case "stored_display_mode": - { + case "stored_display_mode": { stored_display_mode = int.Parse(dataLine); break; } - case "stored_display_mode_on_dashboard": - { + case "stored_display_mode_on_dashboard": { stored_display_mode_on_dashboard = int.Parse(dataLine); break; } - case "stored_display_mode_on_gps": - { + case "stored_display_mode_on_gps": { stored_display_mode_on_gps = int.Parse(dataLine); break; } - case "stored_dashboard_map_mode": - { + case "stored_dashboard_map_mode": { stored_dashboard_map_mode = int.Parse(dataLine); break; } - case "stored_world_map_zoom": - { + case "stored_world_map_zoom": { stored_world_map_zoom = int.Parse(dataLine); break; } - case "stored_online_job_id": - { + case "stored_online_job_id": { stored_online_job_id = int.Parse(dataLine); break; } - case "stored_online_gps_behind": - { + case "stored_online_gps_behind": { stored_online_gps_behind.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_online_gps_behind["): - { + case var s when s.StartsWith("stored_online_gps_behind["): { stored_online_gps_behind.Add(dataLine); break; } - case "stored_online_gps_ahead": - { + case "stored_online_gps_ahead": { stored_online_gps_ahead.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_online_gps_ahead["): - { + case var s when s.StartsWith("stored_online_gps_ahead["): { stored_online_gps_ahead.Add(dataLine); break; } - case "stored_online_gps_behind_waypoints": - { + case "stored_online_gps_behind_waypoints": { stored_online_gps_behind_waypoints.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_online_gps_behind_waypoints["): - { + case var s when s.StartsWith("stored_online_gps_behind_waypoints["): { stored_online_gps_behind_waypoints.Add(dataLine); break; } - case "stored_online_gps_ahead_waypoints": - { + case "stored_online_gps_ahead_waypoints": { stored_online_gps_ahead_waypoints.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_online_gps_ahead_waypoints["): - { + case var s when s.StartsWith("stored_online_gps_ahead_waypoints["): { stored_online_gps_ahead_waypoints.Add(dataLine); break; } - case "stored_online_gps_avoid_waypoints": - { + case "stored_online_gps_avoid_waypoints": { stored_online_gps_avoid_waypoints.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_online_gps_avoid_waypoints["): - { + case var s when s.StartsWith("stored_online_gps_avoid_waypoints["): { stored_online_gps_avoid_waypoints.Add(dataLine); break; } - case "stored_special_job": - { + case "stored_special_job": { stored_special_job = dataLine; break; } - case "police_ctrl": - { + case "police_ctrl": { police_ctrl = dataLine; break; } - case "stored_map_state": - { + case "stored_map_state": { stored_map_state = int.Parse(dataLine); break; } - case "stored_gas_pump_money": - { + case "stored_gas_pump_money": { stored_gas_pump_money = int.Parse(dataLine); break; } - case "stored_weather_change_timer": - { + case "stored_weather_change_timer": { stored_weather_change_timer = dataLine; break; } - case "stored_current_weather": - { + case "stored_current_weather": { stored_current_weather = int.Parse(dataLine); break; } - case "stored_rain_wetness": - { + case "stored_rain_wetness": { stored_rain_wetness = dataLine; break; } - case "time_zone": - { + case "time_zone": { time_zone = int.Parse(dataLine); break; } - case "time_zone_name": - { + case "time_zone_name": { time_zone_name = dataLine; break; } - case "last_ferry_position": - { + case "last_ferry_position": { last_ferry_position = new Vector_3i(dataLine); break; } - case "stored_show_weigh": - { + case "stored_show_weigh": { stored_show_weigh = bool.Parse(dataLine); break; } - case "stored_need_to_weigh": - { + case "stored_need_to_weigh": { stored_need_to_weigh = bool.Parse(dataLine); break; } - case "stored_nav_start_pos": - { + case "stored_nav_start_pos": { stored_nav_start_pos = new Vector_3i(dataLine); break; } - case "stored_nav_end_pos": - { + case "stored_nav_end_pos": { stored_nav_end_pos = new Vector_3i(dataLine); break; } - case "stored_gps_behind": - { + case "stored_gps_behind": { stored_gps_behind.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_gps_behind["): - { + case var s when s.StartsWith("stored_gps_behind["): { stored_gps_behind.Add(dataLine); break; } - case "stored_gps_ahead": - { + case "stored_gps_ahead": { stored_gps_ahead.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_gps_ahead["): - { + case var s when s.StartsWith("stored_gps_ahead["): { stored_gps_ahead.Add(dataLine); break; } - case "stored_gps_behind_waypoints": - { + case "stored_gps_behind_waypoints": { stored_gps_behind_waypoints.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_gps_behind_waypoints["): - { + case var s when s.StartsWith("stored_gps_behind_waypoints["): { stored_gps_behind_waypoints.Add(dataLine); break; } - case "stored_gps_ahead_waypoints": - { + case "stored_gps_ahead_waypoints": { stored_gps_ahead_waypoints.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_gps_ahead_waypoints["): - { + case var s when s.StartsWith("stored_gps_ahead_waypoints["): { stored_gps_ahead_waypoints.Add(dataLine); break; } - case "stored_gps_avoid_waypoints": - { + case "stored_gps_avoid_waypoints": { stored_gps_avoid_waypoints.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_gps_avoid_waypoints["): - { + case var s when s.StartsWith("stored_gps_avoid_waypoints["): { stored_gps_avoid_waypoints.Add(dataLine); break; } - case "stored_start_tollgate_pos": - { + case "stored_start_tollgate_pos": { stored_start_tollgate_pos = new Vector_3i(dataLine); break; - } + } - case "stored_tutorial_state": - { + case "stored_tutorial_state": { stored_tutorial_state = int.Parse(dataLine); break; } - case "stored_map_actions": - { + case "stored_map_actions": { stored_map_actions.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("stored_map_actions["): - { + case var s when s.StartsWith("stored_map_actions["): { stored_map_actions.Add(dataLine); break; } - case "clean_distance_counter": - { + case "clean_distance_counter": { clean_distance_counter = int.Parse(dataLine); break; } - case "clean_distance_max": - { + case "clean_distance_max": { clean_distance_max = int.Parse(dataLine); break; } - case "no_cargo_damage_distance_counter": - { + case "no_cargo_damage_distance_counter": { no_cargo_damage_distance_counter = int.Parse(dataLine); break; } - case "no_cargo_damage_distance_max": - { + case "no_cargo_damage_distance_max": { no_cargo_damage_distance_max = int.Parse(dataLine); break; } - case "no_violation_distance_counter": - { + case "no_violation_distance_counter": { no_violation_distance_counter = int.Parse(dataLine); break; } - case "no_violation_distance_max": - { + case "no_violation_distance_max": { no_violation_distance_max = int.Parse(dataLine); break; } - case "total_real_time": - { + case "total_real_time": { total_real_time = int.Parse(dataLine); break; } - case "real_time_seconds": - { + case "real_time_seconds": { real_time_seconds = dataLine; break; } - case "visited_cities": - { + case "visited_cities": { visited_cities.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("visited_cities["): - { + case var s when s.StartsWith("visited_cities["): { visited_cities.Add(dataLine); break; } - case "visited_cities_count": - { + case "visited_cities_count": { visited_cities_count.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("visited_cities_count["): - { + case var s when s.StartsWith("visited_cities_count["): { visited_cities_count.Add(int.Parse(dataLine)); break; } - case "last_visited_city": - { + case "last_visited_city": { last_visited_city = dataLine; break; } - case "discovered_cutscene_items": - { + case "discovered_cutscene_items": { discovered_cutscene_items.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("discovered_cutscene_items["): - { + case var s when s.StartsWith("discovered_cutscene_items["): { discovered_cutscene_items.Add(UInt64.Parse(dataLine)); break; } - case "discovered_cutscene_items_states": - { + case "discovered_cutscene_items_states": { discovered_cutscene_items_states.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("discovered_cutscene_items_states["): - { + case var s when s.StartsWith("discovered_cutscene_items_states["): { discovered_cutscene_items_states.Add(int.Parse(dataLine)); break; } - case "unlocked_dealers": - { + case "unlocked_dealers": { unlocked_dealers.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("unlocked_dealers["): - { + case var s when s.StartsWith("unlocked_dealers["): { unlocked_dealers.Add(dataLine); break; } - case "unlocked_recruitments": - { + case "unlocked_recruitments": { unlocked_recruitments.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("unlocked_recruitments["): - { + case var s when s.StartsWith("unlocked_recruitments["): { unlocked_recruitments.Add(dataLine); break; } - case "total_screeshot_count": - { + case "total_screeshot_count": { total_screeshot_count = int.Parse(dataLine); break; } - case "undamaged_cargo_row": - { + case "undamaged_cargo_row": { undamaged_cargo_row = int.Parse(dataLine); break; } - case "service_visit_count": - { + case "service_visit_count": { service_visit_count = int.Parse(dataLine); break; } - case "last_service_pos": - { + case "last_service_pos": { last_service_pos = new SCS_Float_3(dataLine); break; } - case "gas_station_visit_count": - { + case "gas_station_visit_count": { gas_station_visit_count = int.Parse(dataLine); break; } - case "last_gas_station_pos": - { + case "last_gas_station_pos": { last_gas_station_pos = new SCS_Float_3(dataLine); break; } - case "emergency_call_count": - { + case "emergency_call_count": { emergency_call_count = int.Parse(dataLine); break; } - case "ai_crash_count": - { + case "ai_crash_count": { ai_crash_count = int.Parse(dataLine); break; } - case "truck_color_change_count": - { + case "truck_color_change_count": { truck_color_change_count = int.Parse(dataLine); break; } - case "red_light_fine_count": - { + case "red_light_fine_count": { red_light_fine_count = int.Parse(dataLine); break; } - case "cancelled_job_count": - { + case "cancelled_job_count": { cancelled_job_count = int.Parse(dataLine); break; } - case "total_fuel_litres": - { + case "total_fuel_litres": { total_fuel_litres = int.Parse(dataLine); break; } - case "total_fuel_price": - { + case "total_fuel_price": { total_fuel_price = int.Parse(dataLine); break; } - case "transported_cargo_types": - { + case "transported_cargo_types": { transported_cargo_types.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("transported_cargo_types["): - { + case var s when s.StartsWith("transported_cargo_types["): { transported_cargo_types.Add(dataLine); break; } - case "achieved_feats": - { + case "achieved_feats": { achieved_feats = int.Parse(dataLine); break; } - case "discovered_roads": - { + case "discovered_roads": { discovered_roads = int.Parse(dataLine); break; } - case "discovered_items": - { + case "discovered_items": { discovered_items.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("discovered_items["): - { + case var s when s.StartsWith("discovered_items["): { discovered_items.Add(UInt64.Parse(dataLine)); break; } - case "drivers_offer": - { + case "drivers_offer": { drivers_offer.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("drivers_offer["): - { + case var s when s.StartsWith("drivers_offer["): { drivers_offer.Add(dataLine); break; } - case "freelance_truck_offer": - { + case "freelance_truck_offer": { freelance_truck_offer = dataLine; break; } - case "trucks_bought_online": - { + case "trucks_bought_online": { trucks_bought_online = int.Parse(dataLine); break; } - case "special_cargo_timer": - { + case "special_cargo_timer": { special_cargo_timer = int.Parse(dataLine); break; } - case "screen_access_list": - { + case "screen_access_list": { screen_access_list.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("screen_access_list["): - { + case var s when s.StartsWith("screen_access_list["): { screen_access_list.Add(dataLine); break; } - case "driver_pool": - { + case "driver_pool": { driver_pool.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("driver_pool["): - { + case var s when s.StartsWith("driver_pool["): { driver_pool.Add(dataLine); break; } - case "registry": - { + case "registry": { registry = dataLine; break; } - case "company_jobs_invitation_sent": - { + case "company_jobs_invitation_sent": { company_jobs_invitation_sent = bool.Parse(dataLine); break; } - case "company_check_hash": - { + case "company_check_hash": { company_check_hash = UInt64.Parse(dataLine); break; } - case "relations": - { + case "relations": { relations.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("relations["): - { + case var s when s.StartsWith("relations["): { relations.Add(int.Parse(dataLine)); break; } - case "bus_stops": - { + case "bus_stops": { bus_stops.Capacity = int.Parse(dataLine); break; } - case var s when s.StartsWith("bus_stops["): - { + case var s when s.StartsWith("bus_stops["): { bus_stops.Add(dataLine); break; } - case "bus_job_log": - { + case "bus_job_log": { bus_job_log = dataLine; break; } - case "bus_experience_points": - { + case "bus_experience_points": { bus_experience_points = int.Parse(dataLine); break; } - case "bus_total_distance": - { + case "bus_total_distance": { bus_total_distance = int.Parse(dataLine); break; } - case "bus_finished_job_count": - { + case "bus_finished_job_count": { bus_finished_job_count = int.Parse(dataLine); break; } - case "bus_cancelled_job_count": - { + case "bus_cancelled_job_count": { bus_cancelled_job_count = int.Parse(dataLine); break; } - case "bus_total_passengers": - { + case "bus_total_passengers": { bus_total_passengers = int.Parse(dataLine); break; } - case "bus_total_stops": - { + case "bus_total_stops": { bus_total_stops = int.Parse(dataLine); break; } - case "bus_game_time": - { + case "bus_game_time": { bus_game_time = int.Parse(dataLine); break; } - case "bus_playing_time": - { + case "bus_playing_time": { bus_playing_time = int.Parse(dataLine); break; } //v1.49 - case "used_vehicle_assortment": - { + case "used_vehicle_assortment": { used_vehicle_assortment = dataLine; break; } //v1.49 - default: - { + default: { UnidentifiedLines.Add(dataLine); IO_Utilities.ErrorLogWriter(WriteErrorMsg(tagLine, dataLine)); break; } } - } - catch (Exception ex) - { + } catch (Exception ex) { IO_Utilities.ErrorLogWriter(WriteErrorMsg(ex.Message, tagLine, dataLine)); break; } @@ -1129,13 +971,11 @@ internal Economy(string[] _input) } } - internal string PrintOut(uint _version) - { + internal string PrintOut(uint _version) { return PrintOut(_version, null); } - internal string PrintOut(uint _version, string _nameless) - { + internal string PrintOut(uint _version, string _nameless) { //get data from helping variables getPlayerSkillsFromArray(); @@ -1208,8 +1048,7 @@ internal string PrintOut(uint _version, string _nameless) if (_version < (byte)saveVTV.v146) returnSB.AppendLine(" stored_display_mode: " + stored_display_mode.ToString()); - if (_version >= (byte)saveVTV.v146) - { + if (_version >= (byte)saveVTV.v146) { returnSB.AppendLine(" stored_display_mode_on_dashboard: " + stored_display_mode_on_dashboard.ToString()); returnSB.AppendLine(" stored_display_mode_on_gps: " + stored_display_mode_on_gps.ToString()); } @@ -1362,8 +1201,7 @@ internal string PrintOut(uint _version, string _nameless) for (int i = 0; i < drivers_offer.Count; i++) returnSB.AppendLine(" drivers_offer[" + i + "]: " + drivers_offer[i]); - if (_version > (byte)saveVTV.v148) - { + if (_version > (byte)saveVTV.v148) { returnSB.AppendLine(" used_vehicle_assortment: " + used_vehicle_assortment); } @@ -1421,13 +1259,11 @@ internal string PrintOut(uint _version, string _nameless) } //Methods Support - internal void setPlayerSkillsArray() - { - _playerSkills = new byte[6] { adr, long_dist, heavy, fragile, urgent, mechanical}; + internal void setPlayerSkillsArray() { + _playerSkills = new byte[6] { adr, long_dist, heavy, fragile, urgent, mechanical }; } - internal void getPlayerSkillsFromArray() - { + internal void getPlayerSkillsFromArray() { adr = _playerSkills[0]; long_dist = _playerSkills[1]; heavy = _playerSkills[2]; @@ -1436,13 +1272,11 @@ internal void getPlayerSkillsFromArray() mechanical = _playerSkills[5]; } - internal int[] getPlayerLvl() - { - int currentLvl = 0, lvlThreshhold = 0, - finalThreshhold = Globals.PlayerLevelUps[Globals.PlayerLevelUps.Length - 1]; + internal int[] getPlayerLvl() { + int currentLvl = 0, lvlThreshhold = 0, + finalThreshhold = MainForm.SelectedGame.PlayerLevelUps[MainForm.SelectedGame.PlayerLevelUps.Count - 1]; - foreach (int lvlstep in Globals.PlayerLevelUps) - { + foreach (int lvlstep in MainForm.SelectedGame.PlayerLevelUps) { lvlThreshhold += lvlstep; if (experience_points < lvlThreshhold) @@ -1451,8 +1285,7 @@ internal int[] getPlayerLvl() currentLvl++; } - do - { + do { lvlThreshhold += finalThreshhold; if (experience_points < lvlThreshhold) @@ -1463,8 +1296,7 @@ internal int[] getPlayerLvl() } while (true); } - internal void setPlayerExp(int _plLvl) - { + internal void setPlayerExp(int _plLvl) { uint experience = 0; if (_plLvl < 0) @@ -1473,18 +1305,17 @@ internal void setPlayerExp(int _plLvl) if (_plLvl > 150) _plLvl = 150; - for (int i = 0; i < _plLvl; i++) - { - if (i < Globals.PlayerLevelUps.Length) - experience += (uint)Globals.PlayerLevelUps[i]; + for (int i = 0; i < _plLvl; i++) { + if (i < MainForm.SelectedGame.PlayerLevelUps.Count) + experience += (uint)MainForm.SelectedGame.PlayerLevelUps[i]; else - experience += (uint)Globals.PlayerLevelUps[Globals.PlayerLevelUps.Length - 1]; + experience += (uint)MainForm.SelectedGame.PlayerLevelUps[MainForm.SelectedGame.PlayerLevelUps.Count - 1]; } - if (_plLvl < Globals.PlayerLevelUps.Length) - experience += (uint)Globals.PlayerLevelUps[_plLvl] - 1; + if (_plLvl < MainForm.SelectedGame.PlayerLevelUps.Count) + experience += (uint)MainForm.SelectedGame.PlayerLevelUps[_plLvl] - 1; else - experience += (uint)Globals.PlayerLevelUps[Globals.PlayerLevelUps.Length - 1] - 1; + experience += (uint)MainForm.SelectedGame.PlayerLevelUps[MainForm.SelectedGame.PlayerLevelUps.Count - 1] - 1; experience_points = experience; } diff --git a/TS SE Tool/CustomClasses/Save/SaveFileProfileData.cs b/TS SE Tool/CustomClasses/Save/SaveFileProfileData.cs index ad6cf244..08156449 100644 --- a/TS SE Tool/CustomClasses/Save/SaveFileProfileData.cs +++ b/TS SE Tool/CustomClasses/Save/SaveFileProfileData.cs @@ -25,59 +25,61 @@ limitations under the License. using TS_SE_Tool.Utilities; using TS_SE_Tool.Save.DataFormat; using TS_SE_Tool.Save.Items; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool -{ - class SaveFileProfileData : SiiNBlockCore - { - internal string UserProfileNameless { get; set; } = ""; +namespace TS_SE_Tool { + class SaveFileProfileData : SiiNBlockCore { + private SupportedGame SelectedGame { get; set; } + public SaveFileProfileData(SupportedGame selectedGame) { + SelectedGame = selectedGame; + } + internal string UserProfileNameless { get; set; } = ""; //--- - internal bool GenderMale { get; set; } = false; - internal ushort Face { get; set; } = 0; - internal string Brand { get; set; } = ""; + internal bool GenderMale { get; set; } = false; + internal ushort Face { get; set; } = 0; + internal string Brand { get; set; } = ""; - internal string Logo { get; set; } = ""; + internal string Logo { get; set; } = ""; - internal SCS_String CompanyName { get; set; } = ""; + internal SCS_String CompanyName { get; set; } = ""; //--- - internal string MapPath { get; set; } = ""; + internal string MapPath { get; set; } = ""; //--- - internal uint CachedExperiencePoints { get; set; } = 0; - internal uint CachedDistance { get; set; } = 0; + internal uint CachedExperiencePoints { get; set; } = 0; + internal uint CachedDistance { get; set; } = 0; //--- #region UserData - internal uint UserDataSize { get; set; } = 0; - - internal uint? ud0_WoTTime { get; set; } = null; //0 WoT profile connection date - internal string ud1_WoTLicensePlate { get; set; } = ""; //1 WoT licenseplate - internal string ud2_SomeCheckSum { get; set; } = ""; //2 ??? - internal byte? ud3_WoTConnected { get; set; } = null; //3 isWoTConnected? - internal decimal ud4_RoadsExplored { get; set; } = 0.0M; //4 Road explored persentage - internal uint ud5_DeliveriesFinished { get; set; } = 0; //5 Finished deliveries - internal uint ud6_OwnedTrucks { get; set; } = 0; //6 Owned trucks count - internal uint ud7_OwnedGaradesSmall { get; set; } = 0; //7 Small garages - internal uint ud8_OwnedGaradesLarge { get; set; } = 0; //8 Large garages - internal ulong ud9_GameTimeSpent { get; set; } = 0; //9 Game time spent - internal uint ud10_RealTimeSpent { get; set; } = 0; //10 Real time spent - internal string ud11_CurrentTruck { get; set; } = ""; //11 Current truck //brand.model + internal uint UserDataSize { get; set; } = 0; + + internal uint? ud0_WoTTime { get; set; } = null; //0 WoT profile connection date + internal string ud1_WoTLicensePlate { get; set; } = ""; //1 WoT licenseplate + internal string ud2_SomeCheckSum { get; set; } = ""; //2 ??? + internal byte? ud3_WoTConnected { get; set; } = null; //3 isWoTConnected? + internal decimal ud4_RoadsExplored { get; set; } = 0.0M; //4 Road explored persentage + internal uint ud5_DeliveriesFinished { get; set; } = 0; //5 Finished deliveries + internal uint ud6_OwnedTrucks { get; set; } = 0; //6 Owned trucks count + internal uint ud7_OwnedGaradesSmall { get; set; } = 0; //7 Small garages + internal uint ud8_OwnedGaradesLarge { get; set; } = 0; //8 Large garages + internal ulong ud9_GameTimeSpent { get; set; } = 0; //9 Game time spent + internal uint ud10_RealTimeSpent { get; set; } = 0; //10 Real time spent + internal string ud11_CurrentTruck { get; set; } = ""; //11 Current truck //brand.model internal List ud12_OwnedTruckList = new List(); //12 Owned trucks //brand.model:count,brand.model:count,...; - internal string ud13_SomeUserData { get; set; } = ""; //13 ??? - internal uint? ud14_SomeUserData { get; set; } = null; //14 ??? //0 - internal string ud15_SomeUserData { get; set; } = ""; //15 ??? //production - internal uint ud16_OwnedTrailers { get; set; } = 0; //16 Owned trailers + internal string ud13_SomeUserData { get; set; } = ""; //13 ??? + internal uint? ud14_SomeUserData { get; set; } = null; //14 ??? //0 + internal string ud15_SomeUserData { get; set; } = ""; //15 ??? //production + internal uint ud16_OwnedTrailers { get; set; } = 0; //16 Owned trailers #region user data backend private string[] user_data_array; - private string user_data_0 - { + private string user_data_0 { get { return ((ud0_WoTTime != null) ? ud0_WoTTime.ToString() : "\"\""); } @@ -86,8 +88,7 @@ private string user_data_0 } } - private string user_data_1 - { + private string user_data_1 { get { return (!string.IsNullOrEmpty(ud1_WoTLicensePlate) ? "\"" + ud1_WoTLicensePlate + "\"" : "\"\""); } @@ -96,145 +97,115 @@ private string user_data_1 } } - private string user_data_2 - { + private string user_data_2 { get { return (!string.IsNullOrEmpty(ud2_SomeCheckSum) ? ud2_SomeCheckSum : "\"\""); } - set - { + set { ud2_SomeCheckSum = (value != "\"\"") ? value.Trim(charsToTrim) : ""; } } - private string user_data_3 - { + private string user_data_3 { get { return ((ud3_WoTConnected != null) ? ud3_WoTConnected.ToString() : "\"\""); } - set - { + set { ud3_WoTConnected = (value != "\"\"") ? byte.Parse(value.Trim(charsToTrim)) : (byte?)null; } } - private string user_data_4 - { + private string user_data_4 { get { return "\"" + ud4_RoadsExplored.ToString(NumberFormatInfo.InvariantInfo) + "\""; } - set - { - ud4_RoadsExplored = decimal.Parse (value.Trim(charsToTrim), CultureInfo.InvariantCulture); + set { + ud4_RoadsExplored = decimal.Parse(value.Trim(charsToTrim), CultureInfo.InvariantCulture); } } - private string user_data_5 - { + private string user_data_5 { get { return ud5_DeliveriesFinished.ToString(); } - set - { + set { ud5_DeliveriesFinished = uint.Parse(value); } } - private string user_data_6 - { + private string user_data_6 { get { return ud6_OwnedTrucks.ToString(); } - set - { + set { ud6_OwnedTrucks = uint.Parse(value); } } - private string user_data_7 - { + private string user_data_7 { get { return ud7_OwnedGaradesSmall.ToString(); } - set - { + set { ud7_OwnedGaradesSmall = uint.Parse(value); } } - private string user_data_8 - { + private string user_data_8 { get { return ud8_OwnedGaradesLarge.ToString(); } - set - { + set { ud8_OwnedGaradesLarge = uint.Parse(value); } } - private string user_data_9 - { + private string user_data_9 { get { return ud9_GameTimeSpent.ToString(); } - set - { + set { ud9_GameTimeSpent = uint.Parse(value); } } - private string user_data_10 - { + private string user_data_10 { get { return ud10_RealTimeSpent.ToString(); } - set - { + set { ud10_RealTimeSpent = uint.Parse(value); } } - private string user_data_11 - { - get - { + private string user_data_11 { + get { return (!string.IsNullOrEmpty(ud15_SomeUserData) ? "\"" + ud11_CurrentTruck + "\"" : "\"\""); } - set - { + set { ud11_CurrentTruck = (value != "\"\"") ? value.Trim(charsToTrim) : ""; } } - private string user_data_12 - { + private string user_data_12 { get { return ((ud12_OwnedTruckList.Count > 0) ? "\"" + String.Join(",", ud12_OwnedTruckList) + "\"" : "\"\""); } - set - { + set { ud12_OwnedTruckList = value.Trim(charsToTrim).Replace(" ", "").Split(new char[] { ',' }).ToList(); } } - private string user_data_13 - { - get - { + private string user_data_13 { + get { return (!string.IsNullOrEmpty(ud13_SomeUserData) ? ud13_SomeUserData : "\"\""); } - set - { + set { ud13_SomeUserData = value.Trim(charsToTrim); } } - private string user_data_14 - { + private string user_data_14 { get { - return ((ud14_SomeUserData != null) ? ud14_SomeUserData.ToString() : "\"\""); } - set - { + return ((ud14_SomeUserData != null) ? ud14_SomeUserData.ToString() : "\"\""); + } + set { ud14_SomeUserData = (value != "\"\"") ? uint.Parse(value.Trim(charsToTrim)) : (uint?)null; } } - private string user_data_15 - { + private string user_data_15 { get { - return (!string.IsNullOrEmpty(ud15_SomeUserData) ? ud15_SomeUserData : "\"\""); } - set - { + return (!string.IsNullOrEmpty(ud15_SomeUserData) ? ud15_SomeUserData : "\"\""); + } + set { ud15_SomeUserData = value.Trim(charsToTrim); } } - private string user_data_16 - { + private string user_data_16 { get { return ud16_OwnedTrailers.ToString(); } - set - { + set { ud16_OwnedTrailers = uint.Parse(value); } } @@ -243,25 +214,25 @@ private string user_data_16 #endregion - internal uint Customization { get; set; } = 0; //in bit flag format + internal uint Customization { get; set; } = 0; //in bit flag format - internal List ActiveMods; //Count + internal List ActiveMods; //Count - internal List CachedStats; //cached_stats + internal List CachedStats; //cached_stats - internal List CachedDiscovery; //cached_discovery + internal List CachedDiscovery; //cached_discovery //End - internal byte Version { get; set; } = 0; //profile data format version + internal byte Version { get; set; } = 0; //profile data format version - internal SCS_String OnlineUserName { get; set; } = ""; + internal SCS_String OnlineUserName { get; set; } = ""; - internal SCS_String OnlinePassword { get; set; } = ""; + internal SCS_String OnlinePassword { get; set; } = ""; - internal SCS_String ProfileName { get; set; } = ""; + internal SCS_String ProfileName { get; set; } = ""; - internal uint CreationTime { get; set; } = 0; - internal uint SaveTime { get; set; } = 0; + internal uint CreationTime { get; set; } = 0; + internal uint SaveTime { get; set; } = 0; //==== @@ -275,57 +246,45 @@ private string user_data_16 private char[] charsToTrim = new char[] { '"' }; // - public object this[string propertyName] - { + public object this[string propertyName] { get { return this.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(this, null); } set { this.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).SetValue(this, value, null); } } - public void ProcessData(string[] _fileLines) - { + public void ProcessData(string[] _fileLines) { string[] lineParts; string currentLine = ""; string tagLine = "", dataLine = ""; - for (int lineNumber = 0; lineNumber < _fileLines.Length; lineNumber++) - { + for (int lineNumber = 0; lineNumber < _fileLines.Length; lineNumber++) { currentLine = _fileLines[lineNumber].Trim(); - if (currentLine.Contains(':')) - { + if (currentLine.Contains(':')) { string[] splittedLine = currentLine.Split(new char[] { ':' }, 2); tagLine = splittedLine[0].Trim(); dataLine = splittedLine[1].Trim(); - } - else - { + } else { tagLine = currentLine.Trim(); dataLine = ""; } - try - { - switch (tagLine) - { - case "SiiNunit": - { + try { + switch (tagLine) { + case "SiiNunit": { unsortedDataDict.Add(unsortedOrder, new List()); break; } case "": - case "{": - { + case "{": { break; } - case "}": - { + case "}": { unsortedOrder++; unsortedDataDict.Add(unsortedOrder, new List()); break; } - case "user_profile": - { + case "user_profile": { unsortedOrder++; unsortedDataDict.Add(unsortedOrder, new List()); @@ -333,62 +292,52 @@ public void ProcessData(string[] _fileLines) break; } - case "face": - { + case "face": { Face = ushort.Parse(dataLine); break; } - case "brand": - { + case "brand": { Brand = dataLine; break; } - case "map_path": - { + case "map_path": { MapPath = dataLine; break; } - case "logo": - { + case "logo": { Logo = dataLine; break; } - case "company_name": - { + case "company_name": { CompanyName = dataLine; break; } - case "male": - { + case "male": { GenderMale = bool.Parse(dataLine); break; } - case "cached_experience": - { + case "cached_experience": { CachedExperiencePoints = uint.Parse(dataLine); break; } - case "cached_distance": - { + case "cached_distance": { CachedDistance = uint.Parse(dataLine); break; } - case "user_data": - { + case "user_data": { UserDataSize = uint.Parse(dataLine); user_data_array = new string[UserDataSize]; - for (int i = 0; i < UserDataSize; i++) - { + for (int i = 0; i < UserDataSize; i++) { lineNumber++; lineParts = _fileLines[lineNumber].Split(new char[] { ':' }, 2); @@ -405,12 +354,10 @@ public void ProcessData(string[] _fileLines) break; } - case "active_mods": - { + case "active_mods": { ActiveMods = new List(int.Parse(dataLine)); - for (int x = 0; x < ActiveMods.Capacity; x++) - { + for (int x = 0; x < ActiveMods.Capacity; x++) { lineNumber++; lineParts = _fileLines[lineNumber].Split(new char[] { ':' }, 2); ActiveMods.Add(lineParts[1].Trim()); @@ -418,18 +365,15 @@ public void ProcessData(string[] _fileLines) break; } - case "customization": - { + case "customization": { Customization = uint.Parse(dataLine); break; } - case "cached_stats": - { + case "cached_stats": { CachedStats = new List(int.Parse(dataLine)); - for (int x = 0; x < CachedStats.Capacity; x++) - { + for (int x = 0; x < CachedStats.Capacity; x++) { lineNumber++; lineParts = _fileLines[lineNumber].Split(new char[] { ':' }); CachedStats.Add(ushort.Parse(lineParts[1].Trim())); @@ -437,12 +381,10 @@ public void ProcessData(string[] _fileLines) break; } - case "cached_discovery": - { + case "cached_discovery": { CachedDiscovery = new List(int.Parse(dataLine)); - for (int x = 0; x < CachedDiscovery.Capacity; x++) - { + for (int x = 0; x < CachedDiscovery.Capacity; x++) { lineNumber++; lineParts = _fileLines[lineNumber].Split(new char[] { ':' }); CachedDiscovery.Add(ushort.Parse(lineParts[1].Trim())); @@ -450,61 +392,51 @@ public void ProcessData(string[] _fileLines) break; } - case "version": - { + case "version": { Version = byte.Parse(dataLine); break; } - case "online_user_name": - { + case "online_user_name": { OnlineUserName = dataLine; break; } - case "online_password": - { + case "online_password": { OnlinePassword = dataLine; break; } - case "profile_name": - { + case "profile_name": { ProfileName = dataLine; break; } - case "creation_time": - { + case "creation_time": { CreationTime = uint.Parse(dataLine); break; } - case "save_time": - { + case "save_time": { SaveTime = uint.Parse(dataLine); break; } - default: - { + default: { unsortedDataDict[unsortedOrder].Add(currentLine); IO_Utilities.ErrorLogWriter(WriteErrorMsg(tagLine, dataLine)); break; } } - } - catch (Exception ex) - { + } catch (Exception ex) { IO_Utilities.ErrorLogWriter(WriteErrorMsg(ex.Message, tagLine, dataLine)); break; } } } - public string PrintOut() - { + public string PrintOut() { int unsortedOrder = 0; StringBuilder sbResult = new StringBuilder(); @@ -529,37 +461,33 @@ public string PrintOut() if (verCheck4) sbResult.AppendLine(writeVersionOnline()); - + sbResult.AppendLine(" user_data: " + UserDataSize.ToString()); - for (int i = 0; i < UserDataSize; i++) - { - string propertyName = "user_data_" + i.ToString(); - - if (this.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic) != null) - sbResult.AppendLine(" user_data[" + i.ToString() + "]: " + this[propertyName]); - else - sbResult.AppendLine(user_data_array[i]); - } + for (int i = 0; i < UserDataSize; i++) { + string propertyName = "user_data_" + i.ToString(); + + if (this.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic) != null) + sbResult.AppendLine(" user_data[" + i.ToString() + "]: " + this[propertyName]); + else + sbResult.AppendLine(user_data_array[i]); + } sbResult.AppendLine(" active_mods: " + ActiveMods.Capacity.ToString()); - for (int i = 0; i < ActiveMods.Capacity; i++) - { - sbResult.AppendLine(" active_mods[" + i.ToString() + "]: " + ActiveMods[i].ToString()); - } + for (int i = 0; i < ActiveMods.Capacity; i++) { + sbResult.AppendLine(" active_mods[" + i.ToString() + "]: " + ActiveMods[i].ToString()); + } sbResult.AppendLine(" customization: " + Customization.ToString()); sbResult.AppendLine(" cached_stats: " + CachedStats.Capacity.ToString()); - for (int i = 0; i < CachedStats.Capacity; i++) - { - sbResult.AppendLine(" cached_stats[" + i.ToString() + "]: " + CachedStats[i].ToString()); - } + for (int i = 0; i < CachedStats.Capacity; i++) { + sbResult.AppendLine(" cached_stats[" + i.ToString() + "]: " + CachedStats[i].ToString()); + } sbResult.AppendLine(" cached_discovery: " + CachedDiscovery.Capacity.ToString()); - for (int i = 0; i < CachedDiscovery.Capacity; i++) - { - sbResult.AppendLine(" cached_discovery[" + i.ToString() + "]: " + CachedDiscovery[i].ToString()); - } + for (int i = 0; i < CachedDiscovery.Capacity; i++) { + sbResult.AppendLine(" cached_discovery[" + i.ToString() + "]: " + CachedDiscovery[i].ToString()); + } if (verCheck5 || !verCheck4) sbResult.AppendLine(writeVersionOnline()); @@ -583,37 +511,32 @@ public string PrintOut() //=== Help methods - void writeUnsortedLines() - { - if (unsortedDataDict[unsortedOrder].Count > 0) - { + void writeUnsortedLines() { + if (unsortedDataDict[unsortedOrder].Count > 0) { foreach (string line in unsortedDataDict[unsortedOrder]) sbResult.AppendLine(line); } unsortedOrder++; } - string writeVersionOnline() - { + string writeVersionOnline() { StringBuilder sbVerOnline = new StringBuilder(); sbVerOnline.AppendLine(" version: " + Version.ToString()); sbVerOnline.AppendLine(" online_user_name: " + OnlineUserName.ToString()); - sbVerOnline.Append (" online_password: " + OnlinePassword.ToString()); + sbVerOnline.Append(" online_password: " + OnlinePassword.ToString()); return sbVerOnline.ToString(); } } //=== Methods - - public int[] getPlayerLvl() - { + + public int[] getPlayerLvl() { int CurrentLVL = 0, lvlthreshhold = 0; int[] Result; - foreach (int lvlstep in Globals.PlayerLevelUps) - { + foreach (int lvlstep in SelectedGame.PlayerLevelUps) { lvlthreshhold += lvlstep; if (CachedExperiencePoints < lvlthreshhold) @@ -623,10 +546,9 @@ public int[] getPlayerLvl() CurrentLVL++; } - int finalthreshhold = Globals.PlayerLevelUps[Globals.PlayerLevelUps.Length - 1]; + int finalthreshhold = SelectedGame.PlayerLevelUps[SelectedGame.PlayerLevelUps.Count - 1]; - do - { + do { lvlthreshhold += finalthreshhold; if (CachedExperiencePoints < lvlthreshhold) @@ -636,18 +558,15 @@ public int[] getPlayerLvl() } while (true); } - public string getPlayerLvlName(List _playerLevelNames, int _playerlvl) - { + public string getPlayerLvlName(List _playerLevelNames, int _playerlvl) { for (int i = _playerLevelNames.Count - 1; i >= 0; i--) - if (_playerLevelNames[i].LevelLimit <= _playerlvl) - { + if (_playerLevelNames[i].LevelLimit <= _playerlvl) { return _playerLevelNames[i].LevelName; } return ""; } - public string getProfileSummary(List _playerLevelNames) - { + public string getProfileSummary(List _playerLevelNames) { List _newText = new List(); int _playerlvl = getPlayerLvl()[0]; @@ -673,8 +592,7 @@ public string getProfileSummary(List _playerLevelNames) } //=== - public void WriteToStream(StreamWriter _streamWriter) - { + public void WriteToStream(StreamWriter _streamWriter) { _streamWriter.Write(PrintOut()); } } diff --git a/TS SE Tool/CustomClasses/Utilities/IO_Utilities.cs b/TS SE Tool/CustomClasses/Utilities/IO_Utilities.cs index 86925184..cdf8a961 100644 --- a/TS SE Tool/CustomClasses/Utilities/IO_Utilities.cs +++ b/TS SE Tool/CustomClasses/Utilities/IO_Utilities.cs @@ -19,28 +19,211 @@ limitations under the License. using System.Text; using System.Threading.Tasks; using System.IO; +using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; +using System.Diagnostics; -namespace TS_SE_Tool.Utilities -{ - class IO_Utilities - { - internal static void DirectoryCopy(string _sourceDirName, string _destDirName, bool _copySubDirs) - { +namespace TS_SE_Tool.Utilities { + static class IO_Extensions { + public enum MachineType : ushort { + IMAGE_FILE_MACHINE_UNKNOWN = 0x0, + IMAGE_FILE_MACHINE_AM33 = 0x1d3, + IMAGE_FILE_MACHINE_AMD64 = 0x8664, + IMAGE_FILE_MACHINE_ARM = 0x1c0, + IMAGE_FILE_MACHINE_EBC = 0xebc, + IMAGE_FILE_MACHINE_I386 = 0x14c, + IMAGE_FILE_MACHINE_IA64 = 0x200, + IMAGE_FILE_MACHINE_M32R = 0x9041, + IMAGE_FILE_MACHINE_MIPS16 = 0x266, + IMAGE_FILE_MACHINE_MIPSFPU = 0x366, + IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466, + IMAGE_FILE_MACHINE_POWERPC = 0x1f0, + IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1, + IMAGE_FILE_MACHINE_R4000 = 0x166, + IMAGE_FILE_MACHINE_SH3 = 0x1a2, + IMAGE_FILE_MACHINE_SH3DSP = 0x1a3, + IMAGE_FILE_MACHINE_SH4 = 0x1a6, + IMAGE_FILE_MACHINE_SH5 = 0x1a8, + IMAGE_FILE_MACHINE_THUMB = 0x1c2, + IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169, + IMAGE_FILE_MACHINE_ARM64 = 0xaa64 + } + #region DirectoryInfo + public static DirectoryInfo Combine(this DirectoryInfo dir, params string[] paths) { + var final = dir.FullName; + foreach (var path in paths) { + final = Path.Combine(final, path); + } + return new DirectoryInfo(final); + } + public static bool IsEmpty(this DirectoryInfo directory) { + return !Directory.EnumerateFileSystemEntries(directory.FullName).Any(); + } + public static string FullString(this DirectoryInfo directory) { + return $"\"{directory}\"{directory.StatusString()}"; + } + public static string StatusString(this DirectoryInfo directory, bool existsInfo = false) { + if (directory is null) return " (is null ❌)"; + if (File.Exists(directory.FullName)) return " (is file ❌)"; + if (!directory.Exists) return " (does not exist ❌)"; + if (directory.IsEmpty()) return " (is empty ⚠️)"; + return existsInfo ? " (exists ✅)" : string.Empty; + } + public static void Copy(this DirectoryInfo source, DirectoryInfo target, bool overwrite = false) { + Directory.CreateDirectory(target.FullName); + foreach (FileInfo fi in source.GetFiles()) + fi.CopyTo(Path.Combine(target.FullName, fi.Name), overwrite); + foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) + Copy(diSourceSubDir, target.CreateSubdirectory(diSourceSubDir.Name)); + } + public static bool Backup(this DirectoryInfo directory, bool overwrite = false) { + if (!directory.Exists) return false; + var backupDirPath = directory.FullName + ".bak"; + if (Directory.Exists(backupDirPath) && !overwrite) return false; + Directory.CreateDirectory(backupDirPath); + foreach (FileInfo fi in directory.GetFiles()) fi.CopyTo(Path.Combine(backupDirPath, fi.Name), overwrite); + foreach (DirectoryInfo diSourceSubDir in directory.GetDirectories()) { + diSourceSubDir.Copy(Directory.CreateDirectory(Path.Combine(backupDirPath, diSourceSubDir.Name)), overwrite); + } + return true; + } + public static void OpenInExplorer(this DirectoryInfo dir) { + if (!dir.Exists) dir.Create(); + Process_Utilities.StartProcess("explorer.exe", args: dir.FullName); + } + //public static void ShowInExplorer(this DirectoryInfo dir) => Process_Utilities.StartProcess("explorer.exe", args: dir.Parent.FullName); + #endregion + #region FileInfo + public static FileInfo CombineFile(this DirectoryInfo dir, params string[] paths) { + var final = dir.FullName; + foreach (var path in paths) { + final = Path.Combine(final, path); + } + return new FileInfo(final); + } + public static FileInfo Combine(this FileInfo file, params string[] paths) { + var final = file.DirectoryName; + foreach (var path in paths) { + final = Path.Combine(final, path); + } + return new FileInfo(final); + } + public static FileVersionInfo GetVersionInfo(this FileInfo file) => FileVersionInfo.GetVersionInfo(file.FullName); + public static string FileNameWithoutExtension(this FileInfo file) { + return Path.GetFileNameWithoutExtension(file.Name); + } + /*public static string Extension(this FileInfo file) { + return Path.GetExtension(file.Name); + }*/ + public static string FullString(this FileInfo file) { + return $"\"{file}\"{file.StatusString()}"; + } + public static string StatusString(this FileInfo file, bool existsInfo = false) { + if (file is null) return "(is null ❌)"; + if (Directory.Exists(file.FullName)) return "(is directory ❌)"; + if (!file.Exists) return "(does not exist ❌)"; + if (file.Length < 1) return "(is empty ⚠️)"; + return existsInfo ? "(exists ✅)" : string.Empty; + } + public static void AppendLine(this FileInfo file, string line) { + try { + if (!file.Exists) file.Create(); + File.AppendAllLines(file.FullName, new string[] { line }); + } catch { } + } + public static void WriteAllText(this FileInfo file, string text) => File.WriteAllText(file.FullName, text); + public static string ReadAllText(this FileInfo file) => File.ReadAllText(file.FullName); + public static List ReadAllLines(this FileInfo file) => File.ReadAllLines(file.FullName).ToList(); + public static bool Backup(this FileInfo file, bool overwrite = false) { + if (!file.Exists) return false; + var backupFilePath = file.FullName + ".bak"; + if (File.Exists(backupFilePath) && !overwrite) return false; + File.Copy(file.FullName, backupFilePath, overwrite); + return true; + } + public static MachineType GetDllMachineType(FileInfo file) { + // See http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx + // Offset to PE header is always at 0x3C. + // The PE header starts with "PE\0\0" = 0x50 0x45 0x00 0x00, + // followed by a 2-byte machine type field (see the document above for the enum). + // + using (var fs = file.OpenRead()) + using (var br = new BinaryReader(fs)) { + fs.Seek(0x3c, SeekOrigin.Begin); + Int32 peOffset = br.ReadInt32(); + fs.Seek(peOffset, SeekOrigin.Begin); + UInt32 peHead = br.ReadUInt32(); + if (peHead != 0x00004550) // "PE\0\0", little-endian + return MachineType.IMAGE_FILE_MACHINE_UNKNOWN; + //throw new Exception("Can't find PE header"); + return (MachineType)br.ReadUInt16(); + } + } + public static bool Is64Bit(this FileInfo file, bool _default = false) { + //try { + //var peFile = new PeFile(fileInfo.FullName); + //return peFile.ImageNtHeaders.OptionalHeader.DataDirectory[(int)DataDirectoryType.Import].VirtualAddress == 0; + //} catch (Exception ex) { + //IO_Utilities.ErrorLogWriter(ex.Message); + var matches64 = Regex.IsMatch(file.FileNameWithoutExtension(), @"(x64|x86_64|64bit|64)$", RegexOptions.IgnoreCase); + var matches32 = Regex.IsMatch(file.FileNameWithoutExtension(), @"(x86|32bit|86|32)$", RegexOptions.IgnoreCase); + return matches64 || (_default && !matches32); + //} + } + public static bool Is64BitDll(this FileInfo file, bool _default = false) { + switch (GetDllMachineType(file)) { + case MachineType.IMAGE_FILE_MACHINE_AMD64: + case MachineType.IMAGE_FILE_MACHINE_IA64: + return true; + case MachineType.IMAGE_FILE_MACHINE_I386: + return false; + default: + return _default; + } + } + + internal static bool IsDisabled(this FileInfo file) => file != null && file.Extension.ToLowerInvariant() == IO_Utilities.DisabledFileExtension; + internal static void Toggle(this FileInfo file, bool? enable = null) { + var disabled = file.IsDisabled(); + if (disabled && (!enable.HasValue || enable.Value)) file.Enable(); + else if (!disabled && (!enable.HasValue || !enable.Value)) file.Disable(); + } + internal static void Enable(this FileInfo file) { + if (file.IsDisabled()) + file.MoveTo(file.FullName.Replace(IO_Utilities.DisabledFileExtension, string.Empty)); + } + internal static void Disable(this FileInfo file) { + if (!file.IsDisabled()) + file.MoveTo(file.FullName + ".disabled"); + } + internal static void CopyTo(this FileInfo source, FileInfo target) => source.CopyTo(target.FullName); + public static void OpenWithDefaultApp(this FileInfo file) => System.Diagnostics.Process.Start(file.FullName); + public static void OpenInExplorer(this FileInfo file) { + if (!file.Directory.Exists) file.Directory.Create(); + Process_Utilities.StartProcess("explorer.exe", args: file.ToString()); + } + public static void ShowInExplorer(this FileInfo file) { + if (!file.Directory.Exists) file.Directory.Create(); + Process_Utilities.StartProcess("explorer.exe", args: file.Directory.ToString()); + } + + #endregion + } + class IO_Utilities { + internal const string DisabledFileExtension = ".disabled"; + internal static void DirectoryCopy(string _sourceDirName, string _destDirName, bool _copySubDirs) { DirectoryCopy(_sourceDirName, _destDirName, _copySubDirs, null); } - internal static void DirectoryCopy(string _sourceDirName, string _destDirName, bool _copySubDirs, string[] _fileList) - { + internal static void DirectoryCopy(string _sourceDirName, string _destDirName, bool _copySubDirs, string[] _fileList) { // Get the subdirectories for the specified directory. DirectoryInfo dirInfo = new DirectoryInfo(_sourceDirName); - if (!dirInfo.Exists) - { + if (!dirInfo.Exists) { throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + _sourceDirName); } // If the destination directory doesn't exist, create it. - if (!Directory.Exists(_destDirName)) - { + if (!Directory.Exists(_destDirName)) { Directory.CreateDirectory(_destDirName); } @@ -48,10 +231,9 @@ internal static void DirectoryCopy(string _sourceDirName, string _destDirName, b FileInfo[] files = dirInfo.GetFiles(); string tempPath = ""; - foreach (FileInfo file in files) - { - if ( _fileList != null ) - if ( !_fileList.Contains(file.Name) ) + foreach (FileInfo file in files) { + if (_fileList != null) + if (!_fileList.Contains(file.Name)) continue; tempPath = Path.Combine(_destDirName, file.Name); @@ -60,56 +242,41 @@ internal static void DirectoryCopy(string _sourceDirName, string _destDirName, b } // If copying subdirectories, copy them and their contents to new location. - if (_copySubDirs) - { + if (_copySubDirs) { DirectoryInfo[] dirInfoArray = dirInfo.GetDirectories(); - foreach (DirectoryInfo subdir in dirInfoArray) - { + foreach (DirectoryInfo subdir in dirInfoArray) { tempPath = Path.Combine(_destDirName, subdir.Name); DirectoryCopy(subdir.FullName, tempPath, _copySubDirs, _fileList); } } } - internal static void LogWriter(string _error) - { - try - { - using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\log.log", true)) - { + internal static void LogWriter(string _error) { + try { + using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\log.log", true)) { writer.WriteLine(DateTime.Now + " " + _error); } - } - catch - { } - } - - internal static void ErrorLogWriter(string _error) - { - try - { - using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\errorlog.log", true)) - { - writer.WriteLine(DateTime.Now + " | " + AssemblyData.AssemblyProduct + " - " + AssemblyData.AssemblyVersion + " | " + - Globals.SelectedProfileName + " [ " + Globals.SelectedProfile + " ] >> " + + } catch { } + } + + internal static void ErrorLogWriter(string _error) { + try { + using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\errorlog.log", true)) { + writer.WriteLine(DateTime.Now + " | " + AssemblyData.AssemblyProduct + " - " + AssemblyData.AssemblyVersion + " | " + + Globals.SelectedProfileName + " [ " + Globals.SelectedProfile + " ] >> " + Globals.SelectedSaveName + " [ " + Globals.SelectedSave + " ] "); writer.WriteLine(_error + Environment.NewLine); } - } - catch - { } + } catch { } } - internal static void WritePreviewTOBJ(string _path, string _name, string _pathToTGA) - { + internal static void WritePreviewTOBJ(string _path, string _name, string _pathToTGA) { WritePreviewTOBJ(_path + "\\" + _name + ".tobj", _pathToTGA); } - internal static void WritePreviewTOBJ(string _pathToTOBJ, string _pathToTGA) - { - using (BinaryWriter binWriter = new BinaryWriter(File.Open(_pathToTOBJ, FileMode.Create))) - { + internal static void WritePreviewTOBJ(string _pathToTOBJ, string _pathToTGA) { + using (BinaryWriter binWriter = new BinaryWriter(File.Open(_pathToTOBJ, FileMode.Create))) { byte[] preview_tobj = new byte[] { 1, 10, 177, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 3, 2, 0, 2, 2, 2, 1, 0, 0, 0, 1, 0, 0 }; binWriter.Write(preview_tobj); diff --git a/TS SE Tool/CustomClasses/Utilities/Process_Utilities.cs b/TS SE Tool/CustomClasses/Utilities/Process_Utilities.cs new file mode 100644 index 00000000..7c3ff0e4 --- /dev/null +++ b/TS SE Tool/CustomClasses/Utilities/Process_Utilities.cs @@ -0,0 +1,33 @@ +/* + Copyright 2016-2022 LIPtoH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System.IO; +using System.Diagnostics; + +namespace TS_SE_Tool.Utilities { + class Process_Utilities { + public static Process StartProcess(FileInfo file, params string[] args) => StartProcess(file.FullName, file.DirectoryName, args); + public static Process StartProcess(string file, string workDir = null, params string[] args) { + ProcessStartInfo proc = new ProcessStartInfo(); + proc.FileName = file; + proc.Arguments = string.Join(" ", args); + if (workDir != null) { + proc.WorkingDirectory = workDir; + } + IO_Utilities.LogWriter($"Starting Process: {proc.FileName} {proc.Arguments}"); + return Process.Start(proc); + } + } +} diff --git a/TS SE Tool/CustomClasses/Utilities/TextUtilities.cs b/TS SE Tool/CustomClasses/Utilities/TextUtilities.cs index 54e9ef39..d9645d0f 100644 --- a/TS SE Tool/CustomClasses/Utilities/TextUtilities.cs +++ b/TS SE Tool/CustomClasses/Utilities/TextUtilities.cs @@ -15,85 +15,214 @@ limitations under the License. */ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace TS_SE_Tool.Utilities -{ - public class TextUtilities - { - public static string FromHexToString(string _input) - { - try - { + +namespace TS_SE_Tool.Utilities { + public static class TextExtensions { + public static List ParseVersions(this string input) { + var inputs = Regex.Split(input, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))"); + var versions = new List(); + foreach (var item in inputs) { + if (item.Contains("-")) { + var rangeParts = item.Split('-'); + if (rangeParts.Length == 2) { + if (Version.TryParse(rangeParts[0], out var startVersion) && Version.TryParse(rangeParts[1], out var endVersion)) { + for (var currentVersion = startVersion; currentVersion <= endVersion; currentVersion = new Version(currentVersion.Major, currentVersion.Minor + 1)) { + versions.Add(currentVersion); + } + } + } + } else { + if (Version.TryParse(item, out var singleVersion)) { + versions.Add(singleVersion); + } + } + } + return versions; + } + public static string Format(this string format, params object[] args) { + return string.Format(format.Remove("\\r").Replace("\\n", Environment.NewLine), args); + } + public static string TrimTrailingZeros(this string input) { + var parts = input.Split('.'); + for (int i = 0; i < parts.Length - 1; i++) { + parts[i] = parts[i].TrimEnd('0'); + if (parts[i] == "0") parts[i] = "1"; // Check if the part became "0" due to trimming // Keep at least one zero + } + return string.Join(".", parts); + } + #region Json + public class DirectoryInfoConverter : JsonConverter { + public override DirectoryInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { + return new DirectoryInfo(reader.GetString()); + } + public override void Write(Utf8JsonWriter writer, DirectoryInfo value, JsonSerializerOptions options) { + writer.WriteStringValue(value.FullName); + } + } + public class FileInfoConverter : JsonConverter { + public override FileInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { + return new FileInfo(reader.GetString()); + } + public override void Write(Utf8JsonWriter writer, FileInfo value, JsonSerializerOptions options) { + writer.WriteStringValue(value.FullName); + } + } + //public static JsonSerializerOptions JsonSerializerOptions = new() { } + /// + /// Serializes the given object to a JSON string with optional indentation. + /// + /// The object to serialize. + /// Indicates whether to apply indentation to the output JSON. + /// A JSON string representation of the object. + public static string ToJson(this object input, bool indent = false) { + //try { + var options = new JsonSerializerOptions() { + ReferenceHandler = ReferenceHandler.IgnoreCycles, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + //PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None, + WriteIndented = indent + }; + options.Converters.Add(new FileInfoConverter()); options.Converters.Add(new DirectoryInfoConverter()); + return JsonSerializer.Serialize(input, options); + //} catch (Exception ex) { + // IO_Utilities.ErrorLogWriter($"Error serializing object: {ex.Message}"); + // return input.ToString(); + //} + } + #endregion Json + + public static bool ToFile(this string text, string outputFile, bool overwrite = false) => ToFile(text, new FileInfo(outputFile), overwrite); + public static bool ToFile(this string text, FileInfo outputFile, bool overwrite = false) { + try { + if (outputFile.Exists && !overwrite) { + throw new IOException($"Not overwriting existing file: {outputFile.FullString()}"); + } + using (StreamWriter writer = new StreamWriter(outputFile.FullName)) { + writer.Write(text); + } + return true; + } catch (IOException ex) { + IO_Utilities.ErrorLogWriter(ex.Message); + return false; + } + } + + public static string Join(this IEnumerable inputs, string seperator = ", ") { + return string.Join(seperator, inputs.Select(i => i.ToString())); + } + /// + /// Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string. + /// + /// The string performing the replace method. + /// The string to be replaced. + /// The string replace all occurrances of oldValue. + /// Type of the comparison. + /// + public static string Replace(this string str, string oldValue, string @newValue, StringComparison comparisonType = StringComparison.CurrentCulture) { + @newValue = @newValue ?? string.Empty; + if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(oldValue) || oldValue.Equals(@newValue, comparisonType)) { + return str; + } + int foundAt; + while ((foundAt = str.IndexOf(oldValue, 0, comparisonType)) != -1) { + str = str.Remove(foundAt, oldValue.Length).Insert(foundAt, @newValue); + } + return str; + } + public static string Remove(this string _input, string text, StringComparison comparisonType = StringComparison.CurrentCulture) => _input.Replace(text, string.Empty, comparisonType); + public static string RemoveAll(this string _input, params string[] texts) { + foreach (var text in texts) { + _input = _input.Remove(text, StringComparison.OrdinalIgnoreCase); + } + return _input; + } + public static string ReplaceLastOccurrence(this string Source, string Find, string Replace) { + int place = Source.LastIndexOf(Find); + if (place == -1) { + return Source; + } + + string result = Source.Remove(place, Find.Length).Insert(place, Replace); + return result; + } + public static string Ext(this string text, string extension) { + return text + "." + extension; + } + public static string Quote(this string text) { + return SurroundWith(text, "\""); + } + public static string Enclose(this string text) { + return SurroundWith(text, "(", ")"); + } + public static string Brackets(this string text) { + return SurroundWith(text, "[", "]"); + } + public static string SurroundWith(this string text, string surrounds) { + return surrounds + text + surrounds; + } + public static string SurroundWith(this string text, string starts, string ends) { + return starts + text + ends; + } + } + + public class TextUtilities { + public static string FromHexToString(string _input) { + try { byte[] raw = new byte[_input.Length / 2]; - for (int i = 0; i < raw.Length; i++) - { + for (int i = 0; i < raw.Length; i++) { raw[i] = Convert.ToByte(_input.Substring(i * 2, 2), 16); } return Encoding.UTF8.GetString(raw); //UTF8 - } - catch - { + } catch { return null; } } - public static string FromUtfHexToString(string _input) - { - try - { + public static string FromUtfHexToString(string _input) { + try { string result = ""; - for (int i = 0; i < _input.Length; i++) - { - if (i < _input.Length - 2 && _input.Substring(i, 2) == "\\x") - { + for (int i = 0; i < _input.Length; i++) { + if (i < _input.Length - 2 && _input.Substring(i, 2) == "\\x") { string temp = ""; - nextHD: + nextHD: temp += _input.Substring(i + 2, 2); i = i + 4; if (i < _input.Length - 2 && _input.Substring(i, 2) == "\\x") goto nextHD; - else - { + else { result += FromHexToString(temp); i--; } - } - else - result += _input[i]; + } else + result += _input[i]; } return result; - } - catch - { + } catch { return null; } } - public static string FromStringToHex(string _input) - { - try - { + public static string FromStringToHex(string _input) { + try { return ByteArrayToString(Encoding.UTF8.GetBytes(_input.ToCharArray())); - } - catch - { + } catch { return null; } } - public static string FromStringToOutputString(string _input) - { - try - { + public static string FromStringToOutputString(string _input) { + try { if (_input == "" || _input == null) return "\"\""; //Empty @@ -103,107 +232,87 @@ public static string FromStringToOutputString(string _input) return _input; //Simple AlphaNumeric string else return "\"" + byteArrayString + "\""; //Else - } - catch - { + } catch { return null; } } - public static string FromOutputStringToString(string _input) - { - try - { + public static string FromOutputStringToString(string _input) { + try { string byteArrayString = StringToByteArrayStringFull(_input); if (!CheckStringAlphaNumeric(byteArrayString)) return _input.Substring(1, _input.Length - 2); else return _input; - } - catch - { + } catch { return null; } } - public static string ByteArrayToString(byte[] _ba) - { + public static string ByteArrayToString(byte[] _ba) { return BitConverter.ToString(_ba).Replace("-", ""); } - public static string StringToByteArrayStringFull(string _input) - { + public static string StringToByteArrayStringFull(string _input) { string output = ""; - foreach(char x in _input) - { + foreach (char x in _input) { byte[] testBytes = Encoding.UTF8.GetBytes(new char[] { x }); - if (testBytes.Length == 1) - { + if (testBytes.Length == 1) { output += x; - } - else - { - foreach (byte xByte in testBytes) - output += "\\x" + xByte.ToString("x"); + } else { + foreach (byte xByte in testBytes) + output += "\\x" + xByte.ToString("x"); } } return output; } - internal static string CapitalizeWord(string _input) - { + internal static string CapitalizeWord(string _input) { // Check for empty string. - if (string.IsNullOrEmpty(_input)) - { + if (string.IsNullOrEmpty(_input)) { return string.Empty; } // Return char and concat substring. return char.ToUpper(_input[0]) + _input.Substring(1).ToLower(); } - public static bool CheckStringAlphaNumeric(string _input) - { - foreach (char xChar in _input) - { - if(!char.IsLetterOrDigit(xChar) && !(xChar == '_')) + public static bool CheckStringAlphaNumeric(string _input) { + foreach (char xChar in _input) { + if (!char.IsLetterOrDigit(xChar) && !(xChar == '_')) return false; } return true; } - private bool checkStringContainsUnescape(string _input) - { + private bool checkStringContainsUnescape(string _input) { if (_input.Contains(' ') || _input != System.Text.RegularExpressions.Regex.Unescape(_input)) return true; else return false; } - internal static string CheckAndClearStringFromQuotes(string _input) - { + internal static string CheckAndClearStringFromQuotes(string _input) { string processingResult = ""; - if (_input.StartsWith("\"") && _input.EndsWith("\"")) - { + if (_input.StartsWith("\"") && _input.EndsWith("\"")) { string innerData = _input.Substring(1, _input.Length - 2);//.Remove(_input.Length - 1, 1).Remove(0, 1); if (innerData == "") return ""; processingResult = TextUtilities.FromUtfHexToString(innerData); - } + } return (processingResult == "") ? _input : processingResult; } private static readonly Regex regexDigit = new Regex(@"\d+"); - internal static bool ExtractFirstNumber(string _text, out int result) - { + internal static bool ExtractFirstNumber(string _text, out int result) { result = -1; var match = regexDigit.Match(_text); diff --git a/TS SE Tool/CustomClasses/Utilities/UI_Utilities.cs b/TS SE Tool/CustomClasses/Utilities/UI_Utilities.cs new file mode 100644 index 00000000..2f3e0d90 --- /dev/null +++ b/TS SE Tool/CustomClasses/Utilities/UI_Utilities.cs @@ -0,0 +1,36 @@ +/* + Copyright 2016-2022 LIPtoH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace TS_SE_Tool.Utilities { + + [AttributeUsage(AttributeTargets.Property)] + public class AutoSizeColumnMode : Attribute { + public DataGridViewAutoSizeColumnMode Mode { get; } + + public AutoSizeColumnMode(DataGridViewAutoSizeColumnMode mode) { + Mode = mode; + } + } +} diff --git a/TS SE Tool/DataManipulation.cs b/TS SE Tool/DataManipulation.cs index d98dcc8b..0ceb70d8 100644 --- a/TS SE Tool/DataManipulation.cs +++ b/TS SE Tool/DataManipulation.cs @@ -33,19 +33,15 @@ limitations under the License. using TS_SE_Tool.Utilities; using TS_SE_Tool.Save.Items; -namespace TS_SE_Tool -{ - public partial class FormMain : Form - { - private bool NewPrepareData() - { +namespace TS_SE_Tool { + public partial class FormMain : Form { + private bool NewPrepareData() { IO_Utilities.LogWriter("Prepare started"); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_preparing_data"); SiiNunitData = new SiiNunit(tempSavefileInMemory); - if (SiiNunitData == null) - { + if (SiiNunitData == null) { return false; } @@ -57,8 +53,7 @@ private bool NewPrepareData() return true; } - private void ExtraPrepareStuff() - { + private void ExtraPrepareStuff() { workerLoadSaveFile.ReportProgress(80); //namelessList.Sort(); @@ -74,8 +69,7 @@ private void ExtraPrepareStuff() //ExportnamelessList(); //Exclude company from city if no jobs assigned by game - foreach (City city in CitiesList) - { + foreach (City city in CitiesList) { city.ExcludeCompany(); if (VisitedCities.Exists(x => x.Name == city.CityName)) city.Visited = true; @@ -92,13 +86,11 @@ private void ExtraPrepareStuff() HeavyCargoList = HeavyCargoList.Distinct().ToList(); //Delete duplicates //Set country to city - foreach (City tempcity in CitiesList) - { + foreach (City tempcity in CitiesList) { string country = CountryDictionary.GetCountry(tempcity.CityName); tempcity.Country = country; - if ((country != null) && (country != "")) - { + if ((country != null) && (country != "")) { CountriesList.Add(country); } } @@ -108,8 +100,7 @@ private void ExtraPrepareStuff() CountryDictionary.SaveDictionaryFile(); //Save country-city list to file //Filter garages - foreach (City tempcity in from x in CitiesList where !x.Disabled select x) - { + foreach (City tempcity in from x in CitiesList where !x.Disabled select x) { Garages tmpgrg = GaragesList.Find(x => x.GarageName == tempcity.CityName); if (tmpgrg != null) tmpgrg.IgnoreStatus = false; @@ -132,14 +123,11 @@ private void ExtraPrepareStuff() workerLoadSaveFile.ReportProgress(100); } - private void CheckSaveInfoData() - { + private void CheckSaveInfoData() { MainSaveFileInfoData.ProcessData(tempInfoFileInMemory); - if (MainSaveFileInfoData.Version > 0) - { - if (MainSaveFileInfoData.Version > SupportedSavefileVersionETS2[1]) - { + if (MainSaveFileInfoData.Version > 0) { + if (MainSaveFileInfoData.Version > SelectedGame.SupportedSaveFileVersions[1]) { string dialogCaption = "", dialogText = ""; string[] returnValues = HelpTranslateDialog("UnsupportedVersion"); @@ -147,15 +135,13 @@ private void CheckSaveInfoData() DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, dialogText, returnValues[0], MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - if (DR == DialogResult.No) - { + if (DR == DialogResult.No) { InfoDepContinue = false; return; } } - if (MainSaveFileInfoData.Version < SupportedSavefileVersionETS2[0]) - { + if (MainSaveFileInfoData.Version < SelectedGame.SupportedSaveFileVersions[0]) { string dialogCaption = "", dialogText = ""; string[] returnValues = HelpTranslateDialog("NoBackwardCompatibility"); @@ -163,19 +149,15 @@ private void CheckSaveInfoData() DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, dialogText, returnValues[0], MessageBoxButtons.OK, MessageBoxIcon.Warning); - if (DR == DialogResult.OK) - { + if (DR == DialogResult.OK) { InfoDepContinue = false; return; } } - } - else if (MainSaveFileInfoData.Version == 0) - { + } else if (MainSaveFileInfoData.Version == 0) { DialogResult result = UpdateStatusBarMessage.ShowMessageBox(this, "Savefile version was not recognised." + Environment.NewLine + "Do you want to continue?", "Version not recognised", MessageBoxButtons.YesNo); - if (result == DialogResult.No) - { + if (result == DialogResult.No) { InfoDepContinue = false; return; } @@ -187,39 +169,31 @@ private void CheckSaveInfoData() GetDataFromDatabase("Dependencies"); //Check dependencies - if (DBDependencies.Count == 0) - { + if (DBDependencies.Count == 0) { InsertDataIntoDatabase("Dependencies"); InfoDepContinue = true; - } - else - { + } else { List tmpSFdep = MainSaveFileInfoData.Dependencies.Where(x => x.RawDepType != "rdlc").Select(x => x.Raw.Value).ToList(); List dbdep = DBDependencies.Except(tmpSFdep).ToList(); List sfdep = tmpSFdep.Except(DBDependencies).ToList(); - if (dbdep.Count > 0 || sfdep.Count > 0) - { + if (dbdep.Count > 0 || sfdep.Count > 0) { string dbdepstr = "", sfdepstr = ""; - if (dbdep.Count > 0) - { + if (dbdep.Count > 0) { dbdepstr += "\r\nDependencies only in Database (" + dbdep.Count.ToString() + ") will be Deleted:\r\n"; int i = 0; - foreach (string temp in dbdep) - { + foreach (string temp in dbdep) { i++; dbdepstr += i.ToString() + ") " + temp + "\r\n"; } } - if (sfdep.Count > 0) - { + if (sfdep.Count > 0) { sfdepstr += "\r\nDependencies only in Save file (" + sfdep.Count.ToString() + ") will be Added:\r\n"; int i = 0; - foreach (string temp in sfdep) - { + foreach (string temp in sfdep) { i++; sfdepstr += i.ToString() + ") " + temp + "\r\n"; ; } @@ -232,20 +206,15 @@ private void CheckSaveInfoData() dbdepstr + Environment.NewLine + sfdepstr, "Dependencies conflict", MessageBoxButtons.YesNo); - if (r == DialogResult.Yes) - { + if (r == DialogResult.Yes) { //Update Dependencies InsertDataIntoDatabase("Dependencies"); InfoDepContinue = true; - } - else - { + } else { //Stop opening save InfoDepContinue = false; } - } - else - { + } else { InfoDepContinue = true; } } @@ -256,8 +225,7 @@ private void CheckSaveInfoData() LoadCachedExternalCargoData("def"); if (MainSaveFileInfoData.Dependencies.Count > 0) - foreach (Dependency tDepend in MainSaveFileInfoData.Dependencies) - { + foreach (Dependency tDepend in MainSaveFileInfoData.Dependencies) { LoadCachedExternalCargoData(tDepend.DepLoadID); } @@ -265,63 +233,47 @@ private void CheckSaveInfoData() UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_save_version_not_detected"); } - public string GetCustomSaveFilename(string _tempSaveFilePath) - { + public string GetCustomSaveFilename(string _tempSaveFilePath) { string chunkOfline; string tempSiiInfoPath = _tempSaveFilePath + @"\info.sii"; string[] tempFile = null; - if (!File.Exists(tempSiiInfoPath)) - { + if (!File.Exists(tempSiiInfoPath)) { IO_Utilities.LogWriter("File does not exist in " + tempSiiInfoPath); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_find_file"); - } - else - { + } else { FileDecoded = false; - try - { + try { int decodeAttempt = 0; - while (decodeAttempt < 5) - { + while (decodeAttempt < 5) { tempFile = NewDecodeFile(tempSiiInfoPath, false); - if (FileDecoded) - { + if (FileDecoded) { break; } decodeAttempt++; } - if (decodeAttempt == 5) - { + if (decodeAttempt == 5) { IO_Utilities.LogWriter("Could not decrypt after 5 attempts"); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_decode_file"); } - } - catch - { + } catch { IO_Utilities.LogWriter("Could not read: " + tempSiiInfoPath); } - if ((tempFile == null) || (tempFile[0] != "SiiNunit")) - { + if ((tempFile == null) || (tempFile[0] != "SiiNunit")) { IO_Utilities.LogWriter("Wrongly decoded Info file or wrong file format"); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_file_not_decoded"); - } - else if (tempFile != null) - { - for (int line = 0; line < tempFile.Length; line++) - { - if (tempFile[line].StartsWith(" name:")) - { + } else if (tempFile != null) { + for (int line = 0; line < tempFile.Length; line++) { + if (tempFile[line].StartsWith(" name:")) { chunkOfline = tempFile[line]; string CustomName = chunkOfline.Split(new char[] { ' ' }, 3)[2]; - if (CustomName.StartsWith("\"")) - { + if (CustomName.StartsWith("\"")) { CustomName = CustomName.Substring(1, CustomName.Length - 2); } @@ -335,21 +287,17 @@ public string GetCustomSaveFilename(string _tempSaveFilePath) } //Remove broken color sets - private void PrepareUserColors() - { + private void PrepareUserColors() { if (MainSaveFileInfoData.Version < 49) return; int setcount = SiiNunitData.Economy.user_colors.Count() / 4; //iterate through sets - for (int i = 0; i < setcount; i++) - { - if (SiiNunitData.Economy.user_colors[4 * i].color.A == 0) - { + for (int i = 0; i < setcount; i++) { + if (SiiNunitData.Economy.user_colors[4 * i].color.A == 0) { //clear color set - for (int j = 1; j < 4; j++) - { + for (int j = 1; j < 4; j++) { SiiNunitData.Economy.user_colors[4 * i + j] = new Save.DataFormat.SCS_Color(0, 0, 0, 0); } continue; @@ -360,12 +308,10 @@ private void PrepareUserColors() } // - private void PrepareCitiesInitial() - { + private void PrepareCitiesInitial() { string[] chunks; - foreach (string company in SiiNunitData.Economy.companies) - { + foreach (string company in SiiNunitData.Economy.companies) { chunks = company.Split(new char[] { '.' }); string cityname = chunks[3], companyname = chunks[2]; @@ -374,16 +320,14 @@ private void PrepareCitiesInitial() continue; //Add City to List from companies list - if (CitiesList.Where(x => x.CityName == cityname).Count() == 0) - { + if (CitiesList.Where(x => x.CityName == cityname).Count() == 0) { CitiesList.Add(new City(cityname)); } CompaniesList.Add(companyname); //add company to list //Add Company to City from companies list - foreach (City tempcity in CitiesList.FindAll(x => x.CityName == cityname)) - { + foreach (City tempcity in CitiesList.FindAll(x => x.CityName == cityname)) { tempcity.AddCompany(companyname); Save.Items.Company tempcompany = (Save.Items.Company)SiiNunitData.SiiNitems[company]; @@ -395,10 +339,8 @@ private void PrepareCitiesInitial() } } - private void PrepareGaragesInitial() - { - foreach (string garage in SiiNunitData.Economy.garages) - { + private void PrepareGaragesInitial() { + foreach (string garage in SiiNunitData.Economy.garages) { string garageName = garage.Split(new char[] { '.' })[1]; Save.Items.Garage tmpSiiNGarage = SiiNunitData.SiiNitems[garage]; @@ -413,52 +355,43 @@ private void PrepareGaragesInitial() } } - private void PrepareVisitedCitiesInitial() - { + private void PrepareVisitedCitiesInitial() { int cityid = 0; - foreach (string city in SiiNunitData.Economy.visited_cities) - { + foreach (string city in SiiNunitData.Economy.visited_cities) { VisitedCities.Add(new VisitedCity(city, SiiNunitData.Economy.visited_cities_count[cityid], true)); cityid++; } } - private void PreparePlayerDictionariesInitial() - { - foreach (string trck in SiiNunitData.Player.trucks) - { + private void PreparePlayerDictionariesInitial() { + foreach (string trck in SiiNunitData.Player.trucks) { UserTruckDictionary.Add(trck, new UserCompanyTruckData()); UserTruckDictionary[trck].TruckMainData = SiiNunitData.SiiNitems[trck]; } // - foreach (string trlr in SiiNunitData.Player.trailers) - { + foreach (string trlr in SiiNunitData.Player.trailers) { UserTrailerDictionary.Add(trlr, new UserCompanyTrailerData()); UserTrailerDictionary[trlr].TrailerMainData = SiiNunitData.SiiNitems[trlr]; } // - foreach (string trlrDef in SiiNunitData.Player.trailer_defs) - { + foreach (string trlrDef in SiiNunitData.Player.trailer_defs) { UserTrailerDefDictionary.Add(trlrDef, SiiNunitData.SiiNitems[trlrDef]); } // - if (SiiNunitData.Player_Job != null) - { + if (SiiNunitData.Player_Job != null) { string jobtrck = SiiNunitData.Player_Job.company_truck; - if (jobtrck != "null") - { + if (jobtrck != "null") { UserTruckDictionary.Add(jobtrck, new UserCompanyTruckData()); UserTruckDictionary[jobtrck].TruckMainData = SiiNunitData.SiiNitems[jobtrck]; UserTruckDictionary[jobtrck].Users = false; } string jobtrlr = SiiNunitData.Player_Job.company_trailer; - if (jobtrlr != "null") - { + if (jobtrlr != "null") { UserTrailerDictionary.Add(jobtrlr, new UserCompanyTrailerData()); UserTrailerDictionary[jobtrlr].TrailerMainData = SiiNunitData.SiiNitems[jobtrlr]; UserTrailerDictionary[jobtrlr].Users = false; @@ -466,20 +399,16 @@ private void PreparePlayerDictionariesInitial() } // - for(int i = 0; i < SiiNunitData.Player.drivers.Count; i++) - { + for (int i = 0; i < SiiNunitData.Player.drivers.Count; i++) { UserCompanyDriverData DrData = new UserCompanyDriverData(); string drvr = SiiNunitData.Player.drivers[i]; - if (i == 0) - { + if (i == 0) { Save.Items.Player dr = (Save.Items.Player)SiiNunitData.Player; DrData.AssignedTruck = dr.assigned_truck; DrData.AssignedTrailer = dr.assigned_trailer; - } - else - { + } else { Save.Items.Driver_AI dr = (Save.Items.Driver_AI)SiiNunitData.SiiNitems[drvr]; DrData.AssignedTruck = dr.assigned_truck; @@ -490,51 +419,40 @@ private void PreparePlayerDictionariesInitial() } } - private void PrepareGPSInitial() - { + private void PrepareGPSInitial() { //GPS //Online - foreach (string entry in SiiNunitData.Economy.stored_online_gps_behind_waypoints) - { + foreach (string entry in SiiNunitData.Economy.stored_online_gps_behind_waypoints) { GPSbehindOnline.Add(entry, new List()); } - foreach (string entry in SiiNunitData.Economy.stored_online_gps_ahead_waypoints) - { + foreach (string entry in SiiNunitData.Economy.stored_online_gps_ahead_waypoints) { GPSaheadOnline.Add(entry, new List()); } //Offline //Normal - foreach (string entry in SiiNunitData.Economy.stored_gps_behind_waypoints) - { + foreach (string entry in SiiNunitData.Economy.stored_gps_behind_waypoints) { GPSbehind.Add(entry, new List()); } - foreach (string entry in SiiNunitData.Economy.stored_gps_ahead_waypoints) - { + foreach (string entry in SiiNunitData.Economy.stored_gps_ahead_waypoints) { GPSahead.Add(entry, new List()); } //Avoid - foreach (string entry in SiiNunitData.Economy.stored_gps_avoid_waypoints) - { + foreach (string entry in SiiNunitData.Economy.stored_gps_avoid_waypoints) { GPSAvoid.Add(entry, new List()); } } - private void PrepareVisitedCitiesWrite() - { - foreach (City city in CitiesList) - { + private void PrepareVisitedCitiesWrite() { + foreach (City city in CitiesList) { VisitedCity temp = VisitedCities.Find(x => x.Name == city.CityName); - if (temp != null) - { + if (temp != null) { if (!city.Visited) VisitedCities[VisitedCities.IndexOf(temp)].VisitCount = 0; - } - else - { + } else { if (city.Visited) VisitedCities.Add(new VisitedCity(city.CityName, 1, true)); else @@ -542,20 +460,14 @@ private void PrepareVisitedCitiesWrite() } } - foreach (VisitedCity vc in VisitedCities) - { - if (vc.Visited) - { - if (!SiiNunitData.Economy.visited_cities.Contains(vc.Name)) - { + foreach (VisitedCity vc in VisitedCities) { + if (vc.Visited) { + if (!SiiNunitData.Economy.visited_cities.Contains(vc.Name)) { SiiNunitData.Economy.visited_cities.Add(vc.Name); SiiNunitData.Economy.visited_cities_count.Add(vc.VisitCount); } - } - else - { - if (SiiNunitData.Economy.visited_cities.Contains(vc.Name)) - { + } else { + if (SiiNunitData.Economy.visited_cities.Contains(vc.Name)) { int idx = SiiNunitData.Economy.visited_cities.IndexOf(vc.Name); SiiNunitData.Economy.visited_cities.RemoveAt(idx); @@ -566,18 +478,15 @@ private void PrepareVisitedCitiesWrite() } - private void PrepareCargoTrailerDefsVariantsLists() - { - foreach (string company in SiiNunitData.Economy.companies) - { + private void PrepareCargoTrailerDefsVariantsLists() { + foreach (string company in SiiNunitData.Economy.companies) { Save.Items.Company tmpCompany = SiiNunitData.SiiNitems[company]; // int cargotype = 0, units_count = 0; string cargo = "", trailervariant = "", trailerdefinition = "", company_truck = ""; - foreach (string job_offer in tmpCompany.job_offer) - { + foreach (string job_offer in tmpCompany.job_offer) { Save.Items.Job_offer_Data tmpJob_offer_Data = SiiNunitData.SiiNitems[job_offer]; if (tmpJob_offer_Data.cargo == "null") @@ -598,12 +507,9 @@ private void PrepareCargoTrailerDefsVariantsLists() //=== - if (company_truck.Contains("\"heavy")) - { + if (company_truck.Contains("\"heavy")) { cargotype = 1; - } - else if (company_truck.Contains("\"double")) - { + } else if (company_truck.Contains("\"double")) { cargotype = 2; } @@ -621,38 +527,27 @@ private void PrepareCargoTrailerDefsVariantsLists() Cargo tempCargo = CargoesList.Find(x => x.CargoName == cargo); - if (tempCargo == null) - { + if (tempCargo == null) { CargoesList.Add(new Cargo(cargo, cargotype, trailerdefinition, units_count)); - } - else - { + } else { List tmpTDlist = tempCargo.TrailerDefList; - if (!tmpTDlist.Exists(x => x.DefName == trailerdefinition && x.CargoType == cargotype)) - { + if (!tmpTDlist.Exists(x => x.DefName == trailerdefinition && x.CargoType == cargotype)) { tmpTDlist.Add(new TrailerDefinition(trailerdefinition, cargotype, units_count)); - } - else - { + } else { TrailerDefinition tmpTDitem = tmpTDlist.Find(x => x.DefName == trailerdefinition && x.CargoType == cargotype); - if (!tmpTDitem.CargoLoadVariants.Exists(x => x.UnitsCount == units_count)) - { + if (!tmpTDitem.CargoLoadVariants.Exists(x => x.UnitsCount == units_count)) { tmpTDitem.CargoLoadVariants.Add(new CargoLoadVariants(units_count)); } } } - if (!TrailerDefinitionVariants.ContainsKey(trailerdefinition)) - { + if (!TrailerDefinitionVariants.ContainsKey(trailerdefinition)) { List tmp = new List { trailervariant }; TrailerDefinitionVariants.Add(trailerdefinition, tmp); - } - else - { - if (!TrailerDefinitionVariants[trailerdefinition].Contains(trailervariant)) - { + } else { + if (!TrailerDefinitionVariants[trailerdefinition].Contains(trailervariant)) { TrailerDefinitionVariants[trailerdefinition].Add(trailervariant); } } @@ -661,8 +556,7 @@ private void PrepareCargoTrailerDefsVariantsLists() } } - private void PrepareDBdata() - { + private void PrepareDBdata() { // Get Data From Database GetDataFromDatabase("CargoesTable"); @@ -674,7 +568,7 @@ private void PrepareDBdata() InsertDataIntoDatabase("CompaniesTable"); InsertDataIntoDatabase("TrucksTable"); InsertDataIntoDatabase("TrailerTables"); - + InsertDataIntoDatabase("CargoesTable"); InsertDataIntoDatabase("DistancesTable"); @@ -684,35 +578,28 @@ private void PrepareDBdata() } //Apply new garage size and Copy extra items to temp Lists - private void PrepareGarages() - { + private void PrepareGarages() { List extraTrailers = new List(); - foreach (Garages tempGarage in GaragesList) - { + foreach (Garages tempGarage in GaragesList) { int capacity = 0; - switch (tempGarage.GarageStatus) - { - case 2: - { + switch (tempGarage.GarageStatus) { + case 2: { capacity = 3; break; } - case 3: - { + case 3: { capacity = 5; break; } - case 6: - { + case 6: { capacity = 1; break; } } - if (capacity == 0) - { + if (capacity == 0) { //Move extraVehicles.AddRange(tempGarage.Vehicles); extraDrivers.AddRange(tempGarage.Drivers); @@ -722,21 +609,16 @@ private void PrepareGarages() tempGarage.Vehicles.Clear(); tempGarage.Drivers.Clear(); tempGarage.Trailers.Clear(); - } - else - { + } else { int cur = tempGarage.Vehicles.Count; - if (capacity < cur) - { + if (capacity < cur) { extraVehicles.AddRange(tempGarage.Vehicles.GetRange(capacity, cur - capacity)); extraDrivers.AddRange(tempGarage.Drivers.GetRange(capacity, cur - capacity)); tempGarage.Vehicles.RemoveRange(capacity, cur - capacity); tempGarage.Drivers.RemoveRange(capacity, cur - capacity); - } - else if (capacity > cur) - { + } else if (capacity > cur) { string rstr = null; tempGarage.Vehicles.AddRange(Enumerable.Repeat(rstr, capacity - cur)); tempGarage.Drivers.AddRange(Enumerable.Repeat(rstr, capacity - cur)); @@ -745,8 +627,7 @@ private void PrepareGarages() } //Move extra trailers to HQ garage - if (extraTrailers.Count > 0) - { + if (extraTrailers.Count > 0) { GaragesList[GaragesList.FindIndex(x => x.GarageName == SiiNunitData.Player.hq_city)].Trailers.AddRange(extraTrailers); extraTrailers.Clear(); } @@ -754,20 +635,16 @@ private void PrepareGarages() //Remove empty records from lists int iV = extraDrivers.Count(); - for (int i = iV - 1; i >= 0; i--) - { - if (extraVehicles[i] == extraDrivers[i]) - { + for (int i = iV - 1; i >= 0; i--) { + if (extraVehicles[i] == extraDrivers[i]) { extraVehicles.RemoveAt(i); extraDrivers.RemoveAt(i); } } //Unallocated Drivers - if (extraDrivers.Count() > 0) - { - if (extraDrivers.Contains(SiiNunitData.Player.drivers[0])) - { + if (extraDrivers.Count() > 0) { + if (extraDrivers.Contains(SiiNunitData.Player.drivers[0])) { Garages tmpG = new Garages(SiiNunitData.Player.hq_city); int hqIdx = GaragesList.IndexOf(tmpG); @@ -775,27 +652,20 @@ private void PrepareGarages() int DrvIdx, VhcIdx; - while (true) - { + while (true) { DrvIdx = GaragesList[hqIdx].Drivers.FindIndex(sIdx, x => x == null); VhcIdx = GaragesList[hqIdx].Vehicles.FindIndex(sIdx, x => x == null); - - if (DrvIdx > -1 && VhcIdx > -1) - { - if (DrvIdx == VhcIdx) - { + + if (DrvIdx > -1 && VhcIdx > -1) { + if (DrvIdx == VhcIdx) { break; - } - else - { + } else { if (DrvIdx > VhcIdx) sIdx = DrvIdx; else sIdx = VhcIdx; } - } - else - { + } else { DrvIdx = 0; break; } @@ -815,10 +685,8 @@ private void PrepareGarages() } } - private void PrepareGaragesWrite() - { - foreach (string grg in SiiNunitData.Economy.garages) - { + private void PrepareGaragesWrite() { + foreach (string grg in SiiNunitData.Economy.garages) { Save.Items.Garage siiGarage = SiiNunitData.SiiNitems[grg]; Garages prgrGarage = GaragesList.Find(x => x.GarageName == grg.Split(new char[] { '.' })[1]); @@ -829,14 +697,11 @@ private void PrepareGaragesWrite() } } - private void PrepareCompaniesJobWrite() - { - foreach (KeyValuePair> cmp in AddedJobsDictionary) - { + private void PrepareCompaniesJobWrite() { + foreach (KeyValuePair> cmp in AddedJobsDictionary) { Save.Items.Company siiCompany = SiiNunitData.SiiNitems[cmp.Key]; - for (int i = 0; i < cmp.Value.Count; i++) - { + for (int i = 0; i < cmp.Value.Count; i++) { JobAdded job = cmp.Value.ElementAt(i); string jobId = siiCompany.job_offer[i]; @@ -860,14 +725,11 @@ private void PrepareCompaniesJobWrite() } //Rearrange extra User Drivers to glogal Driver pool - private void PrepareDriversTrucksWrite() - { + private void PrepareDriversTrucksWrite() { extraDrivers.RemoveAll(x => x == null); - foreach (string tmp in extraDrivers) - { - if (tmp != null) - { + foreach (string tmp in extraDrivers) { + if (tmp != null) { int idx = 0; idx = SiiNunitData.Player.drivers.IndexOf(tmp); @@ -884,8 +746,7 @@ private void PrepareDriversTrucksWrite() extraVehicles.RemoveAll(x => x == null); - foreach (string tmp in extraVehicles) - { + foreach (string tmp in extraVehicles) { int idx = 0; idx = SiiNunitData.Player.trucks.IndexOf(tmp); @@ -899,19 +760,15 @@ private void PrepareDriversTrucksWrite() } //Check hired drivers - foreach (string grgNameless in SiiNunitData.Economy.garages) - { + foreach (string grgNameless in SiiNunitData.Economy.garages) { Save.Items.Garage grg = SiiNunitData.SiiNitems[grgNameless]; - foreach (string drvrNameless in grg.drivers) - { - if (drvrNameless != null && drvrNameless != SiiNunitData.Player.drivers[0]) - { + foreach (string drvrNameless in grg.drivers) { + if (drvrNameless != null && drvrNameless != SiiNunitData.Player.drivers[0]) { string grgName = grgNameless.Split('.')[1]; Driver_AI drvr = SiiNunitData.SiiNitems[drvrNameless]; - if (String.IsNullOrEmpty(drvr.hometown.Value)) - { + if (String.IsNullOrEmpty(drvr.hometown.Value)) { drvr.hometown = grgName; drvr.current_city = grgName; drvr.training_policy = 1; @@ -922,9 +779,7 @@ private void PrepareDriversTrucksWrite() SiiNunitData.Economy_event_Queue.data.Add(spareNameless); SiiNunitData.SiiNitems.Add(spareNameless, ecEvent); - } - else - { + } else { drvr.hometown = grgName; } } @@ -933,19 +788,15 @@ private void PrepareDriversTrucksWrite() } //Sort events by time - private void PrepareEvents() - { + private void PrepareEvents() { Dictionary timeList = new Dictionary(); - foreach (string ecEventLink in SiiNunitData.Economy_event_Queue.data) - { + foreach (string ecEventLink in SiiNunitData.Economy_event_Queue.data) { Economy_event ecEvent = ((Economy_event)SiiNunitData.SiiNitems[ecEventLink]); string cmpLink = ecEvent.unit_link; - if (AddedJobsDictionary.ContainsKey(cmpLink)) - { - if (ecEvent.param < AddedJobsDictionary[cmpLink].Count) - { + if (AddedJobsDictionary.ContainsKey(cmpLink)) { + if (ecEvent.param < AddedJobsDictionary[cmpLink].Count) { ecEvent.time = AddedJobsDictionary[cmpLink].ElementAt(ecEvent.param).ExpirationTime; } } @@ -960,21 +811,18 @@ private void PrepareEvents() newQueue.AddRange(sortedDict.Select(x => x.Key)); SiiNunitData.Economy_event_Queue.data = newQueue; - + } //Create DB - private void CreateDatabase(string fileName) - { + private void CreateDatabase(string fileName) { string connectionString; - if(!Directory.Exists("dbs")) - { + if (!Directory.Exists("dbs")) { Directory.CreateDirectory("dbs"); } - if (!File.Exists(fileName)) - { + if (!File.Exists(fileName)) { //Create UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "message_database_missing_creating_db"); @@ -987,16 +835,13 @@ private void CreateDatabase(string fileName) UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_database_created"); CreateDatabaseStructure(); - } - else - { + } else { //Update UpdateDatabaseVersion(); } } //Create DB structure - private void CreateDatabaseStructure() - { + private void CreateDatabaseStructure() { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "message_database_missing_creating_db_structure"); string sql = "", DBVersion = ""; @@ -1008,7 +853,7 @@ private void CreateDatabaseStructure() sql += "CREATE TABLE DatabaseDetails (ID_DBline INT IDENTITY(1,1) PRIMARY KEY, GameName NVARCHAR(8) NOT NULL, SaveVersion INT NOT NULL, ProfileName NVARCHAR(128) NOT NULL, " + "V1 numeric(4,0) NOT NULL, V2 numeric(4,0) NOT NULL, V3 numeric(4,0) NOT NULL, V4 numeric(4,0) NOT NULL, ReadableName NVARCHAR(30) NOT NULL);"; - sql += "INSERT INTO [DatabaseDetails] (GameName, SaveVersion, ProfileName, V1, V2, V3, V4, ReadableName) VALUES ('" + GameType + "', 0, '" + Globals.SelectedProfile + "','" + + sql += "INSERT INTO [DatabaseDetails] (GameName, SaveVersion, ProfileName, V1, V2, V3, V4, ReadableName) VALUES ('" + SelectedGame.Type + "', 0, '" + Globals.SelectedProfile + "','" + splitDBver[0] + "','" + splitDBver[1] + "','" + splitDBver[2] + "','" + splitDBver[3] + "','" + Utilities.TextUtilities.FromHexToString(Globals.SelectedProfile) + "');"; // sql += "CREATE TABLE Dependencies (ID_dep INT IDENTITY(1,1) PRIMARY KEY, Dependency NVARCHAR(256) NOT NULL);"; @@ -1073,12 +918,11 @@ private void CreateDatabaseStructure() // - UpdateDatabase( sql.Split(';') ); + UpdateDatabase(sql.Split(';')); } //Update DB version - private void UpdateDatabaseVersion() - { + private void UpdateDatabaseVersion() { string DBVersion = "", commandText = ""; string DBVersionNew = "", sql = ""; @@ -1093,105 +937,87 @@ private void UpdateDatabaseVersion() bool oldDBversion = false; - try - { + try { commandText = "SELECT column_name FROM Information_SCHEMA.columns WHERE table_name = 'DatabaseDetails' AND column_name = 'DBVersion';"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { if (reader[0].ToString() == "DBVersion") oldDBversion = true; } - } - catch { } + } catch { } - if (oldDBversion) - { - try - { + if (oldDBversion) { + try { commandText = "SELECT DBVersion FROM [DatabaseDetails];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); while (reader.Read()) DBVersion = reader["DBVersion"].ToString(); - } - catch { } - } - else - { - try - { + } catch { } + } else { + try { commandText = "SELECT V1, V2, V3, V4 FROM [DatabaseDetails];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); while (reader.Read()) DBVersion = reader["V1"].ToString() + "." + reader["V2"].ToString() + "." + reader["V3"].ToString() + "." + reader["V4"].ToString(); - } - catch { } + } catch { } } DBconnection.Close(); // - switch (DBVersion) - { - case "0.1.6": - { + switch (DBVersion) { + case "0.1.6": { goto label016; } - case "0.2.0": - { + case "0.2.0": { goto label020; } - case "0.2.6": - { + case "0.2.6": { goto label026; } - case "0.2.6.2": - { + case "0.2.6.2": { goto label0266; } - case "0.2.6.6": - { + case "0.2.6.6": { goto label0360; } - case "0.3.6.0": - { + case "0.3.6.0": { goto labelskip; } - default: - { + default: { return; } } - //0.1.6 - label016: + //0.1.6 + label016: sql = "ALTER TABLE [Dependencies] ALTER COLUMN Dependency NVARCHAR(256) NOT NULL;"; UpdateDatabase(sql); - // + // - //0.2.0 - label020: + //0.2.0 + label020: sql = "ALTER TABLE [DatabaseDetails] ALTER COLUMN ProfileName NVARCHAR(128) NOT NULL;"; UpdateDatabase(sql); sql = "UPDATE [DatabaseDetails] SET ProfileName = '" + Globals.SelectedProfile + "' " + "WHERE ID_DBline = 1;"; UpdateDatabase(sql); - // + // - //0.2.6 - label026: + //0.2.6 + label026: UpdateDatabase("DELETE FROM DatabaseDetails WHERE ID_DBline > 1;"); - // + // - //0.2.6.6 - label0266: + //0.2.6.6 + label0266: sql = "ALTER TABLE DatabaseDetails DROP COLUMN DBVersion;"; UpdateDatabase(sql); @@ -1209,10 +1035,10 @@ private void UpdateDatabaseVersion() sql += "ALTER TABLE [DatabaseDetails] ALTER COLUMN [ReadableName] NVARCHAR(30) NOT NULL;"; UpdateDatabase(sql.Split(';')); - // + // - //0.3.6.0 - label0360: + //0.3.6.0 + label0360: sql = ""; sql += "CREATE TABLE tempBulkCargoesToTrailerDefinitionTable (ID INT IDENTITY(1,1) PRIMARY KEY, CargoName NVARCHAR(32) NOT NULL, TrailerDefinitionName NVARCHAR(64) NOT NULL, CargoType INT NOT NULL);"; @@ -1220,7 +1046,7 @@ private void UpdateDatabaseVersion() sql += "CREATE TABLE tempBulkTrailerDefinitionVariants (ID_trailerDtV INT IDENTITY(1,1) PRIMARY KEY, TrailerDefinitionName NVARCHAR(64) NOT NULL, TrailerVariantName NVARCHAR(32) NOT NULL);"; sql += "CREATE TABLE tempTrailerDefinitionVariants (ID_trailerDtV INT IDENTITY(1,1) PRIMARY KEY, TrailerDefinitionID INT NOT NULL, TrailerVariantID INT NOT NULL);"; - + sql += "CREATE UNIQUE INDEX [Idx_Uniq] ON [CitysTable] ([CityName]);"; sql += "CREATE UNIQUE INDEX [Idx_Uniq] ON [CompaniesTable] ([CompanyName]);"; sql += "CREATE UNIQUE INDEX [Idx_Uniq] ON [CargoesTable] ([CargoName]);"; @@ -1233,63 +1059,47 @@ private void UpdateDatabaseVersion() sql = "UPDATE [DatabaseDetails] SET V1 = '" + splitDBver[0] + "', V2 = '" + splitDBver[1] + "', V3 = '" + splitDBver[2] + "', V4 = '" + splitDBver[3] + "' WHERE ID_DBline = 1;"; UpdateDatabase(sql); - //END - labelskip:; + //END + labelskip:; } //Help function for DB update - private void UpdateDatabase(string _sql_string) - { + private void UpdateDatabase(string _sql_string) { if (DBconnection.State == ConnectionState.Closed) DBconnection.Open(); - try - { + try { SqlCeCommand command = DBconnection.CreateCommand(); command.CommandText = _sql_string; command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_sql_exception"); MessageBox.Show(sqlexception.Message + "\r\n" + _sql_string, "SQL Exception. Update DB", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - catch (Exception ex) - { + } catch (Exception ex) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_exception"); MessageBox.Show(ex.Message, "Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - finally - { + } finally { DBconnection.Close(); } } - private void UpdateDatabase(string[] _sql_strings) - { + private void UpdateDatabase(string[] _sql_strings) { if (DBconnection.State == ConnectionState.Closed) DBconnection.Open(); SqlCeCommand cmd; - foreach (string sqlline in _sql_strings) - { - if (sqlline != "") - { + foreach (string sqlline in _sql_strings) { + if (sqlline != "") { cmd = new SqlCeCommand(sqlline, DBconnection); - try - { + try { cmd.ExecuteNonQuery(); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_database_created"); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_sql_exception"); MessageBox.Show(sqlexception.Message, "SQL Exception. Create DB", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - catch (Exception ex) - { + } catch (Exception ex) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_exception"); MessageBox.Show(ex.Message, "Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -1298,12 +1108,10 @@ private void UpdateDatabase(string[] _sql_strings) DBconnection.Close(); } - + //Load distances from database - private void GetAllDistancesFromDB() - { - try - { + private void GetAllDistancesFromDB() { + try { RouteList.ClearList(); //Clears existing list in program DBconnection.Open(); @@ -1318,23 +1126,18 @@ private void GetAllDistancesFromDB() SqlCeDataReader reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { RouteList.AddRoute(reader["SourceCityName"].ToString(), reader["SourceCompanyName"].ToString(), reader["DestinationCityName"].ToString(), reader["DestinationCompanyName"].ToString(), reader["Distance"].ToString(), reader["FerryTime"].ToString(), reader["FerryPrice"].ToString()); } DBconnection.Close(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_sql_exception"); MessageBox.Show(sqlexception.Message, "SQL Exception. Load all Distances", MessageBoxButtons.OK, MessageBoxIcon.Error); IO_Utilities.LogWriter("Getting Data went wrong"); - } - catch (Exception ex) - { + } catch (Exception ex) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_exception"); MessageBox.Show(ex.Message, "Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -1345,14 +1148,10 @@ private void GetAllDistancesFromDB() } //Upload to DB - private void InsertDataIntoDatabase(string _targetTable) - { - switch (_targetTable) - { - case "Dependencies": - { - if (MainSaveFileInfoData.Dependencies != null && MainSaveFileInfoData.Dependencies.Count() > 0) - { + private void InsertDataIntoDatabase(string _targetTable) { + switch (_targetTable) { + case "Dependencies": { + if (MainSaveFileInfoData.Dependencies != null && MainSaveFileInfoData.Dependencies.Count() > 0) { string SQLCommandCMD = ""; bool first = true; @@ -1360,26 +1159,20 @@ private void InsertDataIntoDatabase(string _targetTable) List uniqueDependencies = DBDependencies.Except(gameplayDependencies).ToList(); - if (uniqueDependencies != null && uniqueDependencies.Count() > 0) - { + if (uniqueDependencies != null && uniqueDependencies.Count() > 0) { SQLCommandCMD += "DELETE FROM [Dependencies] WHERE Dependency IN ("; - foreach (string tempitem in uniqueDependencies) - { - if (!first) - { + foreach (string tempitem in uniqueDependencies) { + if (!first) { SQLCommandCMD += " , "; - } - else - { + } else { first = false; } string sqlstr = tempitem; int apoIndex = 0; - while (true) - { + while (true) { apoIndex = sqlstr.IndexOf("'", apoIndex); if (apoIndex > -1) @@ -1399,27 +1192,21 @@ private void InsertDataIntoDatabase(string _targetTable) uniqueDependencies = gameplayDependencies.Except(DBDependencies).ToList(); - if (uniqueDependencies != null && uniqueDependencies.Count() > 0) - { + if (uniqueDependencies != null && uniqueDependencies.Count() > 0) { SQLCommandCMD = "INSERT INTO [Dependencies] (Dependency) "; first = true; - foreach (string tempitem in uniqueDependencies) - { - if (!first) - { + foreach (string tempitem in uniqueDependencies) { + if (!first) { SQLCommandCMD += " UNION ALL "; - } - else - { + } else { first = false; } string sqlstr = tempitem; int apoIndex = 0; - while (true) - { + while (true) { apoIndex = sqlstr.IndexOf("'", apoIndex); if (apoIndex > -1) @@ -1439,8 +1226,7 @@ private void InsertDataIntoDatabase(string _targetTable) break; } - case "TrailerTables": - { + case "TrailerTables": { string SQLCommandCMD = ""; bool first = true; @@ -1455,31 +1241,23 @@ private void InsertDataIntoDatabase(string _targetTable) List tmpLST = TrailerDefinitionVariants.Select(x => x.Key).ToList(); - if (TrailerDefinitionListDB.Count() > 0) - { + if (TrailerDefinitionListDB.Count() > 0) { TrailerDefinitionListDiff = tmpLST.Except(TrailerDefinitionListDB).ToList(); TrailerDefinitionListDB.AddRange(TrailerDefinitionListDiff); - } - else - { + } else { TrailerDefinitionListDB.AddRange(tmpLST); TrailerDefinitionListDiff = TrailerDefinitionListDB; } //--- - if (TrailerDefinitionListDiff != null && TrailerDefinitionListDiff.Count() > 0) - { + if (TrailerDefinitionListDiff != null && TrailerDefinitionListDiff.Count() > 0) { SQLCommandCMD = "INSERT INTO [TrailerDefinitionTable] (TrailerDefinitionName) "; first = true; - foreach (string tempDefVar in TrailerDefinitionListDiff) - { - if (!first) - { + foreach (string tempDefVar in TrailerDefinitionListDiff) { + if (!first) { SQLCommandCMD += " UNION ALL "; - } - else - { + } else { first = false; } @@ -1498,32 +1276,24 @@ private void InsertDataIntoDatabase(string _targetTable) List TrailerVariantsListDiff = new List(); - if (TrailerVariantsListDB.Count() > 0) - { + if (TrailerVariantsListDB.Count() > 0) { TrailerVariantsListDiff = TrailerVariants.Except(TrailerVariantsListDB).ToList(); TrailerVariantsListDB.AddRange(TrailerVariantsListDiff); - } - else - { + } else { TrailerVariantsListDB.AddRange(TrailerVariants); TrailerVariantsListDiff = TrailerVariantsListDB; } //--- - if (TrailerVariantsListDiff != null && TrailerVariantsListDiff.Count() > 0) - { + if (TrailerVariantsListDiff != null && TrailerVariantsListDiff.Count() > 0) { SQLCommandCMD = "INSERT INTO [TrailerVariantTable] (TrailerVariantName) "; first = true; - foreach (string tempVar in TrailerVariantsListDiff) - { - if (!first) - { + foreach (string tempVar in TrailerVariantsListDiff) { + if (!first) { SQLCommandCMD += " UNION ALL "; - } - else - { + } else { first = false; } @@ -1546,23 +1316,18 @@ private void InsertDataIntoDatabase(string _targetTable) GetDataFromDatabase("TrailerDefinitionVariants"); //=== Populate - foreach (KeyValuePair> tempDefVar in TrailerDefinitionVariants) - { + foreach (KeyValuePair> tempDefVar in TrailerDefinitionVariants) { string _definition = tempDefVar.Key; List newVariants = new List(); - if (TrailerDefinitionVariantsDB.ContainsKey(_definition)) - { + if (TrailerDefinitionVariantsDB.ContainsKey(_definition)) { newVariants = TrailerDefinitionVariants[_definition].Except(TrailerDefinitionVariantsDB[_definition]).ToList(); - } - else - { + } else { newVariants = TrailerDefinitionVariants[_definition]; } - if (newVariants.Count() > 0) - { + if (newVariants.Count() > 0) { for (int i = 0; i < newVariants.Count(); i++) tmpTable.Rows.Add(_definition, newVariants[i]); } @@ -1570,8 +1335,7 @@ private void InsertDataIntoDatabase(string _targetTable) //=== Bulk upload - using (SqlCeBulkCopy bc = new SqlCeBulkCopy(DBconnection)) - { + using (SqlCeBulkCopy bc = new SqlCeBulkCopy(DBconnection)) { bc.DestinationTableName = "tempBulkTrailerDefinitionVariants"; bc.WriteToServer(tmpTable); } @@ -1599,15 +1363,14 @@ private void InsertDataIntoDatabase(string _targetTable) //=== Clear tables UpdateDatabase("DELETE FROM [tempBulkTrailerDefinitionVariants]"); - UpdateDatabase("DELETE FROM [tempTrailerDefinitionVariants]"); + UpdateDatabase("DELETE FROM [tempTrailerDefinitionVariants]"); #endregion break; } - case "CargoesTable": - { + case "CargoesTable": { string updatecommandText = ""; bool first = true; @@ -1628,48 +1391,38 @@ private void InsertDataIntoDatabase(string _targetTable) List CargoesListDiff = new List(); - if (CargoesListDB.Count() > 0) - { + if (CargoesListDB.Count() > 0) { CargoComparer _cargoComparer = new CargoComparer(); - foreach(Cargo val in CargoesList.Except(CargoesListDB, _cargoComparer)) - { + foreach (Cargo val in CargoesList.Except(CargoesListDB, _cargoComparer)) { CargoDefVarDiffList.Add((Cargo)val.Clone()); } Predicate tempCargoPred = null; - foreach (Cargo tempCargo in CargoDefVarDiffList) - { + foreach (Cargo tempCargo in CargoDefVarDiffList) { tempCargoPred = x => x.CargoName == tempCargo.CargoName; int listDBindex = CargoesListDB.FindIndex(tempCargoPred); int listDIFFindex = CargoDefVarDiffList.FindIndex(tempCargoPred); - if (listDBindex != -1) - { + if (listDBindex != -1) { CargoesListDB[listDBindex].TrailerDefList.AddRange(tempCargo.TrailerDefList); CargoesListDB[listDBindex].TrailerDefList = CargoesListDB[listDBindex].TrailerDefList.Distinct().ToList(); CargoDefVarDiffList[listDIFFindex].TrailerDefList = CargoDefVarDiffList[listDIFFindex].TrailerDefList.Except(CargoesListDB[listDBindex].TrailerDefList).ToList(); - } - else - { + } else { CargoesListDB.Add(new Cargo(tempCargo.CargoName, tempCargo.TrailerDefList)); } } - } - else - { + } else { CargoesListDB = CargoesList; CargoDefVarDiffList = CargoesList; } - foreach (Cargo cargo in CargoDefVarDiffList) - { - if (cargo.TrailerDefList.Count != 0) - { + foreach (Cargo cargo in CargoDefVarDiffList) { + if (cargo.TrailerDefList.Count != 0) { tmpCargoList.Add(cargo); } } @@ -1679,14 +1432,12 @@ private void InsertDataIntoDatabase(string _targetTable) CargoesListDiff = CargoesList.Select(x => x.CargoName).ToList().Except(CargoesListDB.Select(x => x.CargoName)).ToList(); //=== CARGO - if (CargoesListDiff != null && CargoesListDiff.Count() > 0) - { + if (CargoesListDiff != null && CargoesListDiff.Count() > 0) { //=== Add Cargo to Database updatecommandText = "INSERT INTO [CargoesTable] (CargoName) "; first = true; - foreach (string cargoItem in CargoesListDiff) - { + foreach (string cargoItem in CargoesListDiff) { if (!first) updatecommandText += " UNION ALL "; else @@ -1699,18 +1450,15 @@ private void InsertDataIntoDatabase(string _targetTable) } - if (CargoDefVarDiffList != null && CargoDefVarDiffList.Count() > 0) - { - foreach (Cargo cargoItem in CargoDefVarDiffList) - { + if (CargoDefVarDiffList != null && CargoDefVarDiffList.Count() > 0) { + foreach (Cargo cargoItem in CargoDefVarDiffList) { // Bulk DataTable populate foreach (TrailerDefinition tempDefVar in cargoItem.TrailerDefList) BulkDatatabler.Rows.Add(cargoItem.CargoName, tempDefVar.DefName, tempDefVar.CargoType); } //=== Bulk Add - using (SqlCeBulkCopy bc = new SqlCeBulkCopy(DBconnection)) - { + using (SqlCeBulkCopy bc = new SqlCeBulkCopy(DBconnection)) { bc.DestinationTableName = "tempBulkCargoesToTrailerDefinitionTable"; bc.WriteToServer(BulkDatatabler); } @@ -1746,42 +1494,32 @@ private void InsertDataIntoDatabase(string _targetTable) break; } - case "CitysTable": - { + case "CitysTable": { List CitiesListDiff = new List(); - if (CitiesListDB.Count() > 0) - { - foreach (string tempCity in CitiesListDB) - { + if (CitiesListDB.Count() > 0) { + foreach (string tempCity in CitiesListDB) { if (CitiesList.Where(x => x.CityName == tempCity) == null) CitiesListDiff.Add(tempCity); } if (CitiesListDiff != null) CitiesListDB.AddRange(CitiesListDiff); - } - else - { + } else { CitiesListDB.AddRange(CitiesList.Select(x => x.CityName)); CitiesListDiff = CitiesListDB; } - if (CitiesListDiff != null && CitiesListDiff.Count() > 0) - { + if (CitiesListDiff != null && CitiesListDiff.Count() > 0) { string SQLCommandCMD = ""; SQLCommandCMD += "INSERT INTO [CitysTable] (CityName) "; bool first = true; - foreach (string tempcity in CitiesListDiff) - { - if (!first) - { + foreach (string tempcity in CitiesListDiff) { + if (!first) { SQLCommandCMD += " UNION ALL "; - } - else - { + } else { first = false; } @@ -1794,41 +1532,31 @@ private void InsertDataIntoDatabase(string _targetTable) break; } - case "CompaniesTable": - { + case "CompaniesTable": { List CompaniesListDiff = new List(); - if (CompaniesListDB.Count() > 0) - { - foreach (string tempCompany in CompaniesListDB) - { + if (CompaniesListDB.Count() > 0) { + foreach (string tempCompany in CompaniesListDB) { if (CompaniesList.Where(x => x == tempCompany) == null) CompaniesListDiff.Add(tempCompany); } CompaniesListDB.AddRange(CompaniesListDiff); - } - else - { + } else { CompaniesListDB = CompaniesList; CompaniesListDiff = CompaniesList; } - if (CompaniesListDiff != null && CompaniesListDiff.Count() > 0) - { + if (CompaniesListDiff != null && CompaniesListDiff.Count() > 0) { string SQLCommandCMD = ""; SQLCommandCMD += "INSERT INTO [CompaniesTable] (CompanyName) "; bool first = true; - foreach (string tempitem in CompaniesListDiff) - { - if (!first) - { + foreach (string tempitem in CompaniesListDiff) { + if (!first) { SQLCommandCMD += " UNION ALL "; - } - else - { + } else { first = false; } @@ -1840,37 +1568,28 @@ private void InsertDataIntoDatabase(string _targetTable) break; } - case "TrucksTable": - { + case "TrucksTable": { List CompanyTruckListDiff = new List(); - if (CompanyTruckListDB.Count() > 0) - { + if (CompanyTruckListDB.Count() > 0) { CompanyTruckListDiff = CompanyTruckList.Except(CompanyTruckListDB, new CompanyTruckComparer()).ToList(); CompanyTruckListDB.AddRange(CompanyTruckListDiff); - } - else - { + } else { CompanyTruckListDB = CompanyTruckList; CompanyTruckListDiff = CompanyTruckList; } - if (CompanyTruckListDiff != null && CompanyTruckListDiff.Count() > 0) - { + if (CompanyTruckListDiff != null && CompanyTruckListDiff.Count() > 0) { string SQLCommandCMD = ""; SQLCommandCMD += "INSERT INTO [TrucksTable] (TruckName, TruckType) "; bool first = true; - foreach (CompanyTruck tempitem in CompanyTruckListDiff) - { - if (!first) - { + foreach (CompanyTruck tempitem in CompanyTruckListDiff) { + if (!first) { SQLCommandCMD += " UNION ALL "; - } - else - { + } else { first = false; } @@ -1882,8 +1601,7 @@ private void InsertDataIntoDatabase(string _targetTable) break; } - case "DistancesTable": - { + case "DistancesTable": { //=== Create tmpTable DataTable tmpTable = new DataTable(); @@ -1897,10 +1615,8 @@ private void InsertDataIntoDatabase(string _targetTable) //=== Populate - foreach (string companyNameless in SiiNunitData.Economy.companies) - { - foreach (string jobofferNameless in ((Save.Items.Company)SiiNunitData.SiiNitems[companyNameless]).job_offer) - { + foreach (string companyNameless in SiiNunitData.Economy.companies) { + foreach (string jobofferNameless in ((Save.Items.Company)SiiNunitData.SiiNitems[companyNameless]).job_offer) { Save.Items.Job_offer_Data joData = ((Save.Items.Job_offer_Data)SiiNunitData.SiiNitems[jobofferNameless]); if (string.IsNullOrEmpty(joData.target.Value)) @@ -1918,8 +1634,7 @@ private void InsertDataIntoDatabase(string _targetTable) //=== Bulk upload - using (SqlCeBulkCopy bc = new SqlCeBulkCopy(DBconnection)) - { + using (SqlCeBulkCopy bc = new SqlCeBulkCopy(DBconnection)) { bc.DestinationTableName = "tempBulkDistancesTable"; bc.WriteToServer(tmpTable); } @@ -1944,8 +1659,7 @@ private void InsertDataIntoDatabase(string _targetTable) int rowsUpdate = 0; - while (sqlreader.Read()) - { + while (sqlreader.Read()) { string updatecommandText = "UPDATE [DistancesTable] SET Distance = '" + sqlreader["Distance"].ToString() + "', " + "FerryTime = '" + sqlreader["FerryTime"].ToString() + "', " + "FerryPrice = '" + sqlreader["FerryPrice"].ToString() + "' " + @@ -1956,19 +1670,15 @@ private void InsertDataIntoDatabase(string _targetTable) int _rowsupdated = -1; - try - { + try { SqlCeCommand command = DBconnection.CreateCommand(); command.CommandText = updatecommandText; _rowsupdated = command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } - if (_rowsupdated == 0) - { + if (_rowsupdated == 0) { updatecommandText = "INSERT INTO [DistancesTable] (SourceCityID, SourceCompanyID, DestinationCityID, DestinationCompanyID, Distance, FerryTime, FerryPrice) " + "VALUES('" + sqlreader["SourceCityID"].ToString() + "', '" + @@ -1999,29 +1709,24 @@ private void InsertDataIntoDatabase(string _targetTable) } //Load from DB - private void GetDataFromDatabase(string _targetTable) - { + private void GetDataFromDatabase(string _targetTable) { SqlCeDataReader reader = null; - try - { + try { if (DBconnection.State == ConnectionState.Closed) DBconnection.Open(); int totalrecord = 0; - switch (_targetTable) - { - case "Dependencies": - { + switch (_targetTable) { + case "Dependencies": { DBDependencies.Clear(); string commandText = "SELECT Dependency FROM [Dependencies];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { DBDependencies.Add(reader["Dependency"].ToString()); } @@ -2030,43 +1735,34 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "CargoesTable": - { + case "CargoesTable": { CargoesListDB.Clear(); - + string commandText = "SELECT ID_cargo, CargoName FROM [CargoesTable];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { List tempDefVars = new List(); commandText = "SELECT TrailerDefinitionID, CargoType FROM [CargoesToTrailerDefinitionTable] WHERE CargoID = '" + reader["ID_cargo"].ToString() + "';"; - try - { + try { SqlCeDataReader reader2 = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); Dictionary tempVar = new Dictionary(); - while (reader2.Read()) - { + while (reader2.Read()) { commandText = "SELECT TrailerDefinitionName FROM [TrailerDefinitionTable] WHERE ID_trailerD = '" + reader2["TrailerDefinitionID"].ToString() + "';"; - + SqlCeDataReader reader3 = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader3.Read()) - { + while (reader3.Read()) { tempDefVars.Add(new TrailerDefinition(reader3["TrailerDefinitionName"].ToString(), int.Parse(reader2["CargoType"].ToString()), "1")); } } - } - catch (SqlCeException ex) - { + } catch (SqlCeException ex) { string avsd = ex.Message; - } - catch (Exception ex) - { + } catch (Exception ex) { string avsd = ex.Message; } @@ -2078,16 +1774,14 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "CitysTable": - { + case "CitysTable": { CitiesListDB.Clear(); string commandText = "SELECT CityName FROM [CitysTable];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { CitiesListDB.Add(reader["CityName"].ToString()); } @@ -2096,16 +1790,14 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "CompaniesTable": - { + case "CompaniesTable": { CompaniesListDB.Clear(); string commandText = "SELECT CompanyName FROM [CompaniesTable];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { CompaniesListDB.Add(reader["CompanyName"].ToString()); } @@ -2114,16 +1806,14 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "TrucksTable": - { + case "TrucksTable": { CompanyTruckListDB.Clear(); string commandText = "SELECT TruckName, TruckType FROM [TrucksTable];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { CompanyTruckListDB.Add(new CompanyTruck(reader["TruckName"].ToString(), int.Parse(reader["TruckType"].ToString()))); } @@ -2132,16 +1822,14 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "TrailerDefinition": - { + case "TrailerDefinition": { TrailerDefinitionListDB.Clear(); string commandText = "SELECT TrailerDefinitionName FROM [TrailerDefinitionTable];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { TrailerDefinitionListDB.Add(reader["TrailerDefinitionName"].ToString()); } @@ -2150,16 +1838,14 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "TrailerVariants": - { + case "TrailerVariants": { TrailerVariantsListDB.Clear(); string commandText = "SELECT TrailerVariantName FROM [TrailerVariantTable];"; reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { TrailerVariantsListDB.Add(reader["TrailerVariantName"].ToString()); } @@ -2168,8 +1854,7 @@ private void GetDataFromDatabase(string _targetTable) break; } - case "TrailerDefinitionVariants": - { + case "TrailerDefinitionVariants": { TrailerDefinitionVariantsDB.Clear(); string commandText = "SELECT TrailerDefinitionTable.TrailerDefinitionName, TrailerVariantTable.TrailerVariantName " + @@ -2179,12 +1864,10 @@ private void GetDataFromDatabase(string _targetTable) reader = new SqlCeCommand(commandText, DBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { string DefinitionName = reader["TrailerDefinitionName"].ToString(); - if (!TrailerDefinitionVariantsDB.ContainsKey(DefinitionName)) - { + if (!TrailerDefinitionVariantsDB.ContainsKey(DefinitionName)) { TrailerDefinitionVariantsDB.Add(DefinitionName, new List()); } @@ -2198,13 +1881,9 @@ private void GetDataFromDatabase(string _targetTable) } IO_Utilities.LogWriter("Loaded " + totalrecord + " entries from " + _targetTable + " table."); - } - catch - { + } catch { IO_Utilities.LogWriter("Missing " + DBconnection.DataSource + " file"); - } - finally - { + } finally { if (reader != null) reader.Close(); @@ -2215,8 +1894,7 @@ private void GetDataFromDatabase(string _targetTable) //External Data - private void ExtDataCreateDatabase(string _dbname) - { + private void ExtDataCreateDatabase(string _dbname) { string connectionString; string fileName = _dbname; @@ -2225,13 +1903,11 @@ private void ExtDataCreateDatabase(string _dbname) string first = _dbname.Substring(0, index); string second = _dbname.Substring(index + 1); - if (!Directory.Exists(first)) - { + if (!Directory.Exists(first)) { Directory.CreateDirectory(first); } - if (File.Exists(fileName)) - { + if (File.Exists(fileName)) { File.Delete(fileName); } @@ -2243,16 +1919,14 @@ private void ExtDataCreateDatabase(string _dbname) ExtDataCreateDatabaseStructure(fileName); } - private void ExtDataCreateDatabaseStructure(string _fileName) - { + private void ExtDataCreateDatabaseStructure(string _fileName) { SqlCeConnection tDBconnection; tDBconnection = new SqlCeConnection("Data Source = " + _fileName + ";"); - if (tDBconnection.State == ConnectionState.Closed) - { + if (tDBconnection.State == ConnectionState.Closed) { tDBconnection.Open(); } - + SqlCeCommand cmd; string sql = ""; @@ -2279,24 +1953,17 @@ private void ExtDataCreateDatabaseStructure(string _fileName) string[] linesArray = sql.Split(';'); - foreach (string sqlline in linesArray) - { - if (sqlline != "") - { + foreach (string sqlline in linesArray) { + if (sqlline != "") { cmd = new SqlCeCommand(sqlline, tDBconnection); - try - { + try { cmd.ExecuteNonQuery(); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_database_created"); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_sql_exception"); MessageBox.Show(sqlexception.Message, "SQL Exception. Ext Data", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - catch (Exception ex) - { + } catch (Exception ex) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_exception"); MessageBox.Show(ex.Message, "Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -2306,20 +1973,16 @@ private void ExtDataCreateDatabaseStructure(string _fileName) tDBconnection.Close(); } - private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, object _data) - { - switch (_targetTable) - { - case "CargoesTable": - { + private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, object _data) { + switch (_targetTable) { + case "CargoesTable": { List extCargolist = _data as List; SqlCeConnection tDBconnection; string _fileName = _dbname;//Directory.GetCurrentDirectory() + @"\gameref\ETS\cache\" + _dbname + ".sdf"; tDBconnection = new SqlCeConnection("Data Source = " + _fileName + ";"); - if (tDBconnection.State == ConnectionState.Closed) - { + if (tDBconnection.State == ConnectionState.Closed) { tDBconnection.Open(); } @@ -2328,35 +1991,29 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, List tempBodyTypes = new List(); - foreach (ExtCargo tempcargo in extCargolist) - { + foreach (ExtCargo tempcargo in extCargolist) { tempBodyTypes.AddRange(tempcargo.BodyTypes); } tempBodyTypes = tempBodyTypes.Distinct().ToList(); - foreach (string tempBody in tempBodyTypes) - { + foreach (string tempBody in tempBodyTypes) { updatecommandText = "INSERT INTO [BodyTypesTable] (BodyTypeName) " + "VALUES('" + tempBody + "');"; //SqlCeCommand command = DBconnection.CreateCommand(); - try - { + try { command.CommandText = updatecommandText; command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } int CargoID = 1; - foreach (ExtCargo tempcargo in extCargolist) - { + foreach (ExtCargo tempcargo in extCargolist) { byte valuable = 0, overweight = 0; if (tempcargo.Valuable) valuable = 1; @@ -2375,19 +2032,15 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, overweight + ");"; //SqlCeCommand command = DBconnection.CreateCommand(); - try - { + try { command.CommandText = updatecommandText; //command.Connection.Open(); command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } - foreach (string body_types in tempcargo.BodyTypes) - { + foreach (string body_types in tempcargo.BodyTypes) { updatecommandText = "SELECT ID_bodytype FROM [BodyTypesTable] WHERE BodyTypeName = '" + body_types + "' "; command.CommandText = updatecommandText; @@ -2396,8 +2049,7 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, int BodyTypeID = -1; - while (readerDef.Read()) - { + while (readerDef.Read()) { BodyTypeID = int.Parse(readerDef["ID_bodytype"].ToString()); } //command.Connection.Close(); @@ -2407,14 +2059,11 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, CargoID + ", " + BodyTypeID + ");"; - try - { + try { command.CommandText = updatecommandText; //command.Connection.Open(); command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -2427,16 +2076,14 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, break; } - case "CompaniesTable": - { + case "CompaniesTable": { List extCompanylist = _data as List; SqlCeConnection tDBconnection; string _fileName = _dbname;//Directory.GetCurrentDirectory() + @"\gameref\ETS\cache\" + _dbname + ".sdf"; tDBconnection = new SqlCeConnection("Data Source = " + _fileName + ";"); - if (tDBconnection.State == ConnectionState.Closed) - { + if (tDBconnection.State == ConnectionState.Closed) { tDBconnection.Open(); } @@ -2446,8 +2093,7 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, List tempCompanies = new List(); - foreach (ExtCompany tempCompany in extCompanylist) - { + foreach (ExtCompany tempCompany in extCompanylist) { tempCompanies.AddRange(tempCompany.inCargo); tempCompanies.AddRange(tempCompany.outCargo); } @@ -2459,36 +2105,28 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, command.CommandText = updatecommandText; command.Parameters.Add("@inputText", SqlDbType.NVarChar); - foreach (string tempCompany in tempCompanies) - { + foreach (string tempCompany in tempCompanies) { //updatecommandText += "VALUES('" + tempCompany + "') "; - try - { + try { command.Parameters[0].Value = tempCompany; command.ExecuteNonQuery(); //command.CommandText = updatecommandText; //command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - foreach (ExtCompany tempCompany in extCompanylist) - { + foreach (ExtCompany tempCompany in extCompanylist) { updatecommandText = "INSERT INTO [CompaniesTable] (CompanyName) " + "VALUES('" + tempCompany.CompanyName + "');"; //SqlCeCommand command = DBconnection.CreateCommand(); - try - { + try { command.CommandText = updatecommandText; command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -2500,89 +2138,70 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, int CompanyID = -1; - while (readerDef.Read()) - { + while (readerDef.Read()) { CompanyID = int.Parse(readerDef["ID_company"].ToString()); } - foreach (string tempcargo in tempCompany.inCargo) - { + foreach (string tempcargo in tempCompany.inCargo) { updatecommandText = "SELECT ID_cargo FROM [AllCargoesTable] WHERE CargoName = '" + tempcargo + "' "; command.CommandText = updatecommandText; //command.Connection.Open(); int CargoID = -1; - try - { + try { SqlCeDataReader readerCargo = command.ExecuteReader(); - while (readerCargo.Read()) - { + while (readerCargo.Read()) { CargoID = int.Parse(readerCargo["ID_cargo"].ToString()); } - if (CargoID != -1) - { + if (CargoID != -1) { updatecommandText = "INSERT INTO [CompaniesCargoesInTable] (CompanyID, CargoID) " + "VALUES(" + CompanyID + ", " + CargoID + ");"; - try - { + try { command.CommandText = updatecommandText; //command.Connection.Open(); command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - foreach (string tempcargo in tempCompany.outCargo) - { + foreach (string tempcargo in tempCompany.outCargo) { updatecommandText = "SELECT ID_cargo FROM [AllCargoesTable] WHERE CargoName = '" + tempcargo + "' "; command.CommandText = updatecommandText; //command.Connection.Open(); int CargoID = -1; - try - { + try { SqlCeDataReader readerCargo = command.ExecuteReader(); - while (readerCargo.Read()) - { + while (readerCargo.Read()) { CargoID = int.Parse(readerCargo["ID_cargo"].ToString()); } - if (CargoID != -1) - { + if (CargoID != -1) { updatecommandText = "INSERT INTO [CompaniesCargoesOutTable] (CompanyID, CargoID) " + "VALUES(" + CompanyID + ", " + CargoID + ");"; - try - { + try { command.CommandText = updatecommandText; //command.Connection.Open(); command.ExecuteNonQuery(); - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - } - catch (SqlCeException sqlexception) - { + } catch (SqlCeException sqlexception) { MessageBox.Show(sqlexception.Message + " | " + sqlexception.ErrorCode, "SQL Exception.", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -2598,22 +2217,19 @@ private void ExtDataInsertDataIntoDatabase(string _dbname, string _targetTable, } } - private void LoadCachedExternalCargoData(string _dbname) - { + private void LoadCachedExternalCargoData(string _dbname) { SqlCeDataReader reader = null, reader2 = null; - try - { + try { SqlCeConnection tDBconnection; - string _fileName = Directory.GetCurrentDirectory() + @"\gameref\cache\" + GameType + "\\" + _dbname + ".sdf"; + string _fileName = Directory.GetCurrentDirectory() + @"\gameref\cache\" + SelectedGame.Type + "\\" + _dbname + ".sdf"; if (!File.Exists(_fileName)) return; tDBconnection = new SqlCeConnection("Data Source = " + _fileName + ";"); - if (tDBconnection.State == ConnectionState.Closed) - { + if (tDBconnection.State == ConnectionState.Closed) { tDBconnection.Open(); } @@ -2621,8 +2237,7 @@ private void LoadCachedExternalCargoData(string _dbname) reader = new SqlCeCommand(commandText, tDBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { ExtCargo tempExtCargo = new ExtCargo(reader["CargoName"].ToString()); tempExtCargo.Fragility = decimal.Parse(reader["Fragility"].ToString()); @@ -2647,8 +2262,7 @@ private void LoadCachedExternalCargoData(string _dbname) reader2 = new SqlCeCommand(commandText, tDBconnection).ExecuteReader(); - while (reader2.Read()) - { + while (reader2.Read()) { tempExtCargo.BodyTypes.Add(reader2["BodyTypeName"].ToString()); } @@ -2659,42 +2273,34 @@ private void LoadCachedExternalCargoData(string _dbname) reader = new SqlCeCommand(commandText, tDBconnection).ExecuteReader(); - while (reader.Read()) - { + while (reader.Read()) { int compindex = ExternalCompanies.FindIndex(x => x.CompanyName == reader["CompanyName"].ToString()); - if (compindex == -1) - { + if (compindex == -1) { ExtCompany tempExtCompany = new ExtCompany(reader["CompanyName"].ToString()); commandText = "SELECT AllCargoesTable.CargoName FROM [CompaniesCargoesOutTable] INNER JOIN [AllCargoesTable] ON AllCargoesTable.ID_cargo = CompaniesCargoesOutTable.CargoID WHERE CompaniesCargoesOutTable.CompanyID = '" + reader["ID_company"].ToString() + "';"; reader2 = new SqlCeCommand(commandText, tDBconnection).ExecuteReader(); - while (reader2.Read()) - { + while (reader2.Read()) { tempExtCompany.outCargo.Add(reader2["CargoName"].ToString()); } ExternalCompanies.Add(tempExtCompany); - } - else - { + } else { commandText = "SELECT AllCargoesTable.CargoName FROM [CompaniesCargoesOutTable] INNER JOIN [AllCargoesTable] ON AllCargoesTable.ID_cargo = CompaniesCargoesOutTable.CargoID WHERE CompaniesCargoesOutTable.CompanyID = '" + reader["ID_company"].ToString() + "';"; reader2 = new SqlCeCommand(commandText, tDBconnection).ExecuteReader(); - while (reader2.Read()) - { + while (reader2.Read()) { ExternalCompanies[compindex].outCargo.Add(reader2["CargoName"].ToString()); } } } tDBconnection.Close(); - } - catch - { } + } catch { } } } } diff --git a/TS SE Tool/FormMain.Designer.cs b/TS SE Tool/FormMain.Designer.cs index 08d46ef5..bff5c638 100644 --- a/TS SE Tool/FormMain.Designer.cs +++ b/TS SE Tool/FormMain.Designer.cs @@ -1,7 +1,5 @@ -namespace TS_SE_Tool -{ - partial class FormMain - { +namespace TS_SE_Tool { + partial class FormMain { /// /// Required designer variable. /// @@ -11,10 +9,8 @@ partial class FormMain /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); @@ -26,8 +22,7 @@ protected override void Dispose(bool disposing) /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// - private void InitializeComponent() - { + private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.menuStripMain = new System.Windows.Forms.MenuStrip(); this.toolStripMenuItemProgram = new System.Windows.Forms.ToolStripMenuItem(); @@ -49,6 +44,8 @@ private void InitializeComponent() this.checkSCSForumToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.checkTMPForumToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.checkGitHubRelesesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.comboBoxProfiles = new System.Windows.Forms.ComboBox(); this.buttonProfilesAndSavesRefreshAll = new System.Windows.Forms.Button(); this.comboBoxSaves = new System.Windows.Forms.ComboBox(); @@ -107,6 +104,8 @@ private void InitializeComponent() this.tableLayoutPanelCompanyBottomDataDriversControls = new System.Windows.Forms.TableLayoutPanel(); this.buttonUserCompanyDriversHire = new System.Windows.Forms.Button(); this.buttonUserCompanyDriversFire = new System.Windows.Forms.Button(); + this.buttonUserCompanyDriversSelectAll = new System.Windows.Forms.Button(); + this.buttonUserCompanyDriversUnSelectAll = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); this.labelUserCompanyDriversTotal = new System.Windows.Forms.Label(); this.labelUserCompanyDriversDivider = new System.Windows.Forms.Label(); @@ -220,6 +219,10 @@ private void InitializeComponent() this.buttonConvoyToolsGPSStoredGPSPathPaste = new System.Windows.Forms.Button(); this.buttonConvoyToolsGPSTruckPositionMultySavePaste = new System.Windows.Forms.Button(); this.buttonConvoyToolsGPSTruckPositionMultySaveCopy = new System.Windows.Forms.Button(); + this.tabMods = new System.Windows.Forms.TabPage(); + this.tableMods = new System.Windows.Forms.DataGridView(); + this.modId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.modName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.contextMenuStripMain = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStripFreightMarketJobListEdit = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStripFreightMarketJobListSeparator = new System.Windows.Forms.ToolStripSeparator(); @@ -250,8 +253,10 @@ private void InitializeComponent() this.radioButtonMainGameSwitchATS = new System.Windows.Forms.RadioButton(); this.tableLayoutPanel11 = new System.Windows.Forms.TableLayoutPanel(); this.buttonMainCloseSave = new System.Windows.Forms.Button(); - this.buttonUserCompanyDriversSelectAll = new System.Windows.Forms.Button(); - this.buttonUserCompanyDriversUnSelectAll = new System.Windows.Forms.Button(); + this.contextMenuStripMods = new System.Windows.Forms.ContextMenuStrip(this.components); + this.profileModsRemove = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.profileModsDebug = new System.Windows.Forms.ToolStripMenuItem(); this.menuStripMain.SuspendLayout(); this.tabControlMain.SuspendLayout(); this.tabPageProfile.SuspendLayout(); @@ -298,6 +303,8 @@ private void InitializeComponent() this.tabPageCargoMarket.SuspendLayout(); this.tabPageConvoyTools.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); + this.tabMods.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tableMods)).BeginInit(); this.contextMenuStripMain.SuspendLayout(); this.statusStripMain.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBoxProfileAvatar)).BeginInit(); @@ -306,6 +313,7 @@ private void InitializeComponent() this.tableLayoutPanel16.SuspendLayout(); this.tableLayoutPanel10.SuspendLayout(); this.tableLayoutPanel11.SuspendLayout(); + this.contextMenuStripMods.SuspendLayout(); this.SuspendLayout(); // // menuStripMain @@ -313,10 +321,12 @@ private void InitializeComponent() this.menuStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItemProgram, this.toolStripMenuItemLanguage, - this.toolStripMenuItemHelp}); + this.toolStripMenuItemHelp, + this.modsToolStripMenuItem, + this.gameToolStripMenuItem}); this.menuStripMain.Location = new System.Drawing.Point(0, 0); this.menuStripMain.Name = "menuStripMain"; - this.menuStripMain.Size = new System.Drawing.Size(834, 24); + this.menuStripMain.Size = new System.Drawing.Size(834, 25); this.menuStripMain.TabIndex = 0; this.menuStripMain.Text = "menuStripMain"; // @@ -328,39 +338,39 @@ private void InitializeComponent() this.toolStripSeparator1, this.toolStripMenuItemExit}); this.toolStripMenuItemProgram.Name = "toolStripMenuItemProgram"; - this.toolStripMenuItemProgram.Size = new System.Drawing.Size(65, 20); + this.toolStripMenuItemProgram.Size = new System.Drawing.Size(64, 21); this.toolStripMenuItemProgram.Text = "Program"; // // toolStripMenuItemProgramSettings // this.toolStripMenuItemProgramSettings.Name = "toolStripMenuItemProgramSettings"; - this.toolStripMenuItemProgramSettings.Size = new System.Drawing.Size(164, 22); + this.toolStripMenuItemProgramSettings.Size = new System.Drawing.Size(170, 22); this.toolStripMenuItemProgramSettings.Text = "Program settings"; this.toolStripMenuItemProgramSettings.Click += new System.EventHandler(this.programSettingsToolStripMenuItem_Click); // // toolStripMenuItemSettings // this.toolStripMenuItemSettings.Name = "toolStripMenuItemSettings"; - this.toolStripMenuItemSettings.Size = new System.Drawing.Size(164, 22); + this.toolStripMenuItemSettings.Size = new System.Drawing.Size(170, 22); this.toolStripMenuItemSettings.Text = "Settings"; this.toolStripMenuItemSettings.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(161, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(167, 6); // // toolStripMenuItemExit // this.toolStripMenuItemExit.Name = "toolStripMenuItemExit"; - this.toolStripMenuItemExit.Size = new System.Drawing.Size(164, 22); + this.toolStripMenuItemExit.Size = new System.Drawing.Size(170, 22); this.toolStripMenuItemExit.Text = "Exit"; this.toolStripMenuItemExit.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // // toolStripMenuItemLanguage // this.toolStripMenuItemLanguage.Name = "toolStripMenuItemLanguage"; - this.toolStripMenuItemLanguage.Size = new System.Drawing.Size(71, 20); + this.toolStripMenuItemLanguage.Size = new System.Drawing.Size(69, 21); this.toolStripMenuItemLanguage.Text = "Language"; // // toolStripMenuItemHelp @@ -372,20 +382,20 @@ private void InitializeComponent() this.toolStripSeparator4, this.toolStripMenuItemDownload}); this.toolStripMenuItemHelp.Name = "toolStripMenuItemHelp"; - this.toolStripMenuItemHelp.Size = new System.Drawing.Size(44, 20); + this.toolStripMenuItemHelp.Size = new System.Drawing.Size(45, 21); this.toolStripMenuItemHelp.Text = "Help"; // // toolStripMenuItemAbout // this.toolStripMenuItemAbout.Name = "toolStripMenuItemAbout"; - this.toolStripMenuItemAbout.Size = new System.Drawing.Size(128, 22); + this.toolStripMenuItemAbout.Size = new System.Drawing.Size(127, 22); this.toolStripMenuItemAbout.Text = "About"; this.toolStripMenuItemAbout.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(125, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(124, 6); // // toolStripMenuItemTutorial // @@ -393,27 +403,27 @@ private void InitializeComponent() this.toolStripMenuItemLocalPDF, this.toolStripMenuItemYouTubeVideo}); this.toolStripMenuItemTutorial.Name = "toolStripMenuItemTutorial"; - this.toolStripMenuItemTutorial.Size = new System.Drawing.Size(128, 22); + this.toolStripMenuItemTutorial.Size = new System.Drawing.Size(127, 22); this.toolStripMenuItemTutorial.Text = "How To"; // // toolStripMenuItemLocalPDF // this.toolStripMenuItemLocalPDF.Name = "toolStripMenuItemLocalPDF"; - this.toolStripMenuItemLocalPDF.Size = new System.Drawing.Size(152, 22); + this.toolStripMenuItemLocalPDF.Size = new System.Drawing.Size(154, 22); this.toolStripMenuItemLocalPDF.Text = "Local PDF"; this.toolStripMenuItemLocalPDF.Click += new System.EventHandler(this.localPDFToolStripMenuItem_Click); // // toolStripMenuItemYouTubeVideo // this.toolStripMenuItemYouTubeVideo.Name = "toolStripMenuItemYouTubeVideo"; - this.toolStripMenuItemYouTubeVideo.Size = new System.Drawing.Size(152, 22); + this.toolStripMenuItemYouTubeVideo.Size = new System.Drawing.Size(154, 22); this.toolStripMenuItemYouTubeVideo.Text = "YouTube video"; this.toolStripMenuItemYouTubeVideo.Click += new System.EventHandler(this.youTubeVideoToolStripMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(125, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(124, 6); // // toolStripMenuItemDownload // @@ -424,42 +434,56 @@ private void InitializeComponent() this.checkTMPForumToolStripMenuItem, this.checkGitHubRelesesToolStripMenuItem}); this.toolStripMenuItemDownload.Name = "toolStripMenuItemDownload"; - this.toolStripMenuItemDownload.Size = new System.Drawing.Size(128, 22); + this.toolStripMenuItemDownload.Size = new System.Drawing.Size(127, 22); this.toolStripMenuItemDownload.Text = "Download"; // // toolStripMenuItemCheckUpdates // this.toolStripMenuItemCheckUpdates.Name = "toolStripMenuItemCheckUpdates"; - this.toolStripMenuItemCheckUpdates.Size = new System.Drawing.Size(195, 22); + this.toolStripMenuItemCheckUpdates.Size = new System.Drawing.Size(201, 22); this.toolStripMenuItemCheckUpdates.Text = "Check updates"; this.toolStripMenuItemCheckUpdates.Click += new System.EventHandler(this.latestStableToolStripMenuItem_Click); // // toolStripSeparator5 // this.toolStripSeparator5.Name = "toolStripSeparator5"; - this.toolStripSeparator5.Size = new System.Drawing.Size(192, 6); + this.toolStripSeparator5.Size = new System.Drawing.Size(198, 6); // // checkSCSForumToolStripMenuItem // this.checkSCSForumToolStripMenuItem.Name = "checkSCSForumToolStripMenuItem"; - this.checkSCSForumToolStripMenuItem.Size = new System.Drawing.Size(195, 22); + this.checkSCSForumToolStripMenuItem.Size = new System.Drawing.Size(201, 22); this.checkSCSForumToolStripMenuItem.Text = "Check SCS Forum"; this.checkSCSForumToolStripMenuItem.Click += new System.EventHandler(this.checkSCSForumToolStripMenuItem_Click); // // checkTMPForumToolStripMenuItem // this.checkTMPForumToolStripMenuItem.Name = "checkTMPForumToolStripMenuItem"; - this.checkTMPForumToolStripMenuItem.Size = new System.Drawing.Size(195, 22); + this.checkTMPForumToolStripMenuItem.Size = new System.Drawing.Size(201, 22); this.checkTMPForumToolStripMenuItem.Text = "Check TMP Forum"; this.checkTMPForumToolStripMenuItem.Click += new System.EventHandler(this.checkTMPForumToolStripMenuItem_Click); // // checkGitHubRelesesToolStripMenuItem // this.checkGitHubRelesesToolStripMenuItem.Name = "checkGitHubRelesesToolStripMenuItem"; - this.checkGitHubRelesesToolStripMenuItem.Size = new System.Drawing.Size(195, 22); + this.checkGitHubRelesesToolStripMenuItem.Size = new System.Drawing.Size(201, 22); this.checkGitHubRelesesToolStripMenuItem.Text = "Check GitHub Releases"; this.checkGitHubRelesesToolStripMenuItem.Click += new System.EventHandler(this.checkGitHubRelesesToolStripMenuItem_Click); // + // modsToolStripMenuItem + // + this.modsToolStripMenuItem.Name = "modsToolStripMenuItem"; + this.modsToolStripMenuItem.Size = new System.Drawing.Size(48, 21); + this.modsToolStripMenuItem.Text = "Mods"; + this.modsToolStripMenuItem.Click += new System.EventHandler(this.modsToolStripMenuItem_Click); + // + // gameToolStripMenuItem + // + this.gameToolStripMenuItem.Name = "gameToolStripMenuItem"; + this.gameToolStripMenuItem.Size = new System.Drawing.Size(58, 21); + this.gameToolStripMenuItem.Text = "Plugins"; + this.gameToolStripMenuItem.Click += new System.EventHandler(this.gameToolStripMenuItem_Click); + // // comboBoxProfiles // this.comboBoxProfiles.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -516,13 +540,15 @@ private void InitializeComponent() this.tabControlMain.Controls.Add(this.tabPageFreightMarket); this.tabControlMain.Controls.Add(this.tabPageCargoMarket); this.tabControlMain.Controls.Add(this.tabPageConvoyTools); + this.tabControlMain.Controls.Add(this.tabMods); this.tabControlMain.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControlMain.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.tabControlMain.ItemSize = new System.Drawing.Size(82, 24); this.tabControlMain.Location = new System.Drawing.Point(3, 3); + this.tabControlMain.Multiline = true; this.tabControlMain.Name = "tabControlMain"; this.tabControlMain.SelectedIndex = 0; - this.tabControlMain.Size = new System.Drawing.Size(578, 569); + this.tabControlMain.Size = new System.Drawing.Size(578, 568); this.tabControlMain.TabIndex = 6; // // tabPageProfile @@ -533,7 +559,7 @@ private void InitializeComponent() this.tabPageProfile.Location = new System.Drawing.Point(4, 28); this.tabPageProfile.Name = "tabPageProfile"; this.tabPageProfile.Padding = new System.Windows.Forms.Padding(3); - this.tabPageProfile.Size = new System.Drawing.Size(570, 537); + this.tabPageProfile.Size = new System.Drawing.Size(570, 536); this.tabPageProfile.TabIndex = 0; this.tabPageProfile.Text = "Profile"; this.tabPageProfile.UseVisualStyleBackColor = true; @@ -756,7 +782,7 @@ private void InitializeComponent() this.tabPageCompany.Location = new System.Drawing.Point(4, 28); this.tabPageCompany.Name = "tabPageCompany"; this.tabPageCompany.Padding = new System.Windows.Forms.Padding(3); - this.tabPageCompany.Size = new System.Drawing.Size(570, 537); + this.tabPageCompany.Size = new System.Drawing.Size(570, 536); this.tabPageCompany.TabIndex = 5; this.tabPageCompany.Text = "Company"; this.tabPageCompany.UseVisualStyleBackColor = true; @@ -774,7 +800,7 @@ private void InitializeComponent() this.tableLayoutPanelCompanyMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 100F)); this.tableLayoutPanelCompanyMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanelCompanyMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanelCompanyMain.Size = new System.Drawing.Size(564, 531); + this.tableLayoutPanelCompanyMain.Size = new System.Drawing.Size(564, 530); this.tableLayoutPanelCompanyMain.TabIndex = 29; this.tableLayoutPanelCompanyMain.EnabledChanged += new System.EventHandler(this.tableLayoutPanel2_EnabledChanged); // @@ -820,7 +846,7 @@ private void InitializeComponent() // // labelUserCompanyCompanyName // - this.labelUserCompanyCompanyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyCompanyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.labelUserCompanyCompanyName.AutoSize = true; this.labelUserCompanyCompanyName.Location = new System.Drawing.Point(115, 0); @@ -832,7 +858,7 @@ private void InitializeComponent() // // labelUserCompanyMoneyAccount // - this.labelUserCompanyMoneyAccount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyMoneyAccount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.labelUserCompanyMoneyAccount.AutoSize = true; this.labelUserCompanyMoneyAccount.Location = new System.Drawing.Point(115, 33); @@ -844,7 +870,7 @@ private void InitializeComponent() // // labelUserCompanyHQcity // - this.labelUserCompanyHQcity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyHQcity.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.labelUserCompanyHQcity.AutoSize = true; this.labelUserCompanyHQcity.Location = new System.Drawing.Point(115, 66); @@ -876,8 +902,8 @@ private void InitializeComponent() // // labelCompanyNameSize // - this.labelCompanyNameSize.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.labelCompanyNameSize.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.labelCompanyNameSize.AutoSize = true; this.labelCompanyNameSize.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); @@ -909,7 +935,7 @@ private void InitializeComponent() this.tabControlCompanyBottomData.Location = new System.Drawing.Point(3, 103); this.tabControlCompanyBottomData.Name = "tabControlCompanyBottomData"; this.tabControlCompanyBottomData.SelectedIndex = 0; - this.tabControlCompanyBottomData.Size = new System.Drawing.Size(558, 425); + this.tabControlCompanyBottomData.Size = new System.Drawing.Size(558, 424); this.tabControlCompanyBottomData.TabIndex = 31; // // tabPageGarages @@ -918,7 +944,7 @@ private void InitializeComponent() this.tabPageGarages.Location = new System.Drawing.Point(4, 22); this.tabPageGarages.Name = "tabPageGarages"; this.tabPageGarages.Padding = new System.Windows.Forms.Padding(3); - this.tabPageGarages.Size = new System.Drawing.Size(550, 399); + this.tabPageGarages.Size = new System.Drawing.Size(550, 398); this.tabPageGarages.TabIndex = 0; this.tabPageGarages.Text = "Garages"; this.tabPageGarages.UseVisualStyleBackColor = true; @@ -938,7 +964,7 @@ private void InitializeComponent() this.tableLayoutPanelCompanyBottomDataGarages.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); this.tableLayoutPanelCompanyBottomDataGarages.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanelCompanyBottomDataGarages.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 72F)); - this.tableLayoutPanelCompanyBottomDataGarages.Size = new System.Drawing.Size(544, 393); + this.tableLayoutPanelCompanyBottomDataGarages.Size = new System.Drawing.Size(544, 392); this.tableLayoutPanelCompanyBottomDataGarages.TabIndex = 30; // // listBoxGarages @@ -951,7 +977,7 @@ private void InitializeComponent() this.listBoxGarages.Location = new System.Drawing.Point(3, 43); this.listBoxGarages.Name = "listBoxGarages"; this.listBoxGarages.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; - this.listBoxGarages.Size = new System.Drawing.Size(538, 275); + this.listBoxGarages.Size = new System.Drawing.Size(538, 274); this.listBoxGarages.TabIndex = 17; this.listBoxGarages.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBoxGarages_DrawItem); this.listBoxGarages.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.listBoxGarages_MeasureItem); @@ -972,7 +998,7 @@ private void InitializeComponent() this.tableLayoutPanel6.Controls.Add(this.buttonUserCompanyGaragesSelectAll, 4, 0); this.tableLayoutPanel6.Controls.Add(this.buttonUserCompanyGaragesUnSelectAll, 4, 1); this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel6.Location = new System.Drawing.Point(0, 321); + this.tableLayoutPanel6.Location = new System.Drawing.Point(0, 320); this.tableLayoutPanel6.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel6.Name = "tableLayoutPanel6"; this.tableLayoutPanel6.RowCount = 2; @@ -1076,7 +1102,7 @@ private void InitializeComponent() // // labelUserCompanyGaragesCurrent // - this.labelUserCompanyGaragesCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyGaragesCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.labelUserCompanyGaragesCurrent.Location = new System.Drawing.Point(460, 14); this.labelUserCompanyGaragesCurrent.Name = "labelUserCompanyGaragesCurrent"; @@ -1087,7 +1113,7 @@ private void InitializeComponent() // // labelUserCompanyGaragesDelimetry // - this.labelUserCompanyGaragesDelimetry.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyGaragesDelimetry.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.labelUserCompanyGaragesDelimetry.AutoSize = true; this.labelUserCompanyGaragesDelimetry.Location = new System.Drawing.Point(491, 14); @@ -1098,8 +1124,8 @@ private void InitializeComponent() // // labelUserCompanyGaragesTotal // - this.labelUserCompanyGaragesTotal.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.labelUserCompanyGaragesTotal.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.labelUserCompanyGaragesTotal.AutoSize = true; this.labelUserCompanyGaragesTotal.Location = new System.Drawing.Point(506, 14); @@ -1111,7 +1137,7 @@ private void InitializeComponent() // // labelUserCompanyGarages // - this.labelUserCompanyGarages.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyGarages.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.labelUserCompanyGarages.AutoSize = true; this.labelUserCompanyGarages.Location = new System.Drawing.Point(3, 14); @@ -1127,7 +1153,7 @@ private void InitializeComponent() this.tabPageDrivers.Location = new System.Drawing.Point(4, 22); this.tabPageDrivers.Name = "tabPageDrivers"; this.tabPageDrivers.Padding = new System.Windows.Forms.Padding(3); - this.tabPageDrivers.Size = new System.Drawing.Size(550, 399); + this.tabPageDrivers.Size = new System.Drawing.Size(550, 398); this.tabPageDrivers.TabIndex = 2; this.tabPageDrivers.Text = "Drivers"; this.tabPageDrivers.UseVisualStyleBackColor = true; @@ -1146,7 +1172,7 @@ private void InitializeComponent() this.tableLayoutPanelCompanyBottomDataDrivers.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); this.tableLayoutPanelCompanyBottomDataDrivers.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanelCompanyBottomDataDrivers.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 72F)); - this.tableLayoutPanelCompanyBottomDataDrivers.Size = new System.Drawing.Size(544, 393); + this.tableLayoutPanelCompanyBottomDataDrivers.Size = new System.Drawing.Size(544, 392); this.tableLayoutPanelCompanyBottomDataDrivers.TabIndex = 0; // // tableLayoutPanelCompanyBottomDataDriversControls @@ -1160,7 +1186,7 @@ private void InitializeComponent() this.tableLayoutPanelCompanyBottomDataDriversControls.Controls.Add(this.buttonUserCompanyDriversSelectAll, 2, 0); this.tableLayoutPanelCompanyBottomDataDriversControls.Controls.Add(this.buttonUserCompanyDriversUnSelectAll, 2, 1); this.tableLayoutPanelCompanyBottomDataDriversControls.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanelCompanyBottomDataDriversControls.Location = new System.Drawing.Point(0, 321); + this.tableLayoutPanelCompanyBottomDataDriversControls.Location = new System.Drawing.Point(0, 320); this.tableLayoutPanelCompanyBottomDataDriversControls.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanelCompanyBottomDataDriversControls.Name = "tableLayoutPanelCompanyBottomDataDriversControls"; this.tableLayoutPanelCompanyBottomDataDriversControls.RowCount = 2; @@ -1195,6 +1221,28 @@ private void InitializeComponent() this.buttonUserCompanyDriversFire.UseVisualStyleBackColor = true; this.buttonUserCompanyDriversFire.Click += new System.EventHandler(this.buttonUserCompanyDriversFire_Click); // + // buttonUserCompanyDriversSelectAll + // + this.buttonUserCompanyDriversSelectAll.Dock = System.Windows.Forms.DockStyle.Fill; + this.buttonUserCompanyDriversSelectAll.Location = new System.Drawing.Point(457, 3); + this.buttonUserCompanyDriversSelectAll.Name = "buttonUserCompanyDriversSelectAll"; + this.buttonUserCompanyDriversSelectAll.Size = new System.Drawing.Size(84, 30); + this.buttonUserCompanyDriversSelectAll.TabIndex = 28; + this.buttonUserCompanyDriversSelectAll.Text = "Select All"; + this.buttonUserCompanyDriversSelectAll.UseVisualStyleBackColor = true; + this.buttonUserCompanyDriversSelectAll.Click += new System.EventHandler(this.buttonUserCompanyDriversSelectAll_Click); + // + // buttonUserCompanyDriversUnSelectAll + // + this.buttonUserCompanyDriversUnSelectAll.Dock = System.Windows.Forms.DockStyle.Fill; + this.buttonUserCompanyDriversUnSelectAll.Location = new System.Drawing.Point(457, 39); + this.buttonUserCompanyDriversUnSelectAll.Name = "buttonUserCompanyDriversUnSelectAll"; + this.buttonUserCompanyDriversUnSelectAll.Size = new System.Drawing.Size(84, 30); + this.buttonUserCompanyDriversUnSelectAll.TabIndex = 29; + this.buttonUserCompanyDriversUnSelectAll.Text = "Unselect All"; + this.buttonUserCompanyDriversUnSelectAll.UseVisualStyleBackColor = true; + this.buttonUserCompanyDriversUnSelectAll.Click += new System.EventHandler(this.buttonUserCompanyDriversUnSelectAll_Click); + // // panel1 // this.panel1.Controls.Add(this.labelUserCompanyDriversTotal); @@ -1231,7 +1279,7 @@ private void InitializeComponent() // // labelUserCompanyDriversCurrent // - this.labelUserCompanyDriversCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyDriversCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.labelUserCompanyDriversCurrent.Location = new System.Drawing.Point(460, 14); this.labelUserCompanyDriversCurrent.Name = "labelUserCompanyDriversCurrent"; @@ -1258,7 +1306,7 @@ private void InitializeComponent() this.listBoxUserCompanyDrivers.Location = new System.Drawing.Point(3, 43); this.listBoxUserCompanyDrivers.Name = "listBoxUserCompanyDrivers"; this.listBoxUserCompanyDrivers.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; - this.listBoxUserCompanyDrivers.Size = new System.Drawing.Size(538, 275); + this.listBoxUserCompanyDrivers.Size = new System.Drawing.Size(538, 274); this.listBoxUserCompanyDrivers.TabIndex = 1; this.listBoxUserCompanyDrivers.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBoxUserCompanyDrivers_DrawItem); this.listBoxUserCompanyDrivers.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.listBoxUserCompanyDrivers_MeasureItem); @@ -1270,7 +1318,7 @@ private void InitializeComponent() this.tabPageVisitedCities.Location = new System.Drawing.Point(4, 22); this.tabPageVisitedCities.Name = "tabPageVisitedCities"; this.tabPageVisitedCities.Padding = new System.Windows.Forms.Padding(3); - this.tabPageVisitedCities.Size = new System.Drawing.Size(550, 399); + this.tabPageVisitedCities.Size = new System.Drawing.Size(550, 398); this.tabPageVisitedCities.TabIndex = 1; this.tabPageVisitedCities.Text = "VisitedCities"; this.tabPageVisitedCities.UseVisualStyleBackColor = true; @@ -1290,7 +1338,7 @@ private void InitializeComponent() this.tableLayoutPanelCompanyBottomDataVisitedCities.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); this.tableLayoutPanelCompanyBottomDataVisitedCities.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanelCompanyBottomDataVisitedCities.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 72F)); - this.tableLayoutPanelCompanyBottomDataVisitedCities.Size = new System.Drawing.Size(544, 393); + this.tableLayoutPanelCompanyBottomDataVisitedCities.Size = new System.Drawing.Size(544, 392); this.tableLayoutPanelCompanyBottomDataVisitedCities.TabIndex = 30; // // listBoxVisitedCities @@ -1303,7 +1351,7 @@ private void InitializeComponent() this.listBoxVisitedCities.Location = new System.Drawing.Point(3, 43); this.listBoxVisitedCities.Name = "listBoxVisitedCities"; this.listBoxVisitedCities.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; - this.listBoxVisitedCities.Size = new System.Drawing.Size(538, 275); + this.listBoxVisitedCities.Size = new System.Drawing.Size(538, 274); this.listBoxVisitedCities.TabIndex = 19; this.listBoxVisitedCities.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBoxVisitedCities_DrawItem); this.listBoxVisitedCities.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.listBoxVisitedCities_MeasureItem); @@ -1319,7 +1367,7 @@ private void InitializeComponent() this.tableLayoutPanel5.Controls.Add(this.buttonUserCompanyCitiesSelectAll, 2, 0); this.tableLayoutPanel5.Controls.Add(this.buttonUserCompanyCitiesUnSelectAll, 2, 1); this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 321); + this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 320); this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0); this.tableLayoutPanel5.Name = "tableLayoutPanel5"; this.tableLayoutPanel5.RowCount = 2; @@ -1412,7 +1460,7 @@ private void InitializeComponent() // // labelUserCompanyVisitedCitiesCurrent // - this.labelUserCompanyVisitedCitiesCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.labelUserCompanyVisitedCitiesCurrent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.labelUserCompanyVisitedCitiesCurrent.Location = new System.Drawing.Point(460, 14); this.labelUserCompanyVisitedCitiesCurrent.Name = "labelUserCompanyVisitedCitiesCurrent"; @@ -1437,7 +1485,7 @@ private void InitializeComponent() this.tabPageTruck.Location = new System.Drawing.Point(4, 28); this.tabPageTruck.Name = "tabPageTruck"; this.tabPageTruck.Padding = new System.Windows.Forms.Padding(3); - this.tabPageTruck.Size = new System.Drawing.Size(570, 537); + this.tabPageTruck.Size = new System.Drawing.Size(570, 536); this.tabPageTruck.TabIndex = 1; this.tabPageTruck.Text = "Truck"; this.tabPageTruck.UseVisualStyleBackColor = true; @@ -1456,7 +1504,7 @@ private void InitializeComponent() this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel9.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 110F)); - this.tableLayoutPanel9.Size = new System.Drawing.Size(564, 531); + this.tableLayoutPanel9.Size = new System.Drawing.Size(564, 530); this.tableLayoutPanel9.TabIndex = 28; // // groupBoxUserTruckTruck @@ -1546,7 +1594,7 @@ private void InitializeComponent() // this.groupBoxUserTruckShareTruckSettings.Controls.Add(this.tableLayoutPanel7); this.groupBoxUserTruckShareTruckSettings.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBoxUserTruckShareTruckSettings.Location = new System.Drawing.Point(1, 422); + this.groupBoxUserTruckShareTruckSettings.Location = new System.Drawing.Point(1, 421); this.groupBoxUserTruckShareTruckSettings.Margin = new System.Windows.Forms.Padding(1); this.groupBoxUserTruckShareTruckSettings.Name = "groupBoxUserTruckShareTruckSettings"; this.groupBoxUserTruckShareTruckSettings.Size = new System.Drawing.Size(562, 108); @@ -1650,7 +1698,7 @@ private void InitializeComponent() this.groupBoxUserTruckTruckDetails.Location = new System.Drawing.Point(1, 101); this.groupBoxUserTruckTruckDetails.Margin = new System.Windows.Forms.Padding(1); this.groupBoxUserTruckTruckDetails.Name = "groupBoxUserTruckTruckDetails"; - this.groupBoxUserTruckTruckDetails.Size = new System.Drawing.Size(562, 319); + this.groupBoxUserTruckTruckDetails.Size = new System.Drawing.Size(562, 318); this.groupBoxUserTruckTruckDetails.TabIndex = 25; this.groupBoxUserTruckTruckDetails.TabStop = false; this.groupBoxUserTruckTruckDetails.Text = "Details"; @@ -1676,7 +1724,7 @@ private void InitializeComponent() this.tableLayoutPanelTruckDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); this.tableLayoutPanelTruckDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); this.tableLayoutPanelTruckDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); - this.tableLayoutPanelTruckDetails.Size = new System.Drawing.Size(556, 300); + this.tableLayoutPanelTruckDetails.Size = new System.Drawing.Size(556, 299); this.tableLayoutPanelTruckDetails.TabIndex = 15; // // tableLayoutPanelTruckLP @@ -1695,7 +1743,7 @@ private void InitializeComponent() this.tableLayoutPanelTruckLP.Name = "tableLayoutPanelTruckLP"; this.tableLayoutPanelTruckLP.RowCount = 1; this.tableLayoutPanelTruckLP.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanelTruckLP.Size = new System.Drawing.Size(554, 33); + this.tableLayoutPanelTruckLP.Size = new System.Drawing.Size(554, 32); this.tableLayoutPanelTruckLP.TabIndex = 0; // // tableLayoutPanelTruckFuel @@ -1719,7 +1767,7 @@ private void InitializeComponent() this.tabPageTrailer.Location = new System.Drawing.Point(4, 28); this.tabPageTrailer.Name = "tabPageTrailer"; this.tabPageTrailer.Padding = new System.Windows.Forms.Padding(3); - this.tabPageTrailer.Size = new System.Drawing.Size(570, 537); + this.tabPageTrailer.Size = new System.Drawing.Size(570, 536); this.tabPageTrailer.TabIndex = 2; this.tabPageTrailer.Text = "Trailer"; this.tabPageTrailer.UseVisualStyleBackColor = true; @@ -1738,14 +1786,14 @@ private void InitializeComponent() this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel12.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 110F)); - this.tableLayoutPanel12.Size = new System.Drawing.Size(564, 531); + this.tableLayoutPanel12.Size = new System.Drawing.Size(564, 530); this.tableLayoutPanel12.TabIndex = 32; // // groupBoxUserTrailerShareTrailerSettings // this.groupBoxUserTrailerShareTrailerSettings.Controls.Add(this.tableLayoutPanel14); this.groupBoxUserTrailerShareTrailerSettings.Dock = System.Windows.Forms.DockStyle.Fill; - this.groupBoxUserTrailerShareTrailerSettings.Location = new System.Drawing.Point(1, 422); + this.groupBoxUserTrailerShareTrailerSettings.Location = new System.Drawing.Point(1, 421); this.groupBoxUserTrailerShareTrailerSettings.Margin = new System.Windows.Forms.Padding(1); this.groupBoxUserTrailerShareTrailerSettings.Name = "groupBoxUserTrailerShareTrailerSettings"; this.groupBoxUserTrailerShareTrailerSettings.Size = new System.Drawing.Size(562, 108); @@ -1929,7 +1977,7 @@ private void InitializeComponent() this.groupBoxUserTrailerTrailerDetails.Location = new System.Drawing.Point(1, 101); this.groupBoxUserTrailerTrailerDetails.Margin = new System.Windows.Forms.Padding(1); this.groupBoxUserTrailerTrailerDetails.Name = "groupBoxUserTrailerTrailerDetails"; - this.groupBoxUserTrailerTrailerDetails.Size = new System.Drawing.Size(562, 319); + this.groupBoxUserTrailerTrailerDetails.Size = new System.Drawing.Size(562, 318); this.groupBoxUserTrailerTrailerDetails.TabIndex = 30; this.groupBoxUserTrailerTrailerDetails.TabStop = false; this.groupBoxUserTrailerTrailerDetails.Text = "Details"; @@ -1954,7 +2002,7 @@ private void InitializeComponent() this.tableLayoutPanelTrailerDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); this.tableLayoutPanelTrailerDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F)); this.tableLayoutPanelTrailerDetails.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F)); - this.tableLayoutPanelTrailerDetails.Size = new System.Drawing.Size(556, 300); + this.tableLayoutPanelTrailerDetails.Size = new System.Drawing.Size(556, 299); this.tableLayoutPanelTrailerDetails.TabIndex = 16; // // tableLayoutPanelTrailerLP @@ -1973,7 +2021,7 @@ private void InitializeComponent() this.tableLayoutPanelTrailerLP.Name = "tableLayoutPanelTrailerLP"; this.tableLayoutPanelTrailerLP.RowCount = 1; this.tableLayoutPanelTrailerLP.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanelTrailerLP.Size = new System.Drawing.Size(554, 33); + this.tableLayoutPanelTrailerLP.Size = new System.Drawing.Size(554, 32); this.tableLayoutPanelTrailerLP.TabIndex = 0; // // tabPageFreightMarket @@ -2011,7 +2059,7 @@ private void InitializeComponent() this.tabPageFreightMarket.Location = new System.Drawing.Point(4, 28); this.tabPageFreightMarket.Name = "tabPageFreightMarket"; this.tabPageFreightMarket.Padding = new System.Windows.Forms.Padding(3); - this.tabPageFreightMarket.Size = new System.Drawing.Size(570, 537); + this.tabPageFreightMarket.Size = new System.Drawing.Size(570, 536); this.tabPageFreightMarket.TabIndex = 3; this.tabPageFreightMarket.Text = "FreightMarket"; this.tabPageFreightMarket.UseVisualStyleBackColor = true; @@ -2100,7 +2148,7 @@ private void InitializeComponent() // this.listBoxFreightMarketAddedJobs.Dock = System.Windows.Forms.DockStyle.Bottom; this.listBoxFreightMarketAddedJobs.FormattingEnabled = true; - this.listBoxFreightMarketAddedJobs.Location = new System.Drawing.Point(3, 270); + this.listBoxFreightMarketAddedJobs.Location = new System.Drawing.Point(3, 269); this.listBoxFreightMarketAddedJobs.Name = "listBoxFreightMarketAddedJobs"; this.listBoxFreightMarketAddedJobs.ScrollAlwaysVisible = true; this.listBoxFreightMarketAddedJobs.Size = new System.Drawing.Size(564, 264); @@ -2343,7 +2391,8 @@ private void InitializeComponent() this.tabPageCargoMarket.Controls.Add(this.comboBoxCargoMarketSourceCompany); this.tabPageCargoMarket.Location = new System.Drawing.Point(4, 28); this.tabPageCargoMarket.Name = "tabPageCargoMarket"; - this.tabPageCargoMarket.Size = new System.Drawing.Size(570, 537); + this.tabPageCargoMarket.Padding = new System.Windows.Forms.Padding(3); + this.tabPageCargoMarket.Size = new System.Drawing.Size(570, 536); this.tabPageCargoMarket.TabIndex = 6; this.tabPageCargoMarket.Text = "CargoMarket"; this.tabPageCargoMarket.UseVisualStyleBackColor = true; @@ -2361,7 +2410,7 @@ private void InitializeComponent() // labelCMTrailerType // this.labelCMTrailerType.AutoSize = true; - this.labelCMTrailerType.Location = new System.Drawing.Point(3, 265); + this.labelCMTrailerType.Location = new System.Drawing.Point(6, 268); this.labelCMTrailerType.Name = "labelCMTrailerType"; this.labelCMTrailerType.Size = new System.Drawing.Size(63, 13); this.labelCMTrailerType.TabIndex = 19; @@ -2436,7 +2485,7 @@ private void InitializeComponent() // labelCargoMarketSource // this.labelCargoMarketSource.AutoSize = true; - this.labelCargoMarketSource.Location = new System.Drawing.Point(3, 28); + this.labelCargoMarketSource.Location = new System.Drawing.Point(6, 31); this.labelCargoMarketSource.Name = "labelCargoMarketSource"; this.labelCargoMarketSource.Size = new System.Drawing.Size(41, 13); this.labelCargoMarketSource.TabIndex = 6; @@ -2445,7 +2494,7 @@ private void InitializeComponent() // labelCargoMarketCompany // this.labelCargoMarketCompany.AutoSize = true; - this.labelCargoMarketCompany.Location = new System.Drawing.Point(239, 6); + this.labelCargoMarketCompany.Location = new System.Drawing.Point(242, 9); this.labelCargoMarketCompany.Name = "labelCargoMarketCompany"; this.labelCargoMarketCompany.Size = new System.Drawing.Size(51, 13); this.labelCargoMarketCompany.TabIndex = 5; @@ -2463,7 +2512,7 @@ private void InitializeComponent() // labelCargoMarketCity // this.labelCargoMarketCity.AutoSize = true; - this.labelCargoMarketCity.Location = new System.Drawing.Point(72, 6); + this.labelCargoMarketCity.Location = new System.Drawing.Point(75, 9); this.labelCargoMarketCity.Name = "labelCargoMarketCity"; this.labelCargoMarketCity.Size = new System.Drawing.Size(24, 13); this.labelCargoMarketCity.TabIndex = 1; @@ -2485,7 +2534,7 @@ private void InitializeComponent() this.tabPageConvoyTools.Location = new System.Drawing.Point(4, 28); this.tabPageConvoyTools.Name = "tabPageConvoyTools"; this.tabPageConvoyTools.Padding = new System.Windows.Forms.Padding(3); - this.tabPageConvoyTools.Size = new System.Drawing.Size(570, 537); + this.tabPageConvoyTools.Size = new System.Drawing.Size(570, 536); this.tabPageConvoyTools.TabIndex = 4; this.tabPageConvoyTools.Text = "Convoy Control"; this.tabPageConvoyTools.UseVisualStyleBackColor = true; @@ -2587,6 +2636,51 @@ private void InitializeComponent() this.buttonConvoyToolsGPSTruckPositionMultySaveCopy.UseVisualStyleBackColor = true; this.buttonConvoyToolsGPSTruckPositionMultySaveCopy.Click += new System.EventHandler(this.buttonConvoyToolsGPSTruckPositionMultySaveCopy_Click); // + // tabMods + // + this.tabMods.Controls.Add(this.tableMods); + this.tabMods.Location = new System.Drawing.Point(4, 28); + this.tabMods.Name = "tabMods"; + this.tabMods.Padding = new System.Windows.Forms.Padding(3); + this.tabMods.Size = new System.Drawing.Size(570, 536); + this.tabMods.TabIndex = 7; + this.tabMods.Text = "Mods"; + this.tabMods.UseVisualStyleBackColor = true; + // + // tableMods + // + this.tableMods.AllowUserToAddRows = false; + this.tableMods.AllowUserToDeleteRows = false; + this.tableMods.AllowUserToOrderColumns = true; + this.tableMods.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.tableMods.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.tableMods.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.modId, + this.modName}); + this.tableMods.ContextMenuStrip = this.contextMenuStripMods; + this.tableMods.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableMods.Location = new System.Drawing.Point(3, 3); + this.tableMods.Name = "tableMods"; + this.tableMods.RowHeadersVisible = false; + this.tableMods.ShowCellErrors = false; + this.tableMods.ShowRowErrors = false; + this.tableMods.Size = new System.Drawing.Size(564, 530); + this.tableMods.TabIndex = 0; + this.tableMods.DragDrop += new System.Windows.Forms.DragEventHandler(this.tableMods_DragDrop); + this.tableMods.DragOver += new System.Windows.Forms.DragEventHandler(this.tableMods_DragOver); + this.tableMods.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tableMods_MouseDown); + this.tableMods.MouseMove += new System.Windows.Forms.MouseEventHandler(this.tableMods_MouseMove); + // + // modId + // + this.modId.HeaderText = "Id"; + this.modId.Name = "modId"; + // + // modName + // + this.modName.HeaderText = "Name"; + this.modName.Name = "modName"; + // // contextMenuStripMain // this.contextMenuStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -2598,50 +2692,50 @@ private void InitializeComponent() this.contextMenuStripCompanyDriversHire, this.contextMenuStripCompanyDriversFire}); this.contextMenuStripMain.Name = "contextMenuStripFreightMarketJobList"; - this.contextMenuStripMain.Size = new System.Drawing.Size(108, 126); + this.contextMenuStripMain.Size = new System.Drawing.Size(114, 126); // // contextMenuStripFreightMarketJobListEdit // this.contextMenuStripFreightMarketJobListEdit.Name = "contextMenuStripFreightMarketJobListEdit"; - this.contextMenuStripFreightMarketJobListEdit.Size = new System.Drawing.Size(107, 22); + this.contextMenuStripFreightMarketJobListEdit.Size = new System.Drawing.Size(113, 22); this.contextMenuStripFreightMarketJobListEdit.Text = "Edit"; this.contextMenuStripFreightMarketJobListEdit.Click += new System.EventHandler(this.contextMenuStripFreightMarketJobListEdit_Click); // // contextMenuStripFreightMarketJobListSeparator // this.contextMenuStripFreightMarketJobListSeparator.Name = "contextMenuStripFreightMarketJobListSeparator"; - this.contextMenuStripFreightMarketJobListSeparator.Size = new System.Drawing.Size(104, 6); + this.contextMenuStripFreightMarketJobListSeparator.Size = new System.Drawing.Size(110, 6); // // contextMenuStripFreightMarketJobListDelete // this.contextMenuStripFreightMarketJobListDelete.Name = "contextMenuStripFreightMarketJobListDelete"; - this.contextMenuStripFreightMarketJobListDelete.Size = new System.Drawing.Size(107, 22); + this.contextMenuStripFreightMarketJobListDelete.Size = new System.Drawing.Size(113, 22); this.contextMenuStripFreightMarketJobListDelete.Text = "Delete"; this.contextMenuStripFreightMarketJobListDelete.Click += new System.EventHandler(this.contextMenuStripFreightMarketJobListDelete_Click); // // contextMenuStripCompanyDriversEdit // this.contextMenuStripCompanyDriversEdit.Name = "contextMenuStripCompanyDriversEdit"; - this.contextMenuStripCompanyDriversEdit.Size = new System.Drawing.Size(107, 22); + this.contextMenuStripCompanyDriversEdit.Size = new System.Drawing.Size(113, 22); this.contextMenuStripCompanyDriversEdit.Text = "Edit"; this.contextMenuStripCompanyDriversEdit.Click += new System.EventHandler(this.contextMenuStripCompanyDriversEdit_Click); // // contextMenuStripCompanyDriversSeparator // this.contextMenuStripCompanyDriversSeparator.Name = "contextMenuStripCompanyDriversSeparator"; - this.contextMenuStripCompanyDriversSeparator.Size = new System.Drawing.Size(104, 6); + this.contextMenuStripCompanyDriversSeparator.Size = new System.Drawing.Size(110, 6); // // contextMenuStripCompanyDriversHire // this.contextMenuStripCompanyDriversHire.Name = "contextMenuStripCompanyDriversHire"; - this.contextMenuStripCompanyDriversHire.Size = new System.Drawing.Size(107, 22); + this.contextMenuStripCompanyDriversHire.Size = new System.Drawing.Size(113, 22); this.contextMenuStripCompanyDriversHire.Text = "Hire"; this.contextMenuStripCompanyDriversHire.Click += new System.EventHandler(this.contextMenuStripCompanyDriversHire_Click); // // contextMenuStripCompanyDriversFire // this.contextMenuStripCompanyDriversFire.Name = "contextMenuStripCompanyDriversFire"; - this.contextMenuStripCompanyDriversFire.Size = new System.Drawing.Size(107, 22); + this.contextMenuStripCompanyDriversFire.Size = new System.Drawing.Size(113, 22); this.contextMenuStripCompanyDriversFire.Text = "Fire"; this.contextMenuStripCompanyDriversFire.Click += new System.EventHandler(this.contextMenuStripCompanyDriversFire_Click); // @@ -2650,7 +2744,7 @@ private void InitializeComponent() this.buttonMainWriteSave.Dock = System.Windows.Forms.DockStyle.Fill; this.buttonMainWriteSave.Enabled = false; this.buttonMainWriteSave.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.buttonMainWriteSave.Location = new System.Drawing.Point(3, 486); + this.buttonMainWriteSave.Location = new System.Drawing.Point(3, 485); this.buttonMainWriteSave.Name = "buttonMainWriteSave"; this.buttonMainWriteSave.Size = new System.Drawing.Size(238, 84); this.buttonMainWriteSave.TabIndex = 7; @@ -2772,7 +2866,7 @@ private void InitializeComponent() // // labelHelpText // - this.labelHelpText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.labelHelpText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.labelHelpText.AutoSize = true; this.labelHelpText.Cursor = System.Windows.Forms.Cursors.Help; @@ -2835,11 +2929,11 @@ private void InitializeComponent() this.tableLayoutPanel15.Controls.Add(this.tableLayoutPanel16, 1, 0); this.tableLayoutPanel15.Controls.Add(this.tabControlMain, 0, 0); this.tableLayoutPanel15.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel15.Location = new System.Drawing.Point(0, 24); + this.tableLayoutPanel15.Location = new System.Drawing.Point(0, 25); this.tableLayoutPanel15.Name = "tableLayoutPanel15"; this.tableLayoutPanel15.RowCount = 1; this.tableLayoutPanel15.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel15.Size = new System.Drawing.Size(834, 575); + this.tableLayoutPanel15.Size = new System.Drawing.Size(834, 574); this.tableLayoutPanel15.TabIndex = 10; // // tableLayoutPanel16 @@ -2863,7 +2957,7 @@ private void InitializeComponent() this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel16.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F)); - this.tableLayoutPanel16.Size = new System.Drawing.Size(244, 573); + this.tableLayoutPanel16.Size = new System.Drawing.Size(244, 572); this.tableLayoutPanel16.TabIndex = 0; // // tableLayoutPanel10 @@ -2889,6 +2983,7 @@ private void InitializeComponent() this.radioButtonMainGameSwitchETS.Appearance = System.Windows.Forms.Appearance.Button; this.radioButtonMainGameSwitchETS.AutoSize = true; this.radioButtonMainGameSwitchETS.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonMainGameSwitchETS.Enabled = false; this.radioButtonMainGameSwitchETS.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.radioButtonMainGameSwitchETS.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.radioButtonMainGameSwitchETS.Location = new System.Drawing.Point(3, 3); @@ -2907,6 +3002,7 @@ private void InitializeComponent() this.radioButtonMainGameSwitchATS.Appearance = System.Windows.Forms.Appearance.Button; this.radioButtonMainGameSwitchATS.AutoSize = true; this.radioButtonMainGameSwitchATS.Dock = System.Windows.Forms.DockStyle.Fill; + this.radioButtonMainGameSwitchATS.Enabled = false; this.radioButtonMainGameSwitchATS.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.radioButtonMainGameSwitchATS.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.radioButtonMainGameSwitchATS.Location = new System.Drawing.Point(125, 3); @@ -2947,27 +3043,34 @@ private void InitializeComponent() this.buttonMainCloseSave.Visible = false; this.buttonMainCloseSave.Click += new System.EventHandler(this.buttonMainCloseSave_Click); // - // buttonUserCompanyDriversSelectAll + // contextMenuStripMods // - this.buttonUserCompanyDriversSelectAll.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonUserCompanyDriversSelectAll.Location = new System.Drawing.Point(457, 3); - this.buttonUserCompanyDriversSelectAll.Name = "buttonUserCompanyDriversSelectAll"; - this.buttonUserCompanyDriversSelectAll.Size = new System.Drawing.Size(84, 30); - this.buttonUserCompanyDriversSelectAll.TabIndex = 28; - this.buttonUserCompanyDriversSelectAll.Text = "Select All"; - this.buttonUserCompanyDriversSelectAll.UseVisualStyleBackColor = true; - this.buttonUserCompanyDriversSelectAll.Click += new System.EventHandler(this.buttonUserCompanyDriversSelectAll_Click); + this.contextMenuStripMods.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.profileModsRemove, + this.toolStripSeparator2, + this.profileModsDebug}); + this.contextMenuStripMods.Name = "contextMenuStripMods"; + this.contextMenuStripMods.Size = new System.Drawing.Size(171, 54); + this.contextMenuStripMods.Text = "Mods"; // - // buttonUserCompanyDriversUnSelectAll + // profileModsRemove // - this.buttonUserCompanyDriversUnSelectAll.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonUserCompanyDriversUnSelectAll.Location = new System.Drawing.Point(457, 39); - this.buttonUserCompanyDriversUnSelectAll.Name = "buttonUserCompanyDriversUnSelectAll"; - this.buttonUserCompanyDriversUnSelectAll.Size = new System.Drawing.Size(84, 30); - this.buttonUserCompanyDriversUnSelectAll.TabIndex = 29; - this.buttonUserCompanyDriversUnSelectAll.Text = "Unselect All"; - this.buttonUserCompanyDriversUnSelectAll.UseVisualStyleBackColor = true; - this.buttonUserCompanyDriversUnSelectAll.Click += new System.EventHandler(this.buttonUserCompanyDriversUnSelectAll_Click); + this.profileModsRemove.Name = "profileModsRemove"; + this.profileModsRemove.Size = new System.Drawing.Size(170, 22); + this.profileModsRemove.Text = "Remove"; + this.profileModsRemove.Click += new System.EventHandler(this.profileModsRemove_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(167, 6); + // + // profileModsDebug + // + this.profileModsDebug.Name = "profileModsDebug"; + this.profileModsDebug.Size = new System.Drawing.Size(170, 22); + this.profileModsDebug.Text = "Show Debug Info"; + this.profileModsDebug.Click += new System.EventHandler(this.profileModsDebug_Click); // // FormMain // @@ -3042,6 +3145,8 @@ private void InitializeComponent() this.tabPageCargoMarket.PerformLayout(); this.tabPageConvoyTools.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false); + this.tabMods.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.tableMods)).EndInit(); this.contextMenuStripMain.ResumeLayout(false); this.statusStripMain.ResumeLayout(false); this.statusStripMain.PerformLayout(); @@ -3054,6 +3159,7 @@ private void InitializeComponent() this.tableLayoutPanel10.ResumeLayout(false); this.tableLayoutPanel10.PerformLayout(); this.tableLayoutPanel11.ResumeLayout(false); + this.contextMenuStripMods.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -3284,6 +3390,16 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonUserCompanyCitiesUnSelectAll; private System.Windows.Forms.Button buttonUserCompanyDriversSelectAll; private System.Windows.Forms.Button buttonUserCompanyDriversUnSelectAll; + private System.Windows.Forms.ToolStripMenuItem gameToolStripMenuItem; + private System.Windows.Forms.TabPage tabMods; + private System.Windows.Forms.DataGridView tableMods; + private System.Windows.Forms.ToolStripMenuItem modsToolStripMenuItem; + private System.Windows.Forms.DataGridViewTextBoxColumn modId; + private System.Windows.Forms.DataGridViewTextBoxColumn modName; + private System.Windows.Forms.ContextMenuStrip contextMenuStripMods; + private System.Windows.Forms.ToolStripMenuItem profileModsRemove; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem profileModsDebug; } } diff --git a/TS SE Tool/FormMain.cs b/TS SE Tool/FormMain.cs index c853cbfd..2c7203a9 100644 --- a/TS SE Tool/FormMain.cs +++ b/TS SE Tool/FormMain.cs @@ -32,17 +32,14 @@ limitations under the License. using TS_SE_Tool.Utilities; using JR.Utils.GUI.Forms; +using Narod.SteamGameFinder; +using TS_SE_Tool.Forms; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool -{ - public partial class FormMain : Form - { +namespace TS_SE_Tool { + public partial class FormMain : Form { #region Accesslevels - - internal int[] SupportedSavefileVersionETS2; //Program - internal string SupportedGameVersionETS2;//Program - //internal int SupportedSavefileVersionATS; - internal string SupportedGameVersionATS;//Program + internal SupportedGame SelectedGame; private int JobsAmountAdded;//process result @@ -50,8 +47,6 @@ public partial class FormMain : Form public bool FileDecoded; //+ - internal string GameType;//Program - private string LoopStartCity;//Program private string LoopStartCompany;//Program private string unCertainRouteLength;//Program @@ -120,7 +115,7 @@ public partial class FormMain : Form private Random RandomValue;//Program private CountryDictionary CountryDictionary;//Program - private Dictionary CountriesDataList; + private Dictionary CountriesDataList; private Routes RouteList;//Program DB @@ -148,9 +143,17 @@ public partial class FormMain : Form private Image RepairImg, RefuelImg, CustomizeImg; //Program - internal Image[] MainIcons, ADRImgS, ADRImgSGrey, SkillImgSBG, SkillImgS, GaragesImg, GaragesHQImg, CitiesImg, UrgencyImg, CargoTypeImg, CargoType2Img, + internal Image[] MainIcons, ADRImgS, ADRImgSGrey, SkillImgSBG, SkillImgS, GaragesImg, GaragesHQImg, CitiesImg, UrgencyImg, CargoTypeImg, CargoType2Img, TruckPartsImg, TrailerPartsImg, VehicleIntegrityPBImg, GameIconeImg, AccessoriesImg; //Program + private void modsToolStripMenuItem_Click(object sender, EventArgs e) { + new FormModManager(SelectedGame).Show(); + } + + private void gameToolStripMenuItem_Click(object sender, EventArgs e) { + new FormPluginManager(SelectedGame).Show(); + } + internal Dictionary ProgUIImgsDict; private ImageList TabpagesImages; //Program @@ -164,25 +167,14 @@ public partial class FormMain : Form internal double WeightMultiplier = 1; //Program const double kg_to_lb = 2.20462262185; //Program - public Dictionary> CurrencyDictFormat; - public Dictionary CurrencyDictConversion; - - public Dictionary> CurrencyDictFormatETS2 = new Dictionary>(); - public Dictionary CurrencyDictConversionETS2 = new Dictionary(); - - public Dictionary> CurrencyDictFormatATS = new Dictionary>(); - public Dictionary CurrencyDictConversionATS = new Dictionary(); - internal Dictionary> GlobalFontMap; - internal Dictionary LicensePlateWidth; internal bool TssetFoldersExist = false; internal bool ForseExit = false; #endregion - public FormMain() - { + public FormMain() { IO_Utilities.LogWriter("Initializing form..."); InitializeComponent(); IO_Utilities.LogWriter("Form initialized."); @@ -196,6 +188,14 @@ public FormMain() this.Icon = Properties.Resources.MainIco; this.Text += " [ " + AssemblyData.AssemblyVersion + " ]"; + IO_Utilities.LogWriter("Getting Supported Games..."); + Globals.Initialize(); //Globals.SteamDir = new SteamGameLocator().getSteamInstallLocation().Cast().FirstOrDefault(); + IO_Utilities.LogWriter($"Done: {Globals.SupportedGames.ToJson()}"); + + //IO_Utilities.LogWriter("Getting Game Paths..."); + //Globals.SteamDir = new SteamGameLocator().getSteamInstallLocation().Cast().FirstOrDefault(); + //IO_Utilities.LogWriter("Done."); + SetDefaultValues(true); IO_Utilities.LogWriter("Loading config..."); ProgSettingsV.LoadConfigFromFile(); @@ -237,18 +237,14 @@ public FormMain() IO_Utilities.LogWriter("Caching finished."); } - private void FormMain_Shown(object sender, EventArgs e) - { + private void FormMain_Shown(object sender, EventArgs e) { IO_Utilities.LogWriter("Opening form..."); - try - { + try { IO_Utilities.LogWriter("Done."); if (Properties.Settings.Default.ShowSplashOnStartup || Properties.Settings.Default.CheckUpdatesOnStartup) - OpenSplashScreen(); - } - catch - { + OpenSplashScreen(); + } catch { IO_Utilities.LogWriter("Done. Settings error."); OpenSplashScreen(); @@ -256,44 +252,41 @@ private void FormMain_Shown(object sender, EventArgs e) DetectGame(); - void OpenSplashScreen() - { + if (Globals.SupportedGames.Get("ETS2").Installed) radioButtonMainGameSwitchETS.Enabled = true; + if (Globals.SupportedGames.Get("ATS").Installed) radioButtonMainGameSwitchATS.Enabled = true; + + void OpenSplashScreen() { FormSplash WindowSplash = new FormSplash(); WindowSplash.ShowDialog(); } } - private void FormMain_FormClosing(object sender, FormClosingEventArgs e) - { + private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { DialogResult exitDR; - if (this.ForseExit) + if (this.ForseExit) return; if (AddedJobsDictionary != null && AddedJobsDictionary.Count > 0) - exitDR = FlexibleMessageBox.Show(this, "You have unsaved changes."+ Environment.NewLine + "Do you really want to close down application?", "Close Application without saving changes", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); + exitDR = FlexibleMessageBox.Show(this, "You have unsaved changes." + Environment.NewLine + "Do you really want to close down application?", "Close Application without saving changes", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); else exitDR = FlexibleMessageBox.Show(this, "Do you really want to close down application?", "Close Application", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); - if (exitDR == DialogResult.Yes) - { + if (exitDR == DialogResult.Yes) { ProgSettingsV.WriteConfigToFile(); - } - else - { + } else { e.Cancel = true; Activate(); } } - private void makeToolStripMenuItem_Click(object sender, EventArgs e) - { + private void makeToolStripMenuItem_Click(object sender, EventArgs e) { //Set default culture string sysCI = CultureInfo.InstalledUICulture.Name; string folderPath = Directory.GetCurrentDirectory() + @"\lang\" + sysCI; - if(!Directory.Exists(folderPath)) + if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); Process.Start(folderPath); @@ -303,11 +296,11 @@ private void makeToolStripMenuItem_Click(object sender, EventArgs e) } } - public class Globals - { + public static class Globals { + public static List SupportedGames = new(); //----- - public static string[] ProfilesPaths = new string[0]; - public static List ProfilesHex = new List(); + public static List ProfileDirs = new(); + public static List ProfilesHex = new(); // public static string SelectedProfile = ""; public static string SelectedProfilePath = ""; @@ -319,8 +312,62 @@ public class Globals public static string SelectedSavePath = ""; public static string SelectedSaveName = ""; //---- - public static int[] PlayerLevelUps = new int[0]; public static string CurrencyName = ""; + // + public static SteamGameLocator SteamGameLocator = new SteamGameLocator(); + public static bool SteamInstalled { get => SteamGameLocator.getIsSteamInstalled(); } + public static DirectoryInfo SteamDir { get => new DirectoryInfo(SteamGameLocator.getSteamInstallLocation()); } + public static DirectoryInfo GetLatestSteamUserDataDir() => SteamDir.Combine("userdata").GetDirectories().OrderByDescending(d => d.LastWriteTimeUtc).First(d => d.Name.All(char.IsDigit)); + public static DirectoryInfo DocumentsDir = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); // todo: make dynamic + + public static void Initialize() { + SupportedGames.Clear(); + SupportedGames.Add( + new SupportedGame() { + SteamAppId = 227300, + Type = "ETS2", + Name = "Euro Truck Simulator 2", + ExecutableName = "eurotrucks2.exe", + MinSupportedGameVersion = new Version(1, 43), + MaxSupportedGameVersion = new Version(1, 49), + SupportedSaveFileVersions = new() { 61, 74 }, + LicensePlateWidth = 128, + PlayerLevelUps = new() {200, 500, 700, 900, 1000, 1100, 1300, 1600, 1700, 2100, 2300, 2600, 2700, + 2900, 3000, 3100, 3400, 3700, 4000, 4300, 4600, 4700, 4900, 5200, 5700, 5900, 6000, 6200, 6600, 6800}, + Currencies = new() { + new Currency("EUR", 1, new() { "", "€", "" }), + new Currency("CHF", 1.142, new() { "", "", " CHF" }), + new Currency("CZK", 25.88, new() { "", "", " Kč" }), + new Currency("GBP", 0.875, new() { "", "£", "" }), + new Currency("PLN", 4.317, new() { "", "", " zł" }), + new Currency("HUF", 325.3, new() { "", "", " Ft" }), + new Currency("DKK", 7.46, new() { "", "", " kr" }), + new Currency("SEK", 10.52, new() { "", "", " kr" }), + new Currency("NOK", 9.51, new() { "", "", " kr" }), + new Currency("RUB", 77.05, new() { "", "₽", "" }) + } + }); + SupportedGames.Add( + new SupportedGame() { + SteamAppId = 270880, + Type = "ATS", + Name = "American Truck Simulator", + ExecutableName = "amtrucks.exe", + MinSupportedGameVersion = new Version(1, 43), + MaxSupportedGameVersion = new Version(1, 49), + LicensePlateWidth = 64, + PlayerLevelUps = new() {200, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, + 2900, 3100, 3300, 3500, 3700, 4000, 4300, 4600, 4900, 5200, 5500, 5800, 6100, 6400, 6700, 7000, 7300}, + Currencies = new() { + new Currency("USD", 1, new() { "", "$", "" }), + new Currency("CAD", 1.3, new() { "", "$", "" }), + new Currency("MXN", 18.69, new() { "", "$", "" }), + new Currency("EUR", 0.856, new() { "", "€", "" }) + } + }); + } } + + } diff --git a/TS SE Tool/FormMain.resx b/TS SE Tool/FormMain.resx index c1c239a9..4e4b246d 100644 --- a/TS SE Tool/FormMain.resx +++ b/TS SE Tool/FormMain.resx @@ -120,6 +120,15 @@ 17, 17 + + True + + + True + + + 584, 19 + 402, 19 diff --git a/TS SE Tool/FormMethods.cs b/TS SE Tool/FormMethods.cs index 46cc7c21..46b1573e 100644 --- a/TS SE Tool/FormMethods.cs +++ b/TS SE Tool/FormMethods.cs @@ -18,27 +18,22 @@ limitations under the License. using System.Data; using System.Drawing; using System.Drawing.Drawing2D; -using System.Drawing.Imaging; using System.Globalization; using System.Linq; using System.Threading; using System.Windows.Forms; using System.Reflection; using System.Diagnostics; -using System.Timers; +using TS_SE_Tool.Utilities; -namespace TS_SE_Tool -{ - public enum SMStatus : byte - { +namespace TS_SE_Tool { + public enum SMStatus : byte { Clear = 0, Info = 1, Error = 2 } - internal class TSSET_Help - { - internal static void fmRemoveWritenBlock(string _input) - { + internal class TSSET_Help { + internal static void fmRemoveWritenBlock(string _input) { Application.OpenForms.OfType().Single().SiiNunitData.NamelessControlList.Remove(_input); } } @@ -46,56 +41,47 @@ internal static void fmRemoveWritenBlock(string _input) public delegate void AddStatusMessageDelegate(SMStatus _status, string _message, string _option); public delegate DialogResult AddStatusMessageBoxDelegate(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon); - public static class UpdateStatusBarMessage - { + public static class UpdateStatusBarMessage { public static FormMain MainForm; public static event AddStatusMessageDelegate OnNewStatusMessage; public static event AddStatusMessageBoxDelegate OnNewMessageBox; - public static void ShowStatusMessage(SMStatus _status) - { + public static void ShowStatusMessage(SMStatus _status) { ThreadSafeStatusMessage(_status, null, null); } - public static void ShowStatusMessage(SMStatus _status, string _message) - { + public static void ShowStatusMessage(SMStatus _status, string _message) { ThreadSafeStatusMessage(_status, _message, null); } - public static void ShowStatusMessage(SMStatus _status, string _message, string _option) - { + public static void ShowStatusMessage(SMStatus _status, string _message, string _option) { ThreadSafeStatusMessage(_status, _message, _option); } - private static void ThreadSafeStatusMessage(SMStatus _status, string _message, string _option) - { + private static void ThreadSafeStatusMessage(SMStatus _status, string _message, string _option) { if (MainForm != null && MainForm.InvokeRequired) // we are in a different thread to the main window MainForm.Invoke(new AddStatusMessageDelegate(ThreadSafeStatusMessage), new object[] { _status, _message, _option }); // call self from main thread else OnNewStatusMessage(_status, _message, _option); } - - public static DialogResult ShowMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons ) - { + + public static DialogResult ShowMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons) { return ThreadSafeMessageBox(_this, _text, _caption, _buttons); } - public static DialogResult ShowMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon) - { + public static DialogResult ShowMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon) { return ThreadSafeMessageBox(_this, _text, _caption, _buttons, _icon); } - private static DialogResult ThreadSafeMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons) - { + private static DialogResult ThreadSafeMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons) { if (MainForm != null && MainForm.InvokeRequired) return (DialogResult)MainForm.Invoke(new AddStatusMessageBoxDelegate(ThreadSafeMessageBox), new object[] { _this, _text, _caption, _buttons, MessageBoxIcon.None }); else return (DialogResult)OnNewMessageBox(_this, _text, _caption, _buttons, MessageBoxIcon.None); } - private static DialogResult ThreadSafeMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon) - { + private static DialogResult ThreadSafeMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon) { if (MainForm != null && MainForm.InvokeRequired) return (DialogResult)MainForm.Invoke(new AddStatusMessageBoxDelegate(ThreadSafeMessageBox), new object[] { _this, _text, _caption, _buttons, _icon }); else @@ -103,41 +89,32 @@ private static DialogResult ThreadSafeMessageBox(FormMain _this, string _text, s } } - public partial class FormMain - { - void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status) - { + public partial class FormMain { + void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status) { UpdateStatusBarMessage_OnNewStatusMessage(_status, null, null); } - void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status, string _message) - { + void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status, string _message) { UpdateStatusBarMessage_OnNewStatusMessage(_status, _message, null); } - void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status, string _message, string _option) - { - switch (_status) - { - case SMStatus.Clear: - { + void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status, string _message, string _option) { + switch (_status) { + case SMStatus.Clear: { toolStripStatusMessages.Text = ""; return; } - case SMStatus.Info: - { + case SMStatus.Info: { toolStripStatusMessages.ForeColor = Color.Black; break; } - case SMStatus.Error: - { + case SMStatus.Error: { toolStripStatusMessages.ForeColor = Color.Red; break; } } - if (_message != null) - { + if (_message != null) { string toolTipText = GetranslatedString(_message); if (_option != null) @@ -147,42 +124,36 @@ void UpdateStatusBarMessage_OnNewStatusMessage(SMStatus _status, string _message } } - DialogResult ShowMessageBox_OnNewMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon) - { + DialogResult ShowMessageBox_OnNewMessageBox(FormMain _this, string _text, string _caption, MessageBoxButtons _buttons, MessageBoxIcon _icon) { return JR.Utils.GUI.Forms.FlexibleMessageBox.Show(_this, _text, _caption, _buttons, _icon); } - public void SetDefaultValues(bool _initial) - { - if (_initial) - { + public void SetDefaultValues(bool _initial) { + if (_initial) { listBoxFreightMarketAddedJobs.DrawMode = DrawMode.OwnerDrawVariable; comboBoxFreightMarketCargoList.DrawMode = DrawMode.OwnerDrawVariable; comboBoxFreightMarketUrgency.DrawMode = DrawMode.OwnerDrawVariable; comboBoxFreightMarketTrailerDef.DrawMode = DrawMode.OwnerDrawVariable; comboBoxFreightMarketTrailerVariant.DrawMode = DrawMode.OwnerDrawVariable; - + ResourceManagerMain = new PlainTXTResourceManager(); ProgSettingsV = new ProgSettings(); ProgSettingsV.ProgramVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - SupportedSavefileVersionETS2 = new int[] { 61, 74 }; //Supported save version - SupportedGameVersionETS2 = "1.43.x - 1.49.x"; //Last game version Tested on - //SupportedSavefileVersionATS; - SupportedGameVersionATS = "1.43.x - 1.49.x"; //Last game version Tested on - comboBoxRootFolders.FlatStyle = comboBoxProfiles.FlatStyle = comboBoxSaves.FlatStyle = FlatStyle.Flat; - ProfileETS2 = @"\Euro Truck Simulator 2"; - ProfileATS = @"\American Truck Simulator"; - dictionaryProfiles = new Dictionary { { "ETS2", ProfileETS2 }, { "ATS", ProfileATS } }; - GameType = "ETS2"; - - LicensePlateWidth = new Dictionary { { "ETS2", 128 }, { "ATS", 64 } }; - + try { + SelectedGame = Globals.SupportedGames.First(g => g.Installed); + if (SelectedGame is null) throw new Exception("No supported game found!"); + } catch (Exception ex) { + var msg = $"None of the supported games could be found on your system!\n\n{ex.Message}"; + IO_Utilities.ErrorLogWriter(msg); + var _ = MessageBox.Show(msg, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); + Application.Exit(); + } CompaniesLngDict = new Dictionary(); CitiesLngDict = new Dictionary(); CountriesLngDict = new Dictionary(); @@ -190,7 +161,7 @@ public void SetDefaultValues(bool _initial) UrgencyLngDict = new Dictionary(); TruckBrandsLngDict = new Dictionary(); DriverNames = new Dictionary(); - + CountryDictionary = new CountryDictionary(); CountriesDataList = new Dictionary(); @@ -220,97 +191,7 @@ public void SetDefaultValues(bool _initial) PlayerLevelNames.Add(lvl_name9); #endregion - string curName = ""; string[] input; List curLst = new List(); - - #region Currency ETS2 - - curName = "EUR"; - CurrencyDictConversionETS2.Add(curName, 1); - input = new string[] { "", "€", "" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "CHF"; - CurrencyDictConversionETS2.Add(curName, 1.142); - input = new string[] { "", "", " CHF" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "CZK"; - CurrencyDictConversionETS2.Add(curName, 25.88); - input = new string[] { "", "", " Kč" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "GBP"; - CurrencyDictConversionETS2.Add(curName, 0.875); - input = new string[] { "", "£", "" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "PLN"; - CurrencyDictConversionETS2.Add(curName, 4.317); - input = new string[] { "", "", " zł" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "HUF"; - CurrencyDictConversionETS2.Add(curName, 325.3); - input = new string[] { "", "", " Ft" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "DKK"; - CurrencyDictConversionETS2.Add(curName, 7.46); - input = new string[] { "", "", " kr" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "SEK"; - CurrencyDictConversionETS2.Add(curName, 10.52); - input = new string[] { "", "", " kr" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "NOK"; - CurrencyDictConversionETS2.Add(curName, 9.51); - input = new string[] { "", "", " kr" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - - curName = "RUB"; - CurrencyDictConversionETS2.Add(curName, 77.05); - input = new string[] { "", "₽", "" }; - curLst = new List(input); - CurrencyDictFormatETS2.Add(curName, curLst); - #endregion - - #region Currency ATS - - curName = "USD"; - CurrencyDictConversionATS.Add(curName, 1); - input = new string[] { "", "$", "" }; - curLst = new List(input); - CurrencyDictFormatATS.Add(curName, curLst); - - curName = "CAD"; - CurrencyDictConversionATS.Add(curName, 1.3); - input = new string[] { "", "$", "" }; - curLst = new List(input); - CurrencyDictFormatATS.Add(curName, curLst); - - curName = "MXN"; - CurrencyDictConversionATS.Add(curName, 18.69); - input = new string[] { "", "$", "" }; - curLst = new List(input); - CurrencyDictFormatATS.Add(curName, curLst); - - curName = "EUR"; - CurrencyDictConversionATS.Add(curName, 0.856); - input = new string[] { "", "€", "" }; - curLst = new List(input); - CurrencyDictFormatATS.Add(curName, curLst); - #endregion + List curLst = new List(); //Urgency UrgencyArray = new int[] { 0, 1, 2 }; @@ -355,26 +236,16 @@ public void SetDefaultValues(bool _initial) SiiNunitData = null; //Game dependant - if (GameType == "ETS2") - { - Globals.PlayerLevelUps = new int[] {200, 500, 700, 900, 1000, 1100, 1300, 1600, 1700, 2100, 2300, 2600, 2700, - 2900, 3000, 3100, 3400, 3700, 4000, 4300, 4600, 4700, 4900, 5200, 5700, 5900, 6000, 6200, 6600, 6800}; - //Currency - CurrencyDictFormat = CurrencyDictFormatETS2; - CurrencyDictConversion = CurrencyDictConversionETS2; - Globals.CurrencyName = ProgSettingsV.CurrencyMesETS2; - } - else - { - Globals.PlayerLevelUps = new int[] {200, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2300, 2500, 2700, - 2900, 3100, 3300, 3500, 3700, 4000, 4300, 4600, 4900, 5200, 5500, 5800, 6100, 6400, 6700, 7000, 7300}; - //Currency - CurrencyDictFormat = CurrencyDictFormatATS; - CurrencyDictConversion = CurrencyDictConversionATS; - Globals.CurrencyName = ProgSettingsV.CurrencyMesATS; + switch (SelectedGame.Type) { + case "ETS2": + Globals.CurrencyName = ProgSettingsV.CurrencyMesETS2; + break; + case "ATS": + Globals.CurrencyName = ProgSettingsV.CurrencyMesATS; + break; } - MainSaveFileProfileData = new SaveFileProfileData(); + MainSaveFileProfileData = new SaveFileProfileData(SelectedGame); MainSaveFileInfoData = new SaveFileInfoData(); InfoDepContinue = false; @@ -394,7 +265,7 @@ public void SetDefaultValues(bool _initial) GaragesList = new List(); UserTruckDictionary = new Dictionary(); UserDriverDictionary = new Dictionary(); - + UserTrailerDictionary = new Dictionary(); UserTrailerDefDictionary = new Dictionary(); @@ -439,20 +310,17 @@ public void SetDefaultValues(bool _initial) components = null; - GlobalFontMap = new Dictionary>(); - } + GlobalFontMap = new Dictionary>(); + } - public void ApplySettings() - { + public void ApplySettings() { DistanceMultiplier = DistanceMultipliers[ProgSettingsV.DistanceMes]; WeightMultiplier = WeightMultipliers[ProgSettingsV.WeightMes]; checkBoxFreightMarketRandomDest.Checked = ProgSettingsV.ProposeRandom; } - public void ApplySettingsUI() - { - if (SiiNunitData != null) - { + public void ApplySettingsUI() { + if (SiiNunitData != null) { //Company FillAccountMoneyTB(); //Freight @@ -461,8 +329,7 @@ public void ApplySettingsUI() } } - private void AddImagesToControls() - { + private void AddImagesToControls() { //Main menu //Program toolStripMenuItemProgram.DropDownItems["toolStripMenuItemProgramSettings"].Image = ProgUIImgsDict["ProgramSettings"]; @@ -474,14 +341,14 @@ private void AddImagesToControls() toolStripMenuItemHelp.DropDownItems["toolStripMenuItemAbout"].Image = ProgUIImgsDict["Info"]; toolStripMenuItemHelp.DropDownItems["toolStripMenuItemTutorial"].Image = ProgUIImgsDict["Question"]; toolStripMenuItemHelp.DropDownItems["toolStripMenuItemDownload"].Image = ProgUIImgsDict["Download"]; - //Help - How to - toolStripMenuItemTutorial.DropDownItems["toolStripMenuItemLocalPDF"].Image = ProgUIImgsDict["PDF"]; - toolStripMenuItemTutorial.DropDownItems["toolStripMenuItemYouTubeVideo"].Image = ProgUIImgsDict["YouTube"]; - //Help - Download - toolStripMenuItemDownload.DropDownItems["toolStripMenuItemCheckUpdates"].Image = ProgUIImgsDict["NetworkCloud"]; - toolStripMenuItemDownload.DropDownItems["checkSCSForumToolStripMenuItem"].Image = ProgUIImgsDict["SCS"]; - toolStripMenuItemDownload.DropDownItems["checkTMPForumToolStripMenuItem"].Image = ProgUIImgsDict["TMP"]; - toolStripMenuItemDownload.DropDownItems["checkGitHubRelesesToolStripMenuItem"].Image = ProgUIImgsDict["github"]; + //Help - How to + toolStripMenuItemTutorial.DropDownItems["toolStripMenuItemLocalPDF"].Image = ProgUIImgsDict["PDF"]; + toolStripMenuItemTutorial.DropDownItems["toolStripMenuItemYouTubeVideo"].Image = ProgUIImgsDict["YouTube"]; + //Help - Download + toolStripMenuItemDownload.DropDownItems["toolStripMenuItemCheckUpdates"].Image = ProgUIImgsDict["NetworkCloud"]; + toolStripMenuItemDownload.DropDownItems["checkSCSForumToolStripMenuItem"].Image = ProgUIImgsDict["SCS"]; + toolStripMenuItemDownload.DropDownItems["checkTMPForumToolStripMenuItem"].Image = ProgUIImgsDict["TMP"]; + toolStripMenuItemDownload.DropDownItems["checkGitHubRelesesToolStripMenuItem"].Image = ProgUIImgsDict["github"]; //Main controls radioButtonMainGameSwitchETS.Image = GameIconeImg[0]; @@ -494,8 +361,7 @@ private void AddImagesToControls() //Tab pages tabControlMain.ImageList = TabpagesImages; - for (int i = 0; i < TabpagesImages.Images.Count; i++) - { + for (int i = 0; i < TabpagesImages.Images.Count; i++) { tabControlMain.TabPages[i].ImageIndex = i; } @@ -507,12 +373,9 @@ private void AddImagesToControls() contextMenuStripCompanyDriversFire.Image = ProgUIImgsDict["minus"]; } - private void contextMenuStripMainStateChange(string name) - { - switch (name) - { - case "FreightMarketCargoList": - { + private void contextMenuStripMainStateChange(string name) { + switch (name) { + case "FreightMarketCargoList": { contextMenuStripFreightMarketJobListEdit.Visible = true; contextMenuStripFreightMarketJobListSeparator.Visible = true; contextMenuStripFreightMarketJobListDelete.Visible = true; @@ -523,8 +386,7 @@ private void contextMenuStripMainStateChange(string name) break; } - case "CompanyDriversList": - { + case "CompanyDriversList": { contextMenuStripFreightMarketJobListEdit.Visible = false; contextMenuStripFreightMarketJobListSeparator.Visible = false; contextMenuStripFreightMarketJobListDelete.Visible = false; @@ -538,29 +400,18 @@ private void contextMenuStripMainStateChange(string name) } - private void DetectGame() - { - try - { - //Searching for ETS2 - Process[] ets2proc = Process.GetProcessesByName("eurotrucks2"); - - //Searching for ATS - Process[] atsproc = Process.GetProcessesByName("amtrucks"); - - if (atsproc.Count() > 0) + private void DetectGame() { + try { + if (SelectedGame.IsRunning) radioButtonMainGameSwitchATS.Checked = true; else radioButtonMainGameSwitchETS.Checked = true; - } - catch - { + } catch { radioButtonMainGameSwitchETS.Checked = true; } } - private void ClearFormControls(bool _initial) - { + private void ClearFormControls(bool _initial) { this.SuspendLayout(); //=== Profile @@ -572,7 +423,7 @@ private void ClearFormControls(bool _initial) labelPlayerExperience.Text = "0"; labelPlayerExperienceNxtLvlThreshhold.Text = "0"; - + //--- Skills foreach (CheckBox temp in ADRbuttonArray) temp.Checked = false; @@ -639,42 +490,36 @@ private void ClearFormControls(bool _initial) this.ResumeLayout(); } - private void PopulateFormControls() - { + private void PopulateFormControls() { AddTranslationToData(); - + FillFormProfileControls(); //Profile FillFormCompanyControls(); //Company FillUserCompanyTrucksList(); //Truck FillUserCompanyTrailerList(); //Trailer FillFormFreightMarketControls(); //FreightMarket FillFormCargoOffersControls(); //CargoMarket + FillModList(); } //Help methods for searching controls private char[] charsToTrimTranslation = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' }; - internal void HelpTranslateFormMethod(Control parent, ToolTip _formTooltip) - { + internal void HelpTranslateFormMethod(Control parent, ToolTip _formTooltip) { CultureInfo _ci = Thread.CurrentThread.CurrentUICulture; - foreach (Control cntrl in parent.Controls) - { - try - { + foreach (Control cntrl in parent.Controls) { + try { string translatedString = ResourceManagerMain.GetString(cntrl.Name, _ci); if (translatedString == null) translatedString = ResourceManagerMain.GetString(cntrl.Name.TrimEnd(charsToTrimTranslation), _ci); - if (translatedString != null && translatedString != "") - { - if (cntrl.GetType() == typeof(Panel)) - { + if (translatedString != null && translatedString != "") { + if (cntrl.GetType() == typeof(Panel)) { Bitmap _img = new Bitmap(cntrl.Width, cntrl.Height); - using (var canvas = Graphics.FromImage(_img)) - { + using (var canvas = Graphics.FromImage(_img)) { canvas.SmoothingMode = SmoothingMode.HighQuality; canvas.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; @@ -686,20 +531,17 @@ internal void HelpTranslateFormMethod(Control parent, ToolTip _formTooltip) } cntrl.BackgroundImage = _img; - } - else + } else cntrl.Text = translatedString; } - if (_formTooltip != null) - { + if (_formTooltip != null) { string TolltipString = ResourceManagerMain.GetTooltipString(cntrl.Name, _ci); if (TolltipString == null) TolltipString = ResourceManagerMain.GetTooltipString(cntrl.Name.TrimEnd(charsToTrimTranslation), _ci); - if (TolltipString != null) - { + if (TolltipString != null) { TolltipString = TolltipString.Replace("\\r\\n", Environment.NewLine); if (int.TryParse(cntrl.Name.Substring(cntrl.Name.Length - 1), out int number)) @@ -708,130 +550,97 @@ internal void HelpTranslateFormMethod(Control parent, ToolTip _formTooltip) _formTooltip.SetToolTip(cntrl, String.Format(TolltipString, number)); } } - } - catch - { } + } catch { } HelpTranslateFormMethod(cntrl, _formTooltip); } } - internal void HelpTranslateFormMethod(Control parent) - { - HelpTranslateFormMethod(parent, null); + internal void HelpTranslateFormMethod(Control parent) { + HelpTranslateFormMethod(parent, null); } - internal void HelpTranslateControl(Control thisControl) - { + internal void HelpTranslateControl(Control thisControl) { HelpTranslateControlDiffName(thisControl, thisControl.Name); } - internal void HelpTranslateControlDiffName(Control thisControl, string _newName) - { + internal void HelpTranslateControlDiffName(Control thisControl, string _newName) { CultureInfo _ci = Thread.CurrentThread.CurrentUICulture; - try - { + try { string translatedString = ResourceManagerMain.GetString(_newName, _ci); if (translatedString == null) translatedString = ResourceManagerMain.GetString(_newName.TrimEnd(charsToTrimTranslation), _ci); - if (translatedString != null && translatedString != "") - { + if (translatedString != null && translatedString != "") { thisControl.Text = translatedString; } - } - catch - { } + } catch { } } - internal void HelpTranslateControlDiffName(Control thisControl, string _newName, object parameter) - { + internal void HelpTranslateControlDiffName(Control thisControl, string _newName, object parameter) { CultureInfo _ci = Thread.CurrentThread.CurrentUICulture; - try - { + try { string translatedString = ResourceManagerMain.GetString(_newName, _ci); if (translatedString == null) translatedString = ResourceManagerMain.GetString(_newName.TrimEnd(charsToTrimTranslation), _ci); - if (translatedString != null && translatedString != "") - { + if (translatedString != null && translatedString != "") { thisControl.Text = String.Format(translatedString, parameter); } - } - catch - { } + } catch { } } - internal void HelpTranslateControlExt(Control thisControl, object parameter) - { + internal void HelpTranslateControlExt(Control thisControl, object parameter) { CultureInfo _ci = Thread.CurrentThread.CurrentUICulture; - try - { + try { string translatedString = ResourceManagerMain.GetString(thisControl.Name, _ci); if (translatedString == null) translatedString = ResourceManagerMain.GetString(thisControl.Name.TrimEnd(charsToTrimTranslation), _ci); - if (translatedString != null && translatedString != "") - { + if (translatedString != null && translatedString != "") { thisControl.Text = String.Format(translatedString, parameter); } - } - catch - { } + } catch { } } - private void HelpTranslatContextMenuStripMethod(ContextMenuStrip parent) - { + private void HelpTranslatContextMenuStripMethod(ContextMenuStrip parent) { CultureInfo _ci = Thread.CurrentThread.CurrentUICulture; - foreach (ToolStripItem tmpTSMI in parent.Items) - { - try - { + foreach (ToolStripItem tmpTSMI in parent.Items) { + try { string translatedString = ResourceManagerMain.GetString(tmpTSMI.Name, _ci); if (translatedString != null) tmpTSMI.Text = translatedString; - } - catch - { } + } catch { } //HelpTranslateMenuStripDDMethod(tmpTSMI, ResourceManagerMain, _ci); } } - private void HelpTranslateMenuStripMethod(MenuStrip parent) - { + private void HelpTranslateMenuStripMethod(MenuStrip parent) { CultureInfo _ci = Thread.CurrentThread.CurrentUICulture; - foreach (ToolStripMenuItem tmpTSMI in parent.Items) - { - try - { + foreach (ToolStripMenuItem tmpTSMI in parent.Items) { + try { string translatedString = ResourceManagerMain.GetString(tmpTSMI.Name, _ci); if (translatedString != null) tmpTSMI.Text = translatedString; - } - catch - { } + } catch { } HelpTranslateMenuStripDDMethod(tmpTSMI, ResourceManagerMain, _ci); } } - private void HelpTranslateMenuStripDDMethod(ToolStripDropDownItem parent, PlainTXTResourceManager _rm, CultureInfo _ci) - { - try - { - foreach (object c in parent.DropDownItems) - { - if (c is ToolStripDropDownItem) - { + private void HelpTranslateMenuStripDDMethod(ToolStripDropDownItem parent, PlainTXTResourceManager _rm, CultureInfo _ci) { + try { + foreach (object c in parent.DropDownItems) { + if (c is ToolStripDropDownItem) { ToolStripDropDownItem thisbutton = c as ToolStripDropDownItem; string translatedString = _rm.GetString(thisbutton.Name, _ci); @@ -841,17 +650,13 @@ private void HelpTranslateMenuStripDDMethod(ToolStripDropDownItem parent, PlainT HelpTranslateMenuStripDDMethod(thisbutton, _rm, _ci); } } - } - catch - { } + } catch { } } - private string[] HelpTranslateDialog(string _dialogName) - { + private string[] HelpTranslateDialog(string _dialogName) { string dialogCaption = "", dialogText = ""; - try - { + try { string translatedString = ResourceManagerMain.GetString("dialogCaption" + _dialogName, Thread.CurrentThread.CurrentUICulture); if (translatedString == null) @@ -867,28 +672,23 @@ private string[] HelpTranslateDialog(string _dialogName) if (translatedString != null) dialogText = translatedString; - } - catch { } + } catch { } return new string[] { dialogCaption, dialogText }; } - internal string HelpTranslateString(string _textLink) - { + internal string HelpTranslateString(string _textLink) { string translatedString = null; - try - { + try { translatedString = ResourceManagerMain.GetString("string" + _textLink, Thread.CurrentThread.CurrentUICulture); translatedString = translatedString.Replace(@"\r\n", Environment.NewLine); - } - catch { } + } catch { } return translatedString; } //Correct positions - private void CorrectControlsPositions() - { + private void CorrectControlsPositions() { //Truck Label labelPlate = (Label)tabControlMain.TabPages["tabPageTruck"].Controls.Find("labelUserTruckLicensePlate", true).FirstOrDefault(); if (labelPlate != null) @@ -900,15 +700,14 @@ private void CorrectControlsPositions() tableLayoutPanelTrailerLP.ColumnStyles[0] = new ColumnStyle(SizeType.Absolute, labelPlate.PreferredSize.Width); //Freight Market - labelFreightMarketDistanceNumbers.Location = new Point( labelFreightMarketDistance.Location.X + labelFreightMarketDistance.Width + 6, labelFreightMarketDistanceNumbers.Location.Y); + labelFreightMarketDistanceNumbers.Location = new Point(labelFreightMarketDistance.Location.X + labelFreightMarketDistance.Width + 6, labelFreightMarketDistanceNumbers.Location.Y); } //Timers System.Windows.Forms.Timer SteamSelectedTimer = new System.Windows.Forms.Timer(); bool SteamSelectedToggler = false; - private void SteamSelectedTimer_Tick(object sender, EventArgs e) - { + private void SteamSelectedTimer_Tick(object sender, EventArgs e) { if (SteamSelectedToggler) labelHelpText.ForeColor = Color.FromKnownColor(KnownColor.Control); else @@ -919,8 +718,7 @@ private void SteamSelectedTimer_Tick(object sender, EventArgs e) //Translate CB - private void translateTruckComboBox() - { + private void translateTruckComboBox() { int savedindex = 0; string savedvalue = ""; DataTable temptable = new DataTable(); @@ -928,19 +726,16 @@ private void translateTruckComboBox() //Truck tab temptable = comboBoxUserTruckCompanyTrucks.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = comboBoxUserTruckCompanyTrucks.SelectedIndex; if (savedindex != -1) savedvalue = comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(); - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); - if (source != "null") - { + if (source != "null") { var grg = GaragesList.Find(x => x.Vehicles.Contains(source)); if ((byte)temp["TruckType"] == 1) // Users @@ -949,15 +744,12 @@ private void translateTruckComboBox() { temp["GarageName"] = grg.GarageNameTranslated; temp["TruckState"] = 2; - } - else // Sorting - { + } else // Sorting + { temp["GarageName"] = "Not In Garage"; temp["TruckState"] = 3; } - } - else - { + } else { temp["TruckState"] = 1; } } @@ -968,8 +760,7 @@ private void translateTruckComboBox() } } - private void translateTrailerComboBox() - { + private void translateTrailerComboBox() { int savedindex = 0; string savedvalue = ""; DataTable temptable = new DataTable(); @@ -977,8 +768,7 @@ private void translateTrailerComboBox() //Trailer tab temptable = comboBoxUserTrailerCompanyTrailers.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = comboBoxUserTrailerCompanyTrailers.SelectedIndex; if (savedindex != -1) @@ -986,8 +776,7 @@ private void translateTrailerComboBox() //comboBoxUserTrailerCompanyTrailers.SelectedIndexChanged -= comboBoxCompanyTrailers_SelectedIndexChanged; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); if (source == "null") @@ -995,12 +784,9 @@ private void translateTrailerComboBox() string value = GaragesList.Find(x => x.Trailers.Contains(source))?.GarageNameTranslated ?? ""; - if (value != null && value != "") - { + if (value != null && value != "") { temp["GarageName"] = value; - } - else - { + } else { temp["GarageName"] = ""; } } @@ -1012,8 +798,7 @@ private void translateTrailerComboBox() } } - private void TranslateComboBoxes() - { + private void TranslateComboBoxes() { int savedindex = 0, j = 0; string savedvalue = "", ntFormat = " -nt"; DataTable temptable = new DataTable(); @@ -1023,8 +808,7 @@ private void TranslateComboBoxes() //Countries ComboBoxes temptable = comboBoxFreightMarketCountries.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = comboBoxFreightMarketCountries.SelectedIndex; if (savedindex != -1) @@ -1032,18 +816,14 @@ private void TranslateComboBoxes() comboBoxFreightMarketCountries.SelectedIndexChanged -= comboBoxCountries_SelectedIndexChanged; //i = 0; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); CountriesLngDict.TryGetValue(source, out string value); - if (value != null && value != "") - { + if (value != null && value != "") { temp[1] = value; - } - else - { + } else { string CapName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(source); temp[1] = CapName; } @@ -1067,11 +847,9 @@ private void TranslateComboBoxes() sortedDT.Rows.InsertAt(row, 0); //Shift Unsorted - try - { + try { DataRow[] tmpRows = sortedDT.Select("Country = '+unsorted'"); - if (tmpRows.Count() > 0) - { + if (tmpRows.Count() > 0) { sourceRow = tmpRows[0]; rowi = sortedDT.Rows.IndexOf(sourceRow); @@ -1081,11 +859,10 @@ private void TranslateComboBoxes() sortedDT.Rows.RemoveAt(rowi); sortedDT.Rows.InsertAt(row, 1); } - } - catch { } + } catch { } comboBoxFreightMarketCountries.DataSource = sortedDT; - + if (savedindex != -1) comboBoxFreightMarketCountries.SelectedValue = savedvalue; else @@ -1093,12 +870,11 @@ private void TranslateComboBoxes() comboBoxFreightMarketCountries.SelectedIndexChanged += comboBoxCountries_SelectedIndexChanged; } - + //Companies temptable = comboBoxFreightMarketCompanies.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = comboBoxFreightMarketCompanies.SelectedIndex; if (savedindex != -1) @@ -1106,18 +882,14 @@ private void TranslateComboBoxes() comboBoxFreightMarketCompanies.SelectedIndexChanged -= comboBoxCompanies_SelectedIndexChanged; //i = 0; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); CompaniesLngDict.TryGetValue(source, out string value); - if (value != null && value != "") - { + if (value != null && value != "") { temp[1] = value; - } - else - { + } else { temp[1] = source + ntFormat; } } @@ -1148,17 +920,15 @@ private void TranslateComboBoxes() comboBoxFreightMarketCompanies.SelectedIndexChanged += comboBoxCompanies_SelectedIndexChanged; } - + ////// //Cities ComboBoxes ComboBox[] CitiesCB = { comboBoxFreightMarketSourceCity, comboBoxFreightMarketDestinationCity, comboBoxUserCompanyHQcity, comboBoxCargoMarketSourceCity }; EventHandler[] CitiesCBeh = { comboBoxSourceCity_SelectedIndexChanged, comboBoxDestinationCity_SelectedIndexChanged, comboBoxUserCompanyHQcity_SelectedIndexChanged, comboBoxSourceCityCM_SelectedIndexChanged }; j = 0; - foreach (ComboBox tempCB in CitiesCB) - { + foreach (ComboBox tempCB in CitiesCB) { temptable = tempCB.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = tempCB.SelectedIndex; if (savedindex != -1) @@ -1166,18 +936,14 @@ private void TranslateComboBoxes() tempCB.SelectedIndexChanged -= CitiesCBeh[j]; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); CitiesLngDict.TryGetValue(source, out string value); - if (value != null && value != "") - { + if (value != null && value != "") { temp[1] = value; - } - else - { + } else { temp[1] = source + ntFormat; } } @@ -1196,11 +962,9 @@ private void TranslateComboBoxes() ComboBox[] CompaniesCB = { comboBoxFreightMarketSourceCompany, comboBoxFreightMarketDestinationCompany, comboBoxCargoMarketSourceCompany }; EventHandler[] CompaniesCBeh = { comboBoxSourceCompany_SelectedIndexChanged, comboBoxDestinationCompany_SelectedIndexChanged, comboBoxSourceCompanyCM_SelectedIndexChanged }; j = 0; - foreach (ComboBox tempCB in CompaniesCB) - { + foreach (ComboBox tempCB in CompaniesCB) { temptable = tempCB.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = tempCB.SelectedIndex; if (savedindex != -1) @@ -1208,18 +972,14 @@ private void TranslateComboBoxes() tempCB.SelectedIndexChanged -= CompaniesCBeh[j]; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); CompaniesLngDict.TryGetValue(source, out string value); - if (value != null && value != "") - { + if (value != null && value != "") { temp[1] = value; - } - else - { + } else { temp[1] = source + ntFormat; } } @@ -1236,8 +996,7 @@ private void TranslateComboBoxes() //Freight Market //Cargo temptable = comboBoxFreightMarketCargoList.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { savedindex = comboBoxFreightMarketCargoList.SelectedIndex; if (savedindex != -1) @@ -1246,18 +1005,14 @@ private void TranslateComboBoxes() comboBoxFreightMarketCargoList.SelectedIndexChanged -= comboBoxCargoList_SelectedIndexChanged; //i = 0; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); CargoLngDict.TryGetValue(source, out string value); - if (value != null && value != "") - { + if (value != null && value != "") { temp[1] = value; - } - else - { + } else { temp[1] = source + ntFormat; } } @@ -1270,21 +1025,16 @@ private void TranslateComboBoxes() //Urgency temptable = comboBoxFreightMarketUrgency.DataSource as DataTable; - if (temptable != null) - { + if (temptable != null) { //i = 0; - foreach (DataRow temp in temptable.Rows) - { + foreach (DataRow temp in temptable.Rows) { string source = temp[0].ToString(); UrgencyLngDict.TryGetValue(source, out string value); - if (value != null && value != "") - { + if (value != null && value != "") { temp[1] = value; - } - else - { + } else { temp[1] = source + ntFormat; } } @@ -1297,17 +1047,15 @@ private void TranslateComboBoxes() listBoxFreightMarketAddedJobs.Refresh(); } - + //Get translation line - private string GetranslatedString(string _key) - { + private string GetranslatedString(string _key) { if (_key == "") return ""; CultureInfo ci = Thread.CurrentThread.CurrentUICulture; - try - { + try { PlainTXTResourceManager rm = new PlainTXTResourceManager(); string resultString = rm.GetString(_key, ci); @@ -1316,15 +1064,12 @@ private string GetranslatedString(string _key) return resultString; else return _key.Split(new char[] { '_' }, 2)[1]; - } - catch - { + } catch { return _key.Split(new char[] { '_' }, 2)[1]; } } - private void AddTranslationToData() - { + private void AddTranslationToData() { string ntFormat = " -nt"; //Countries /* @@ -1344,16 +1089,12 @@ private void AddTranslationToData() } */ //Cities - foreach (City _city in from x in CitiesList where !x.Disabled select x) - { + foreach (City _city in from x in CitiesList where !x.Disabled select x) { CitiesLngDict.TryGetValue(_city.CityName, out string _translated); - if (_translated != null && _translated != "") - { + if (_translated != null && _translated != "") { _city.CityNameTranslated = _translated; - } - else - { + } else { _city.CityNameTranslated = _city.CityName + ntFormat; } } @@ -1361,16 +1102,12 @@ private void AddTranslationToData() CitiesList = CitiesList.OrderBy(x => x.CityNameTranslated).ToList(); //Garages - foreach (Garages _garage in GaragesList) - { + foreach (Garages _garage in GaragesList) { CitiesLngDict.TryGetValue(_garage.GarageName, out string _translated); - if (_translated != null && _translated != "") - { + if (_translated != null && _translated != "") { _garage.GarageNameTranslated = _translated; - } - else - { + } else { _garage.GarageNameTranslated = _garage.GarageName + ntFormat; } } @@ -1382,11 +1119,10 @@ private void AddTranslationToData() } //Language End - + //Extra //Search index in CB by Value - private int FindByValue (ComboBox _inputComboBox, string _value) - { + private int FindByValue(ComboBox _inputComboBox, string _value) { DataTable _combDT = new DataTable(); _combDT = _inputComboBox.DataSource as DataTable; @@ -1401,29 +1137,24 @@ private int FindByValue (ComboBox _inputComboBox, string _value) return -1; } - static string NullToString(object _value) - { + static string NullToString(object _value) { return _value == null ? "null" : _value.ToString(); } //Iterating throught nameless - internal string GetSpareNameless() - { - if (namelessLast == "") - { + internal string GetSpareNameless() { + if (namelessLast == "") { int i = 1; - do - { + do { namelessLast = SiiNunitData.NamelessControlList[SiiNunitData.NamelessControlList.Count() - i]; i++; - if (namelessLast.StartsWith("_nameless.")) - { + if (namelessLast.StartsWith("_nameless.")) { namelessLast = namelessLast.Replace("_nameless.", ""); break; } - + } while (true); } @@ -1436,38 +1167,27 @@ internal string GetSpareNameless() Array.Reverse(_namelessNumbers); bool _first = true, _overflow = false; - for (int i = 0; i < _namelessNumbers.Length; i++) - { + for (int i = 0; i < _namelessNumbers.Length; i++) { _namelessNumArray[i] = UInt16.Parse(_namelessNumbers[i], NumberStyles.HexNumber); - try - { - if (_first) - { + try { + if (_first) { _namelessNumArray[i] = checked((ushort)(_namelessNumArray[i] + _incr)); - } - else - if (_overflow) - { + } else + if (_overflow) { _namelessNumArray[i] = checked((ushort)(_namelessNumArray[i] + 1)); _overflow = false; } - } - catch (OverflowException) - { - if (_first) - { + } catch (OverflowException) { + if (_first) { _namelessNumArray[i] = (ushort)(_namelessNumArray[i] + _incr); - } - else - { + } else { _namelessNumArray[i] = (ushort)(_namelessNumArray[i] + 1); } _overflow = true; } - if (i == (_namelessNumbers.Length - 1) && _overflow) - { + if (i == (_namelessNumbers.Length - 1) && _overflow) { Array.Resize(ref _namelessNumArray, _namelessNumArray.Length + 1); _namelessNumArray[_namelessNumbers.Length - 1] = 1; @@ -1479,14 +1199,10 @@ internal string GetSpareNameless() namelessLast = ""; - for (int i = 0; i < _namelessNumArray.Length; i++) - { - if (i < _namelessNumArray.Length - 1) - { + for (int i = 0; i < _namelessNumArray.Length; i++) { + if (i < _namelessNumArray.Length - 1) { namelessLast = "." + _namelessNumArray[i].ToString("x4") + namelessLast; - } - else - { + } else { namelessLast = _namelessNumArray[i].ToString("x") + namelessLast; } } @@ -1495,12 +1211,10 @@ internal string GetSpareNameless() return "_nameless." + namelessLast; } - private int GetRandomCBindex(int _previous, int _lessthen) - { + private int GetRandomCBindex(int _previous, int _lessthen) { int result = 0; - do - { + do { result = RandomValue.Next(_lessthen); } while (result == _previous); diff --git a/TS SE Tool/Forms/FormAboutBox.Designer.cs b/TS SE Tool/Forms/FormAboutBox.Designer.cs index b564deef..d43772eb 100644 --- a/TS SE Tool/Forms/FormAboutBox.Designer.cs +++ b/TS SE Tool/Forms/FormAboutBox.Designer.cs @@ -13,10 +13,8 @@ You may obtain a copy of the License at See the License for the specific language governing permissions and limitations under the License. */ -namespace TS_SE_Tool -{ - partial class FormAboutBox - { +namespace TS_SE_Tool { + partial class FormAboutBox { /// /// Required designer variable. /// @@ -25,10 +23,8 @@ partial class FormAboutBox /// /// Clean up any resources being used. /// - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); @@ -40,8 +36,7 @@ protected override void Dispose(bool disposing) /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// - private void InitializeComponent() - { + private void InitializeComponent() { this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); this.labelProductName = new System.Windows.Forms.Label(); this.labelVersion = new System.Windows.Forms.Label(); @@ -91,6 +86,7 @@ private void InitializeComponent() this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 58F)); this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 8F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel.Size = new System.Drawing.Size(265, 443); this.tableLayoutPanel.TabIndex = 0; // @@ -257,12 +253,12 @@ private void InitializeComponent() private System.Windows.Forms.Label labelCopyright; private System.Windows.Forms.Label labelSupportedGameVersions; private System.Windows.Forms.TextBox textBoxDescription; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; private System.Windows.Forms.Label labelProductName; - private System.Windows.Forms.Label labelETS2version; - private System.Windows.Forms.Label labelATSversion; private System.Windows.Forms.Button okButton; private System.Windows.Forms.Button buttonSupportDeveloper; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label labelETS2version; + private System.Windows.Forms.Label labelATSversion; } } diff --git a/TS SE Tool/Forms/FormAboutBox.cs b/TS SE Tool/Forms/FormAboutBox.cs index 4e51ebdb..cd7e455a 100644 --- a/TS SE Tool/Forms/FormAboutBox.cs +++ b/TS SE Tool/Forms/FormAboutBox.cs @@ -14,47 +14,46 @@ You may obtain a copy of the License at limitations under the License. */ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; using System.Linq; -using System.Reflection; -using System.Threading.Tasks; using System.Windows.Forms; -using System.Threading; +using TS_SE_Tool.CustomClasses.Program; +using TS_SE_Tool.Utilities; -namespace TS_SE_Tool -{ - partial class FormAboutBox : Form - { +namespace TS_SE_Tool { + partial class FormAboutBox : Form { FormMain MainForm = Application.OpenForms.OfType().Single(); - public FormAboutBox() - { + public FormAboutBox() { InitializeComponent(); SetFormVisual(); PopulateFormControls(); TranslateForm(); +#if DEBUG + Globals.SupportedGames.ToJson(true).ToFile("SupportedGames.json", true); // todo: remove +#endif } - private void SetFormVisual() - { + private void SetFormVisual() { this.Icon = Utilities.Graphics_TSSET.IconFromImage(MainForm.ProgUIImgsDict["Info"]); } - private void PopulateFormControls() - { - buttonSupportDeveloper.Visible = false; + private void PopulateFormControls() { + //buttonSupportDeveloper.Visible = false; labelProductName.Text = Utilities.AssemblyData.AssemblyProduct; labelCopyright.Text = Utilities.AssemblyData.AssemblyCopyright; - labelETS2version.Text = String.Join(" - ", MainForm.SupportedSavefileVersionETS2.Select(p => p.ToString()).ToArray()) + " (" + MainForm.SupportedGameVersionETS2 + ")"; - labelATSversion.Text = String.Join(" - ", MainForm.SupportedSavefileVersionETS2.Select(p => p.ToString()).ToArray()) + " (" + MainForm.SupportedGameVersionATS + ")"; + var ets2 = Globals.SupportedGames.Get("ETS2"); + var ats = Globals.SupportedGames.Get("ATS"); + + labelETS2version.Text = ets2.SupportedGameVersionString; + if (ets2.SupportedSaveFileVersions.Count > 0) labelETS2version.Text += " (" + ets2.SupportedSaveFileVersionString + ")"; + labelATSversion.Text = ats.SupportedGameVersionString; + if (ats.SupportedSaveFileVersions.Count > 0) labelATSversion.Text += " (" + ats.SupportedSaveFileVersionString + ")"; // - string[][] referencies = { + string[][] referencies = { new string[] {"SII Decrypt", "https://github.com/ncs-sniper/SII_Decrypt"}, new string[] {"PsColorPicker", "https://github.com/exectails/PsColorPicker"}, new string[] {"SharpZipLib", "https://github.com/icsharpcode/SharpZipLib"}, @@ -66,28 +65,26 @@ private void PopulateFormControls() string referenciesText = ""; - foreach (string[] tmp in referencies) - { + foreach (string[] tmp in referencies) { referenciesText += tmp[0] + Environment.NewLine + tmp[1] + Environment.NewLine + Environment.NewLine; } // - textBoxDescription.Text = string.Format(MainForm.HelpTranslateString(this.Name + textBoxDescription.Name), + textBoxDescription.Text = $"Installed Versions:\r\n\r\n{ets2.Type}: {ets2.Version}\r\n{ats.Type}: {ats.Version}\r\n\r\n"; + textBoxDescription.Text += string.Format(MainForm.HelpTranslateString(this.Name + textBoxDescription.Name), Utilities.Web_Utilities.External.linkMailDeveloper, Utilities.Web_Utilities.External.linkGithub); textBoxDescription.Text += referenciesText; // } - private void TranslateForm() - { + private void TranslateForm() { MainForm.HelpTranslateFormMethod(this); MainForm.HelpTranslateControlExt(this, Utilities.AssemblyData.AssemblyTitle); MainForm.HelpTranslateControlExt(labelVersion, Utilities.AssemblyData.AssemblyVersion); } - private void buttonSupportDeveloper_Click(object sender, EventArgs e) - { + private void buttonSupportDeveloper_Click(object sender, EventArgs e) { string url = Utilities.Web_Utilities.External.linkHelpDeveloper; DialogResult result = MessageBox.Show("This will open " + url + " web-page." + Environment.NewLine + "Do you want to continue?", diff --git a/TS SE Tool/Forms/FormAddCustomFolder.cs b/TS SE Tool/Forms/FormAddCustomFolder.cs index fa809dc3..7cdc3baf 100644 --- a/TS SE Tool/Forms/FormAddCustomFolder.cs +++ b/TS SE Tool/Forms/FormAddCustomFolder.cs @@ -25,10 +25,8 @@ limitations under the License. using System.IO; using System.Threading; -namespace TS_SE_Tool -{ - public partial class FormAddCustomFolder : Form - { +namespace TS_SE_Tool { + public partial class FormAddCustomFolder : Form { FormMain MainForm = Application.OpenForms.OfType().Single(); private string SelectedfolderPath; @@ -37,8 +35,7 @@ public partial class FormAddCustomFolder : Form private string GameType = ""; private bool CustomPathChanged = false; - public FormAddCustomFolder() - { + public FormAddCustomFolder() { InitializeComponent(); this.Icon = Properties.Resources.MainIco; @@ -48,11 +45,9 @@ public FormAddCustomFolder() ChangeCustomPathListVisibility(); CustomPathsArr = new Dictionary>();//(MainForm.ProgSettingsV.CustomPaths); - foreach (KeyValuePair> k1 in MainForm.ProgSettingsV.CustomPaths) - { + foreach (KeyValuePair> k1 in MainForm.ProgSettingsV.CustomPaths) { List tmp = new List(); - foreach (string k2 in k1.Value) - { + foreach (string k2 in k1.Value) { tmp.Add(k2); } CustomPathsArr.Add(k1.Key, tmp); @@ -61,18 +56,15 @@ public FormAddCustomFolder() radioButtonGameTypeETS2.Checked = true; } //Buttons - private void buttonChooseFolder_Click(object sender, EventArgs e) - { + private void buttonChooseFolder_Click(object sender, EventArgs e) { // Show the FolderBrowserDialog. DialogResult result = folderBrowserDialogAddCustomFolder.ShowDialog(); - if (result == DialogResult.OK) - { + if (result == DialogResult.OK) { SelectedfolderPath = folderBrowserDialogAddCustomFolder.SelectedPath; labelCustomPathDir.Text = SelectedfolderPath; List includedFolders = new List(); - foreach (string tFolder in Directory.GetDirectories(SelectedfolderPath)) - { + foreach (string tFolder in Directory.GetDirectories(SelectedfolderPath)) { includedFolders.Add(GetDirectoryName2(tFolder)); } @@ -83,16 +75,13 @@ private void buttonChooseFolder_Click(object sender, EventArgs e) bool GameSFrootFolder = false, GameSFprofileFolder = false, GameSFsaveFolder = false; //Determinate folder type - if (includedFolders.Contains("profiles")) - { + if (includedFolders.Contains("profiles")) { GameSFrootFolder = true; } - if (includedFiles.Contains("profile.sii")) - { + if (includedFiles.Contains("profile.sii")) { GameSFprofileFolder = true; } - if (includedFiles.Contains("game.sii")) - { + if (includedFiles.Contains("game.sii")) { GameSFsaveFolder = true; } @@ -100,44 +89,35 @@ private void buttonChooseFolder_Click(object sender, EventArgs e) radioButtonProfileFolderType.Checked = GameSFprofileFolder; radioButtonSaveFolderType.Checked = GameSFsaveFolder; - if (radioButtonRootFolderType.Checked || radioButtonProfileFolderType.Checked || radioButtonSaveFolderType.Checked) - { + if (radioButtonRootFolderType.Checked || radioButtonProfileFolderType.Checked || radioButtonSaveFolderType.Checked) { buttonAddCustomPath.Enabled = true; groupBoxFolderType.Enabled = true; } } } - private void buttonEditCPlist_Click(object sender, EventArgs e) - { + private void buttonEditCPlist_Click(object sender, EventArgs e) { ChangeCustomPathListVisibility(); } - private void buttonAddCustomPath_Click(object sender, EventArgs e) - { - if (CustomPathsArr.Keys.Contains(GameType)) - { - if (CustomPathsArr[GameType].Contains(SelectedfolderPath)) - { + private void buttonAddCustomPath_Click(object sender, EventArgs e) { + if (CustomPathsArr.Keys.Contains(GameType)) { + if (CustomPathsArr[GameType].Contains(SelectedfolderPath)) { MessageBox.Show("Path " + SelectedfolderPath + " already added to the " + GameType + " list", "Path exist in the list", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); - } - else - { + } else { CustomPathsArr[GameType].Add(SelectedfolderPath); CustomPathChanged = true; if (ListOpen) UpdatedataGridView(); MessageBox.Show("Path " + SelectedfolderPath + " added to the " + GameType + " list", "Custom path", MessageBoxButtons.OK, MessageBoxIcon.Information); } - } - else - { + } else { List tmp = new List(); tmp.Add(SelectedfolderPath); CustomPathsArr.Add(GameType, tmp); CustomPathChanged = true; if (ListOpen) - UpdatedataGridView(); + UpdatedataGridView(); MessageBox.Show("Path " + SelectedfolderPath + " added to the " + GameType + " list", "Custom path", MessageBoxButtons.OK, MessageBoxIcon.Information); } @@ -150,24 +130,21 @@ private void buttonAddCustomPath_Click(object sender, EventArgs e) buttonSave.Enabled = true; } - private void buttonSave_Click(object sender, EventArgs e) - { + private void buttonSave_Click(object sender, EventArgs e) { MainForm.ProgSettingsV.CustomPaths = new Dictionary>(CustomPathsArr); CustomPathChanged = false; buttonSave.Enabled = false; } //Radio button - private void radioButtonFolderType_CheckedChanged(object sender, EventArgs e) - { + private void radioButtonFolderType_CheckedChanged(object sender, EventArgs e) { RadioButton a = sender as RadioButton; - if(a.Checked & a.Name != "radioButton4" & (radioButtonGameTypeETS2.Checked || radioButtonGameTypeATS.Checked)) + if (a.Checked & a.Name != "radioButton4" & (radioButtonGameTypeETS2.Checked || radioButtonGameTypeATS.Checked)) buttonAddCustomPath.Enabled = true; else buttonAddCustomPath.Enabled = false; } - private void radioButtonGameType_CheckedChanged(object sender, EventArgs e) - { + private void radioButtonGameType_CheckedChanged(object sender, EventArgs e) { if (radioButtonGameTypeETS2.Checked) GameType = "ETS2"; else @@ -177,10 +154,8 @@ private void radioButtonGameType_CheckedChanged(object sender, EventArgs e) UpdatedataGridView(); } //Methods - private void ChangeCustomPathListVisibility() - { - if (ListOpen) - { + private void ChangeCustomPathListVisibility() { + if (ListOpen) { tableLayoutPanel1.ColumnStyles[2].Width = 0; int w = 390; this.MinimumSize = new Size(w, this.Height); @@ -194,21 +169,16 @@ private void ChangeCustomPathListVisibility() ListOpen = false; - try - { + try { string translatedString = MainForm.ResourceManagerMain.GetString(buttonEditCPlist.Name, Thread.CurrentThread.CurrentUICulture); if (translatedString != null) buttonEditCPlist.Text = translatedString + " ▶"; else buttonEditCPlist.Text = "Edit list" + " ▶"; + } catch { } - catch - { - } - } - else - { + } else { tableLayoutPanel1.ColumnStyles[2].Width = 300; int w = 690; this.MaximumSize = new Size(w, this.Height); @@ -222,32 +192,27 @@ private void ChangeCustomPathListVisibility() ListOpen = true; - try - { + try { string translatedString = MainForm.ResourceManagerMain.GetString(buttonEditCPlist.Name, Thread.CurrentThread.CurrentUICulture); if (translatedString != null) buttonEditCPlist.Text = translatedString + " ◀"; else buttonEditCPlist.Text = "Edit list" + " ◀"; - } - catch - { + } catch { } UpdatedataGridView(); } } - private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) - { + private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex == dataGridView1.NewRowIndex || e.RowIndex < 0) return; var senderGrid = (DataGridView)sender; - if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0) - { + if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0) { CustomPathChanged = true; string tmp = senderGrid[1, e.RowIndex].Value.ToString(); CustomPathsArr[GameType].Remove(tmp); @@ -259,16 +224,13 @@ private void dataGridView1_CellContentClick(object sender, DataGridViewCellEvent } } - private void UpdatedataGridView() - { + private void UpdatedataGridView() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("Path", typeof(string)); combDT.Columns.Add(dc); - if (CustomPathsArr.Keys.Contains(GameType)) - { - foreach (string path in CustomPathsArr[GameType]) - { + if (CustomPathsArr.Keys.Contains(GameType)) { + foreach (string path in CustomPathsArr[GameType]) { combDT.Rows.Add(path); } } @@ -276,19 +238,14 @@ private void UpdatedataGridView() dataGridView1.DataSource = combDT; } - private void FormAddCustomFolder_FormClosing(object sender, FormClosingEventArgs e) - { + private void FormAddCustomFolder_FormClosing(object sender, FormClosingEventArgs e) { DialogResult exitDR = DialogResult.No; - if (CustomPathChanged) - { + if (CustomPathChanged) { exitDR = MessageBox.Show("You have unsaved changes.\r\nDo you really want to close dialogue without saving?", "Dialogue close", MessageBoxButtons.YesNo); - if (exitDR == DialogResult.Yes) - { - } - else - { + if (exitDR == DialogResult.Yes) { + } else { e.Cancel = true; Activate(); } @@ -296,17 +253,13 @@ private void FormAddCustomFolder_FormClosing(object sender, FormClosingEventArgs } //Extra - static string GetDirectoryName2(string f) - { - try - { + static string GetDirectoryName2(string f) { + try { return f.Substring(f.LastIndexOf('\\') + 1, f.Length - f.LastIndexOf('\\') - 1); - } - catch - { + } catch { return string.Empty; } } - + } } diff --git a/TS SE Tool/Forms/FormConvoyControlPositions.cs b/TS SE Tool/Forms/FormConvoyControlPositions.cs index 6b558509..c901005e 100644 --- a/TS SE Tool/Forms/FormConvoyControlPositions.cs +++ b/TS SE Tool/Forms/FormConvoyControlPositions.cs @@ -406,7 +406,7 @@ private void buttonSave_Click(object sender, EventArgs e) if (!checkBoxCustomThumbnail.Checked) { - newbmp = new Bitmap(Utilities.Graphics_TSSET.ddsImgLoader("img\\" + MainForm.GameType + "\\autosave.dds", 256, 128).images[0]); + newbmp = new Bitmap(Utilities.Graphics_TSSET.ddsImgLoader("img\\" + MainForm.SelectedGame.Type + "\\autosave.dds", 256, 128).images[0]); } else if (checkBoxCustomThumbnail.Checked && Thumbnails.Length != 0) { diff --git a/TS SE Tool/Forms/FormLicensePlateEdit.cs b/TS SE Tool/Forms/FormLicensePlateEdit.cs index f04eceb2..fff0dd91 100644 --- a/TS SE Tool/Forms/FormLicensePlateEdit.cs +++ b/TS SE Tool/Forms/FormLicensePlateEdit.cs @@ -9,28 +9,22 @@ using System.Windows.Forms; using System.Threading; -namespace TS_SE_Tool -{ - public partial class FormLicensePlateEdit : Form - { +namespace TS_SE_Tool { + public partial class FormLicensePlateEdit : Form { TS_SE_Tool.FormMain MainForm = Application.OpenForms.OfType().Single(); public string licenseplatetext = ""; private bool WindowsSizeState = false; - public FormLicensePlateEdit(string _licenseplatetext) - { + public FormLicensePlateEdit(string _licenseplatetext) { InitializeComponent(); this.Icon = Utilities.Graphics_TSSET.IconFromImage(MainForm.ProgUIImgsDict["Settings"]); - try - { + try { string translatedString = MainForm.ResourceManagerMain.GetString(this.Name, Thread.CurrentThread.CurrentUICulture); if (translatedString != null) this.Text = translatedString; - } - catch - { } + } catch { } this.SuspendLayout(); @@ -46,16 +40,14 @@ public FormLicensePlateEdit(string _licenseplatetext) textBoxLicensePlateNumber.Text = lpParts[0]; textBoxLicensePlateCountry.Text = lpParts[1]; - + this.ResumeLayout(); } - private void FormTruckLicensePlateEdit_Shown(object sender, EventArgs e) - { + private void FormTruckLicensePlateEdit_Shown(object sender, EventArgs e) { buttonCancel.Focus(); } - private void CreateControls() - { + private void CreateControls() { this.AcceptButton = buttonOk; this.CancelButton = buttonCancel; @@ -65,32 +57,26 @@ private void CreateControls() SetTagHelpText(); } - private void ToggleFormSize() - { + private void ToggleFormSize() { Size WinSizeMin = new Size(676, 212), WinSizeMax = new Size(676, 282); - if (WindowsSizeState) - { + if (WindowsSizeState) { this.MaximumSize = WinSizeMax; this.MinimumSize = WinSizeMax; - } - else - { + } else { this.MinimumSize = WinSizeMin; this.MaximumSize = WinSizeMin; } WindowsSizeState = !WindowsSizeState; } - private void buttonShowTagHelp_Click(object sender, EventArgs e) - { + private void buttonShowTagHelp_Click(object sender, EventArgs e) { ToggleFormSize(); ToggleTagHelpText(); } - private void SetTagHelpText() - { + private void SetTagHelpText() { labelLicensePlateTagsHelp.Text = ""; labelLicensePlateTagsHelp2.Text = ""; @@ -118,8 +104,7 @@ private void SetTagHelpText() string rightText = sb.ToString(); - panel2.Paint += new PaintEventHandler((sender, e) => - { + panel2.Paint += new PaintEventHandler((sender, e) => { format.Alignment = StringAlignment.Near; e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; @@ -136,30 +121,26 @@ private void SetTagHelpText() } - private void ToggleTagHelpText() - { + private void ToggleTagHelpText() { if (WindowsSizeState) buttonShowTagHelp.Text = "Expand help"; else buttonShowTagHelp.Text = "Collapse help"; } - private void textBoxLicensePlateNumber_TextChanged(object sender, EventArgs e) - { + private void textBoxLicensePlateNumber_TextChanged(object sender, EventArgs e) { licenseplatetext = textBoxLicensePlateNumber.Text + '|' + textBoxLicensePlateCountry.Text; SCS.SCSLicensePlate thisLP = new SCS.SCSLicensePlate(licenseplatetext, SCS.SCSLicensePlate.LPtype.Truck); - panelLicensePlatePreview.BackgroundImage = Utilities.Graphics_TSSET.ResizeImage(thisLP.LicensePlateIMG, MainForm.LicensePlateWidth[MainForm.GameType], 32); //ETS - 128x32 or ATS - 128x64 + panelLicensePlatePreview.BackgroundImage = Utilities.Graphics_TSSET.ResizeImage(thisLP.LicensePlateIMG, MainForm.SelectedGame.LicensePlateWidth, 32); //ETS - 128x32 or ATS - 128x64 } - private void buttonOk_Click(object sender, EventArgs e) - { + private void buttonOk_Click(object sender, EventArgs e) { this.Close(); } - private void buttonCancel_Click(object sender, EventArgs e) - { + private void buttonCancel_Click(object sender, EventArgs e) { this.Close(); } diff --git a/TS SE Tool/Forms/FormMainControlsMethods.cs b/TS SE Tool/Forms/FormMainControlsMethods.cs index 93c2fee4..fb89398c 100644 --- a/TS SE Tool/Forms/FormMainControlsMethods.cs +++ b/TS SE Tool/Forms/FormMainControlsMethods.cs @@ -28,22 +28,24 @@ limitations under the License. using System.Windows.Forms; using System.Reflection; using Microsoft.Win32; +using FuzzySharp; +using static System.Diagnostics.Process; using TS_SE_Tool.Utilities; +using TS_SE_Tool.Forms; +using Narod.SteamGameFinder; +using TS_SE_Tool.CustomClasses.Program; +using System.Text; -namespace TS_SE_Tool -{ - public partial class FormMain - { +namespace TS_SE_Tool { + public partial class FormMain { //Menu controls - private void programSettingsToolStripMenuItem_Click(object sender, EventArgs e) - { + private void programSettingsToolStripMenuItem_Click(object sender, EventArgs e) { FormProgramSettings FormWindow = new FormProgramSettings(); FormWindow.ShowDialog(); } - private void settingsToolStripMenuItem_Click(object sender, EventArgs e) - { + private void settingsToolStripMenuItem_Click(object sender, EventArgs e) { FormSettings FormWindow = new FormSettings(); FormWindow.ShowDialog(); @@ -51,15 +53,13 @@ private void settingsToolStripMenuItem_Click(object sender, EventArgs e) ApplySettingsUI(); } - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { + private void exitToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } //Language //tool strip click - private void toolstripChangeLanguage(object sender, EventArgs e) - { + private void toolstripChangeLanguage(object sender, EventArgs e) { ToolStripItem obj = sender as ToolStripItem; string _objname = obj.Name; @@ -72,22 +72,17 @@ private void toolstripChangeLanguage(object sender, EventArgs e) ChangeLanguage(); } - private void ChangeLanguage() - { - try - { + private void ChangeLanguage() { + try { if (ProgSettingsV.Language != "Default") Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ProgSettingsV.Language);//CultureInfo.GetCultureInfo("en-US"); - } - catch - { + } catch { IO_Utilities.LogWriter("Wrong language setting format"); } CultureInfo ci = Thread.CurrentThread.CurrentUICulture; - try - { + try { this.SuspendLayout(); HelpTranslateFormMethod(this, toolTipMain); @@ -110,54 +105,45 @@ private void ChangeLanguage() AddTranslationToData(); TranslateComboBoxes(); CorrectControlsPositions(); - } - catch - { } + } catch { } //rm.ReleaseAllResources(); } //About - private void aboutToolStripMenuItem_Click(object sender, EventArgs e) - { + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { FormAboutBox aboutWindow = new FormAboutBox(); aboutWindow.ShowDialog(); } //How to - private void localPDFToolStripMenuItem_Click(object sender, EventArgs e) - { + private void localPDFToolStripMenuItem_Click(object sender, EventArgs e) { string pdf_path = Directory.GetCurrentDirectory() + @"\HowTo.pdf"; if (File.Exists(pdf_path)) - Process.Start(pdf_path); + System.Diagnostics.Process.Start(pdf_path); else MessageBox.Show("Missing manual. Try to repair via update", "HowTo.pdf not found"); } - private void youTubeVideoToolStripMenuItem_Click(object sender, EventArgs e) - { - Process.Start(Utilities.Web_Utilities.External.linkYoutubeTutorial); + private void youTubeVideoToolStripMenuItem_Click(object sender, EventArgs e) { + System.Diagnostics.Process.Start(Utilities.Web_Utilities.External.linkYoutubeTutorial); } //Downloads - private void checkGitHubRelesesToolStripMenuItem_Click(object sender, EventArgs e) - { - Process.Start(Utilities.Web_Utilities.External.linkGithubReleases); + private void checkGitHubRelesesToolStripMenuItem_Click(object sender, EventArgs e) { + System.Diagnostics.Process.Start(Utilities.Web_Utilities.External.linkGithubReleases); } - private void checkTMPForumToolStripMenuItem_Click(object sender, EventArgs e) - { - Process.Start(Utilities.Web_Utilities.External.linkTMPforum); + private void checkTMPForumToolStripMenuItem_Click(object sender, EventArgs e) { + System.Diagnostics.Process.Start(Utilities.Web_Utilities.External.linkTMPforum); } - private void checkSCSForumToolStripMenuItem_Click(object sender, EventArgs e) - { - Process.Start(Utilities.Web_Utilities.External.linkSCSforum); + private void checkSCSForumToolStripMenuItem_Click(object sender, EventArgs e) { + System.Diagnostics.Process.Start(Utilities.Web_Utilities.External.linkSCSforum); } - private void latestStableToolStripMenuItem_Click(object sender, EventArgs e) - { + private void latestStableToolStripMenuItem_Click(object sender, EventArgs e) { FormCheckUpdates FormWindow = new FormCheckUpdates("check"); FormWindow.ShowDialog(); } @@ -165,8 +151,7 @@ private void latestStableToolStripMenuItem_Click(object sender, EventArgs e) //Menu controls End //Form methods - private void ToggleControlsAccess(bool _state) - { + private void ToggleControlsAccess(bool _state) { //Main Save controls buttonMainWriteSave.Enabled = _state; buttonMainWriteSave.Visible = _state; @@ -174,16 +159,14 @@ private void ToggleControlsAccess(bool _state) buttonMainCloseSave.Visible = _state; //Main tabs - foreach (TabPage tp in tabControlMain.TabPages) - tp.Enabled = _state; + foreach (TabPage tp in tabControlMain.TabPages) + tp.Enabled = _state; //Profile - for (int i = 0; i < 6; i++) - { + for (int i = 0; i < 6; i++) { Control[] tmp = this.Controls.Find("profileSkillsPanel" + i.ToString(), true); - if (tmp[0] != null) - { + if (tmp[0] != null) { Bitmap bgimg = new Bitmap(SkillImgS[i], 64, 64); if (_state) @@ -194,8 +177,7 @@ private void ToggleControlsAccess(bool _state) } } - private void ToggleMainControlsAccess(bool _state) - { + private void ToggleMainControlsAccess(bool _state) { radioButtonMainGameSwitchETS.Enabled = _state; radioButtonMainGameSwitchATS.Enabled = _state; @@ -217,16 +199,14 @@ private void ToggleMainControlsAccess(bool _state) CheckSaveControls(); } - private void CheckSaveControls() - { + private void CheckSaveControls() { // Root DataRowView drv = (DataRowView)comboBoxRootFolders.SelectedItem; Font loadButtonFont = buttonMainLoadSave.Font; // Change Load button properties based on Profile type - if (drv["ProfileType"].ToString() == "steam") - { + if (drv["ProfileType"].ToString() == "steam") { buttonMainLoadSave.Enabled = false; buttonMainLoadSave.Text = ResourceManagerMain.GetString(buttonMainLoadSave.Name + "SteamCloud"); // Disable Steam Cloud @@ -236,9 +216,7 @@ private void CheckSaveControls() SteamSelectedToggler = false; SteamSelectedTimer.Start(); SteamSelectedTimer.Enabled = true; - } - else - { + } else { buttonMainLoadSave.Enabled = true; buttonMainLoadSave.Text = ResourceManagerMain.GetString(buttonMainLoadSave.Name); // Load @@ -275,29 +253,25 @@ private void CheckSaveControls() } //Main part controls - + //Game select - public void ToggleGame_Click(object sender, EventArgs e) - { + public void ToggleGame_Click(object sender, EventArgs e) { if (radioButtonMainGameSwitchETS.Checked) - ToggleGame("ETS2"); + ToggleGame(Globals.SupportedGames.Get("ETS2")); else - ToggleGame("ATS"); + ToggleGame(Globals.SupportedGames.Get("ATS")); FillRootFoldersPaths(); // Populate with appropriate root folders } - - public void ToggleGame(string _game) - { - if (tempSavefileInMemory != null) - { - DialogResult result = MessageBox.Show("Savefile not saved." + Environment.NewLine + "Do you want to discard changes and switch game type?", "Switching game", + private static bool ShownUnsupportedMessage = false; + public void ToggleGame(SupportedGame _game) { + if (tempSavefileInMemory != null) { + DialogResult result = MessageBox.Show("Savefile not saved." + Environment.NewLine + "Do you want to discard changes and switch game type?", "Switching game", MessageBoxButtons.YesNo); if (result == DialogResult.No) return; - else - { + else { buttonMainDecryptSave.Enabled = true; ToggleControlsAccess(false); @@ -306,45 +280,54 @@ public void ToggleGame(string _game) } } - GameType = _game; + if (!ShownUnsupportedMessage) { + if (!_game.IsSupported.HasValue || !_game.IsSupported.Value) { + //var sb = new StringBuilder($"Your {_game.Name} version is currently not supported by this tool") + // .AppendLine().AppendLine() + // .AppendLine($"Installed Game Version: {_game.Version.ToString()}") + // .AppendLine() + // .AppendLine($"Currently Supported Versions: {_game.SupportedGameVersionString}"); + var result = MessageBox.Show(ResourceManagerMain.GetString("unsupportedGameVersionText").Format(_game.Name, _game.Version, _game.SupportedGameVersionString), + ResourceManagerMain.GetString("unsupportedGameVersionTitle").Format(_game.Type, _game.Version), + buttons: MessageBoxButtons.OKCancel, icon: MessageBoxIcon.Warning); + ShownUnsupportedMessage = true; + if (result != DialogResult.OK) return; + } + } + + SelectedGame = _game; } - private void buttonMainAddCustomFolder_Click(object sender, EventArgs e) - { + private void buttonMainAddCustomFolder_Click(object sender, EventArgs e) { FormAddCustomFolder FormWindow = new FormAddCustomFolder(); FormWindow.ShowDialog(); } - + //Profile list - private void buttonRefreshAll_Click(object sender, EventArgs e) - { + private void buttonRefreshAll_Click(object sender, EventArgs e) { FillRootFoldersPaths(); // RePopulate root folders } - private void buttonProfilesAndSavesEditProfile_Click(object sender, EventArgs e) - { + private void buttonProfilesAndSavesEditProfile_Click(object sender, EventArgs e) { FormProfileEditor FormWindow = new FormProfileEditor(); FormWindow.ParentForm = this; DialogResult t = FormWindow.ShowDialog(); - if (t != DialogResult.Cancel) - { + if (t != DialogResult.Cancel) { FillRootFoldersPaths(); // RePopulate root folders } } - - private void buttonProfilesAndSavesRestoreBackup_Click(object sender, EventArgs e) - { + + private void buttonProfilesAndSavesRestoreBackup_Click(object sender, EventArgs e) { //Set variables - string SiiSavePath = Globals.SelectedSavePath + @"\game.sii", + string SiiSavePath = Globals.SelectedSavePath + @"\game.sii", SiiSavePathBackup = Globals.SelectedSavePath + @"\game_backup.sii"; //If backups exist - if (File.Exists(SiiSavePathBackup)) - { + if (File.Exists(SiiSavePathBackup)) { DialogResult dr = MessageBox.Show("Restoring from backup file will overwrite existing save file." + Environment.NewLine + - "Select: Yes - Overwrite | No - Swap files | Cancel - Abort restoring.", + "Select: Yes - Overwrite | No - Swap files | Cancel - Abort restoring.", "Restoring Save file from Backup", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); //If Cancel - exit Method if (dr == DialogResult.Cancel) @@ -354,30 +337,25 @@ private void buttonProfilesAndSavesRestoreBackup_Click(object sender, EventArgs string SiiInfoPath = Globals.SelectedSavePath + @"\info.sii", SiiInfoPathBackup = Globals.SelectedSavePath + @"\info_backup.sii"; - if (dr == DialogResult.No) - { + if (dr == DialogResult.No) { //Swap SwapFiles(SiiSavePath, SiiSavePathBackup); if (File.Exists(SiiInfoPathBackup)) SwapFiles(SiiInfoPath, SiiInfoPathBackup); - } - else - { + } else { //Overwrite File.Copy(SiiSavePathBackup, SiiSavePath, true); File.Delete(SiiSavePathBackup); - if (File.Exists(SiiInfoPathBackup)) - { + if (File.Exists(SiiInfoPathBackup)) { File.Copy(SiiInfoPathBackup, SiiInfoPath, true); File.Delete(SiiInfoPathBackup); - } + } } //Swap Files Function - void SwapFiles(string _firstFile, string _secondFile) - { + void SwapFiles(string _firstFile, string _secondFile) { string tmpFile = Directory.GetParent(_firstFile).FullName + "\\tmp"; File.Copy(_firstFile, tmpFile, true); @@ -390,8 +368,7 @@ void SwapFiles(string _firstFile, string _secondFile) } //Buttons - private void buttonDecryptSave_Click(object sender, EventArgs e) - { + private void buttonDecryptSave_Click(object sender, EventArgs e) { //Initial State Setup SetDefaultValues(false); ClearFormControls(true); @@ -406,8 +383,7 @@ private void buttonDecryptSave_Click(object sender, EventArgs e) string[] file = NewDecodeFile(SiiSavePath); //Check result - if (file != null) - { + if (file != null) { IO_Utilities.LogWriter("Backing up file to: " + Globals.SelectedSavePath + @"\game_backup.sii"); //Backup @@ -417,31 +393,28 @@ private void buttonDecryptSave_Click(object sender, EventArgs e) File.WriteAllLines(SiiSavePath, file); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Clear); - } - else + } else UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_decode_file"); //Unlock controls ToggleMainControlsAccess(true); buttonMainDecryptSave.Enabled = false; - ToggleGame(GameType); + ToggleGame(SelectedGame); //GC GC.Collect(); //GC.WaitForPendingFinalizers(); } - private void buttonOpenSaveFolder_Click(object sender, EventArgs e) - { + private void buttonOpenSaveFolder_Click(object sender, EventArgs e) { //Open Save Folder if (Directory.Exists(Globals.SavesHex[comboBoxSaves.SelectedIndex])) - Process.Start(Globals.SavesHex[comboBoxSaves.SelectedIndex]); + System.Diagnostics.Process.Start(Globals.SavesHex[comboBoxSaves.SelectedIndex]); } internal static BackgroundWorker workerLoadSaveFile; - private void LoadSaveFile_Click(object sender, EventArgs e) - { + private void LoadSaveFile_Click(object sender, EventArgs e) { //Initial State Setup ToggleMainControlsAccess(false); ToggleControlsAccess(false); @@ -473,8 +446,7 @@ private void LoadSaveFile_Click(object sender, EventArgs e) workerLoadSaveFile.RunWorkerAsync(); } - private void buttonMainCloseSave_Click(object sender, EventArgs e) - { + private void buttonMainCloseSave_Click(object sender, EventArgs e) { ToggleControlsAccess(false); SetDefaultValues(false); @@ -485,13 +457,10 @@ private void buttonMainCloseSave_Click(object sender, EventArgs e) GC.WaitForPendingFinalizers(); } - private void buttonWriteSave_Click(object sender, EventArgs e) - { - if (extraDrivers.Count() > 0 || extraVehicles.Count() > 0) - { + private void buttonWriteSave_Click(object sender, EventArgs e) { + if (extraDrivers.Count() > 0 || extraVehicles.Count() > 0) { DialogResult res = MessageBox.Show("Do you want to save Drivers and Trucks from sold garages?", "Attention! Loosing content", MessageBoxButtons.YesNo); - if (res == DialogResult.Yes) - { + if (res == DialogResult.Yes) { FormGaragesSoldContent testDialog = new FormGaragesSoldContent(); testDialog.ShowDialog(this); } @@ -513,8 +482,7 @@ private void buttonWriteSave_Click(object sender, EventArgs e) } //Profile and Saves groupbox - private void checkBoxProfileBackups_CheckedChanged(object sender, EventArgs e) - { + private void checkBoxProfileBackups_CheckedChanged(object sender, EventArgs e) { comboBoxRootFolders.SelectedIndexChanged -= comboBoxRootFolders_SelectedIndexChanged; string sv = comboBoxRootFolders.SelectedValue.ToString(); @@ -523,108 +491,45 @@ private void checkBoxProfileBackups_CheckedChanged(object sender, EventArgs e) int index = FindByValue(comboBoxRootFolders, sv); // try find previous value - if (index > -1) - { + if (index > -1) { comboBoxRootFolders.SelectedValue = sv; // if exists - set as selected comboBoxRootFolders.SelectedIndexChanged += comboBoxRootFolders_SelectedIndexChanged; - } - else - { + } else { comboBoxRootFolders.SelectedIndexChanged += comboBoxRootFolders_SelectedIndexChanged; comboBoxRootFolders.SelectedIndex = 0; // if not - select first in the list } } - public void FillRootFoldersPaths() - { - try - { - string MyDocumentsPath = "", - RemoteUserdataDirectory = "", - SteamError = "", MyDocError = ""; - + public void FillRootFoldersPaths() { + try { + string SteamError = "", MyDocError = ""; bool SteamFolderExist = false, MyDocFolderExist = true; - try - { - //string SteamInstallPath = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Valve\Steam", "InstallPath", null).ToString(); - string SteamInstallPath = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Valve\Steam", "InstallPath", null).ToString(); - - if (SteamInstallPath == null) - { - //unknown steam path + try { + //Globals.SteamDir = new DirectoryInfo(new SteamGameLocator().getSteamInstallLocation()); // Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Valve\Steam", "InstallPath", null).ToString(); //string Globals.SteamDir = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Valve\Steam", "InstallPath", null).ToString(); + if (Globals.SteamDir is null || !Globals.SteamDir.Exists) { //unknown steam path SteamError = "Can not detect Steam install folder."; - } - else - { - string SteamCloudPath = SteamInstallPath + @"\userdata"; - if (!Directory.Exists(SteamCloudPath)) - { - //no userdata - SteamError = "No userdata in Steam folder."; - } - else - { - string[] userdatadirectories = Directory.GetDirectories(SteamCloudPath); - - if (userdatadirectories.Length == 0) - { - //no steam user directories - SteamError = "No user folders found in Steam folder."; - } - else - { - //DateTime lastHigh = DateTime.Now; - - string[] CurrentUserDirs = Directory.GetDirectories(SteamCloudPath).OrderByDescending(f => new FileInfo(f).LastWriteTime).ToArray(); - string CurrentUserDir = ""; - - foreach (string tmpDir in CurrentUserDirs) - { - string tmp = Path.GetFileName(tmpDir); - - if (tmp.All(Char.IsDigit)) - { - CurrentUserDir = tmpDir; - break; - } - } - - string GameID = ""; - if (GameType == "ETS2") - GameID = @"\227300"; //ETS2 - else - GameID = @"\270880"; //ATS - - if (!Directory.Exists(CurrentUserDir + GameID)) - { - SteamError = "Game folder for - " + GameType + "game in Steam folder does not exist."; - } - else - { - RemoteUserdataDirectory = CurrentUserDir + GameID + @"\remote"; - SteamFolderExist = true; - } + } else { + var steamCloudDir = Globals.GetLatestSteamUserDataDir(); + if (steamCloudDir is null || !steamCloudDir.Exists) { //no userdata + SteamError = "No userdata in Steam folder or No user folders found in Steam folder."; + } else { + if (!SelectedGame.SteamRemoteDir.Exists) { + SteamError = "Game folder for - " + SelectedGame.Type + "game in Steam folder does not exist."; + } else { + SteamFolderExist = true; } } } - } - catch - { } - - if (!SteamFolderExist) - IO_Utilities.LogWriter(SteamError); - // + } catch { } - MyDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + dictionaryProfiles[GameType]; + if (!SteamFolderExist) IO_Utilities.LogWriter(SteamError); - if (!Directory.Exists(MyDocumentsPath)) - { - MyDocError = "Folder in \"My documents\" for - " + GameType + " game does not exist."; + if (!SelectedGame.DocumentsDir.Exists) { + MyDocError = "Folder in \"My documents\" for - " + SelectedGame.Type + " game does not exist."; MyDocFolderExist = false; IO_Utilities.LogWriter(MyDocError); } - // //Setup combobox DataTable DataTable combDT = new DataTable(); @@ -638,22 +543,19 @@ public void FillRootFoldersPaths() combDT.Columns.Add(dc); //Collect Root folders - List tempList = new List(); + List tempList = new(); // Standart folders if (MyDocFolderExist || SteamFolderExist) - if (checkBoxProfilesAndSavesProfileBackups.Checked) - { + if (checkBoxProfilesAndSavesProfileBackups.Checked) { //If backups selected //My docs Profiles if (MyDocFolderExist) - foreach (string folder in Directory.GetDirectories(MyDocumentsPath)) - { - if (Path.GetFileName(folder).StartsWith("profiles")) //Documents + foreach (var folder in SelectedGame.DocumentsDir.GetDirectories()) { + if (folder.Name.StartsWith("profiles")) //Documents { - if (Directory.Exists(folder) && Directory.GetDirectories(folder).Count() > 0) - { - combDT.Rows.Add(folder, "[L] " + Path.GetFileName(folder), "local"); + if (folder.Exists && folder.GetDirectories().Count() > 0) { + combDT.Rows.Add(folder, "[L] " + folder.Name, "local"); tempList.Add(folder); } } @@ -661,77 +563,64 @@ public void FillRootFoldersPaths() //Steam Profiles if (SteamFolderExist) - foreach (string folder in Directory.GetDirectories(RemoteUserdataDirectory)) - { - if (Path.GetFileName(folder).StartsWith("profiles")) //Steam + foreach (var folder in SelectedGame.SteamUserDataDir.GetDirectories()) { + if (folder.Name.StartsWith("profiles")) //Steam { - if (Directory.Exists(folder) && Directory.GetDirectories(folder).Count() > 0) - { - combDT.Rows.Add(folder, "[S] " + Path.GetFileName(folder), "steam"); + if (folder.Exists && folder.GetDirectories().Count() > 0) { + combDT.Rows.Add(folder, "[S] " + folder.Name, "steam"); tempList.Add(folder); } } } - } - else - { + } else { //Without backups - string folder = ""; + DirectoryInfo folder = null; //My docs Profiles - if (MyDocFolderExist) - { - folder = MyDocumentsPath + @"\profiles"; + if (MyDocFolderExist) { + folder = SelectedGame.DocumentsDir.Combine("profiles"); - if (Directory.Exists(folder) && Directory.GetDirectories(folder).Count() > 0) - { + if (folder.Exists && folder.GetDirectories().Count() > 0) { combDT.Rows.Add(folder, "[L] profiles", "local"); tempList.Add(folder); } } //Steam Profiles - if (SteamFolderExist) - { - folder = RemoteUserdataDirectory + @"\profiles"; + if (SteamFolderExist) { + folder = SelectedGame.SteamRemoteDir.Combine("profiles"); - if (Directory.Exists(folder) && Directory.GetDirectories(folder).Count() > 0) - { + if (folder.Exists && folder.GetDirectories().Count() > 0) { combDT.Rows.Add(folder, "[S] profiles", "steam"); tempList.Add(folder); } } } - + // Custom folders int cpIndex = 0; - if (ProgSettingsV.CustomPaths.Keys.Contains(GameType)) - foreach (string CustPath in ProgSettingsV.CustomPaths[GameType]) - { + if (ProgSettingsV.CustomPaths.Keys.Contains(SelectedGame.Type)) + foreach (string CustPath in ProgSettingsV.CustomPaths[SelectedGame.Type]) { cpIndex++; - if (Directory.Exists(CustPath)) - { - if (Directory.Exists(CustPath + @"\profiles")) - { + var custDir = new DirectoryInfo(CustPath); + if (custDir.Exists) { + if (custDir.Combine("profiles").Exists) { combDT.Rows.Add(CustPath + @"\profiles", "[C] Custom path " + cpIndex.ToString(), "custom"); - tempList.Add(CustPath + @"\profiles"); - } - else - { + tempList.Add(custDir.Combine("profiles")); + } else { combDT.Rows.Add(CustPath, "[C] Custom path " + cpIndex.ToString(), "custom"); - tempList.Add(CustPath); + tempList.Add(custDir); } } } - if (!MyDocFolderExist && !SteamFolderExist) - { - IO_Utilities.LogWriter("Standart Save folders does not exist for this game - " + GameType + "." + Environment.NewLine + MyDocError + " " + SteamError + Environment.NewLine + + if (!MyDocFolderExist && !SteamFolderExist) { + IO_Utilities.LogWriter("Standart Save folders does not exist for this game - " + SelectedGame.Type + "." + Environment.NewLine + MyDocError + " " + SteamError + Environment.NewLine + "Check installation. Start game first (Steam)."); } //Save Root paths - Globals.ProfilesPaths = tempList.ToArray(); + Globals.ProfileDirs = tempList; //Populate combobox comboBoxRootFolders.ValueMember = "ProfileID"; @@ -739,32 +628,26 @@ public void FillRootFoldersPaths() comboBoxRootFolders.DataSource = combDT; - if (comboBoxRootFolders.Items.Count > 0) - { + if (comboBoxRootFolders.Items.Count > 0) { comboBoxRootFolders.Enabled = true; - } - else - { + } else { comboBoxRootFolders.SelectedIndex = -1; comboBoxRootFolders.Enabled = false; comboBoxProfiles.Enabled = false; comboBoxSaves.Enabled = false; - MessageBox.Show("Standart Save folders does not exist for this game - " + GameType + "." + Environment.NewLine + + MessageBox.Show("Standart Save folders does not exist for this game - " + SelectedGame.Type + "." + Environment.NewLine + MyDocError + Environment.NewLine + SteamError + Environment.NewLine + "Check game installation, Start game and Refresh profiles list or Add Custom paths."); } - } - catch - { + } catch { IO_Utilities.ErrorLogWriter("Populating Root Profiles failed"); } } - private void comboBoxRootFolders_SelectedIndexChanged(object sender, EventArgs e) - { - if (!Directory.Exists(Globals.ProfilesPaths[comboBoxRootFolders.SelectedIndex])) + private void comboBoxRootFolders_SelectedIndexChanged(object sender, EventArgs e) { + if (!Globals.ProfileDirs[comboBoxRootFolders.SelectedIndex].Exists) return; // Disable save\profile control buttons @@ -777,8 +660,7 @@ private void comboBoxRootFolders_SelectedIndexChanged(object sender, EventArgs e } - private void comboBoxRootFolders_DropDown(object sender, EventArgs e) - { + private void comboBoxRootFolders_DropDown(object sender, EventArgs e) { comboBoxRootFolders.SelectedIndexChanged -= comboBoxRootFolders_SelectedIndexChanged; string sv = comboBoxRootFolders.SelectedValue.ToString(); //save selected value @@ -787,30 +669,24 @@ private void comboBoxRootFolders_DropDown(object sender, EventArgs e) int index = FindByValue(comboBoxRootFolders, sv); // try find previous value - if (index > -1) - { + if (index > -1) { comboBoxRootFolders.SelectedValue = sv; // if exists - set as selected comboBoxRootFolders.SelectedIndexChanged += comboBoxRootFolders_SelectedIndexChanged; - } - else - { + } else { comboBoxRootFolders.SelectedIndexChanged += comboBoxRootFolders_SelectedIndexChanged; comboBoxRootFolders.SelectedIndex = 0; // if not - select first in the list } } - public void FillProfiles() - { - try - { - if (!Directory.Exists(Globals.ProfilesPaths[comboBoxRootFolders.SelectedIndex])) - { + public void FillProfiles() { + try { + if (!Globals.ProfileDirs[comboBoxRootFolders.SelectedIndex].Exists) { FillRootFoldersPaths(); return; } - string ProfileName = "", - SelectedFolder = comboBoxRootFolders.SelectedValue.ToString(); + string ProfileName = "", + SelectedFolder = comboBoxRootFolders.SelectedValue.ToString(); //Setup combobox DataTable DataTable combDT = new DataTable(); @@ -825,22 +701,18 @@ public void FillProfiles() combDT.Columns.Add(dcDisplay); //Filter Profile folders - Globals.ProfilesHex = Directory.GetDirectories(SelectedFolder).OrderByDescending(f => new FileInfo(f).LastWriteTime).ToList(); + Globals.ProfilesHex = Directory.GetDirectories(SelectedFolder).OrderByDescending(f => new FileInfo(f).LastWriteTime).ToList(); // todo: List - if (Globals.ProfilesHex.Count > 0) - { + if (Globals.ProfilesHex.Count > 0) { List NewProfileHex = new List(); - foreach (string profilePath in Globals.ProfilesHex) - { + foreach (string profilePath in Globals.ProfilesHex) { string profileFolder = profilePath.Substring(profilePath.LastIndexOf(@"\") + 1); - if (!profileFolder.Contains(" ") && Directory.Exists(profilePath + @"\save")) - { - ProfileName = Utilities.TextUtilities.FromHexToString(Path.GetFileName(profilePath)); + if (!profileFolder.Contains(" ") && Directory.Exists(profilePath + @"\save")) { + ProfileName = TextUtilities.FromHexToString(Path.GetFileName(profilePath)); - if (ProfileName != null) - { + if (ProfileName != null) { combDT.Rows.Add(profilePath, ProfileName); NewProfileHex.Add(profilePath); } @@ -850,16 +722,13 @@ public void FillProfiles() Globals.ProfilesHex = NewProfileHex; // - if (combDT.Rows.Count > 0) - { + if (combDT.Rows.Count > 0) { comboBoxProfiles.Enabled = true; buttonProfilesAndSavesEditProfile.Enabled = true; UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Clear); - } - else - { + } else { combDT.Rows.Add("null"); comboBoxProfiles.Enabled = false; @@ -874,9 +743,7 @@ public void FillProfiles() comboBoxProfiles.DisplayMember = "DisplayMember"; comboBoxProfiles.DataSource = combDT; - } - else - { + } else { comboBoxProfiles.Enabled = false; comboBoxSaves.Enabled = false; @@ -885,53 +752,38 @@ public void FillProfiles() MessageBox.Show("Please select another folder", "No valid profiles found"); } - } - catch - { + } catch { IO_Utilities.ErrorLogWriter("Populating Profiles list failed"); } } - private void comboBoxProfiles_SelectedIndexChanged(object sender, EventArgs e) - { - if (Globals.ProfilesHex.Count != 0) - { - try - { + private void comboBoxProfiles_SelectedIndexChanged(object sender, EventArgs e) { + if (Globals.ProfilesHex.Count != 0) { + try { string AvatarPath = Globals.ProfilesHex[comboBoxProfiles.SelectedIndex] + @"\avatar.png"; - if (File.Exists(AvatarPath)) - { + if (File.Exists(AvatarPath)) { Bitmap SourceImg = new Bitmap(AvatarPath); Rectangle AvatarArea = new Rectangle(0, 0, 95, 95); Bitmap CroppedImg = SourceImg.Clone(AvatarArea, SourceImg.PixelFormat); pictureBoxProfileAvatar.Image = CroppedImg; - } - else - { + } else { pictureBoxProfileAvatar.Image = MainIcons[0]; // placeholder icon } - } - catch - { + } catch { pictureBoxProfileAvatar.Image = MainIcons[0]; // placeholder icon } - try - { + try { //Read profile data LoadProfileDataFile(Globals.ProfilesHex[comboBoxProfiles.SelectedIndex] + @"\profile.sii"); // Profile file path //Add tooltip to Avatar toolTipMain.SetToolTip(pictureBoxProfileAvatar, MainSaveFileProfileData.getProfileSummary(PlayerLevelNames)); // Profile stats - } - catch - { } - } - else - { - pictureBoxProfileAvatar.Image = null; + } catch { } + } else { + pictureBoxProfileAvatar.Image = null; //Add tooltip to Avatar toolTipMain.SetToolTip(pictureBoxProfileAvatar, ""); } @@ -940,8 +792,7 @@ private void comboBoxProfiles_SelectedIndexChanged(object sender, EventArgs e) FillProfileSaves(); // Populate Save folders list } - private void comboBoxProfiles_DropDown(object sender, EventArgs e) - { + private void comboBoxProfiles_DropDown(object sender, EventArgs e) { comboBoxProfiles.SelectedIndexChanged -= comboBoxProfiles_SelectedIndexChanged; // remove event to prevent unnecessary refreshing string sv = comboBoxProfiles.SelectedValue.ToString(); //save selected value @@ -950,38 +801,31 @@ private void comboBoxProfiles_DropDown(object sender, EventArgs e) int index = FindByValue(comboBoxProfiles, sv); // try find previous value - if (index > -1) - { + if (index > -1) { comboBoxProfiles.SelectedValue = sv; // if exists - set as selected comboBoxProfiles.SelectedIndexChanged += comboBoxProfiles_SelectedIndexChanged; // restore event - } - else - { + } else { comboBoxProfiles.SelectedIndexChanged += comboBoxProfiles_SelectedIndexChanged; // restore event comboBoxProfiles.SelectedIndex = 0; // if not - select first in the list } } - public void FillProfileSaves() - { - try - { - if (Globals.ProfilesHex.Count != 0 && !Directory.Exists(Globals.ProfilesHex[comboBoxProfiles.SelectedIndex])) - { + public void FillProfileSaves() { + try { + if (Globals.ProfilesHex.Count != 0 && !Directory.Exists(Globals.ProfilesHex[comboBoxProfiles.SelectedIndex])) { FillProfiles(); return; } Globals.SavesHex = new string[0]; - if (Globals.ProfilesHex.Count != 0) - { + if (Globals.ProfilesHex.Count != 0) { string SelectedSaveFolder = Globals.ProfilesHex[comboBoxProfiles.SelectedIndex] + @"\save"; - if (Directory.Exists(SelectedSaveFolder)) - Globals.SavesHex = Directory.GetDirectories(SelectedSaveFolder).OrderByDescending(f => new FileInfo(f).LastWriteTime).ToArray(); - else - Globals.SavesHex = new string[0]; + if (Directory.Exists(SelectedSaveFolder)) + Globals.SavesHex = Directory.GetDirectories(SelectedSaveFolder).OrderByDescending(f => new FileInfo(f).LastWriteTime).ToArray(); + else + Globals.SavesHex = new string[0]; } //Setup combobox DataTable @@ -997,52 +841,41 @@ public void FillProfileSaves() combDT.Columns.Add(dcDisplay); //if save folder contains any folders - if (Globals.SavesHex.Length > 0) - { + if (Globals.SavesHex.Length > 0) { bool NotANumber = false; //Check if any of the initial folders is a valid save folder - foreach (string saveFolder in Globals.SavesHex) - { + foreach (string saveFolder in Globals.SavesHex) { if (!File.Exists(saveFolder + @"\game.sii") || !File.Exists(saveFolder + @"\info.sii")) continue; //if folder does not contains essential files - skip it string[] folders = saveFolder.Split(new string[] { "\\" }, StringSplitOptions.None); - if (folders.Last().Contains(' ')) - { + if (folders.Last().Contains(' ')) { string tmpName = GetCustomSaveFilename(saveFolder); if (tmpName != "") combDT.Rows.Add(saveFolder, tmpName); else combDT.Rows.Add(saveFolder, "NoName ( " + folders.Last() + " )"); - } - else - { - foreach (char c in folders.Last()) - { - if (c < '0' || c > '9') - { + } else { + foreach (char c in folders.Last()) { + if (c < '0' || c > '9') { NotANumber = true; break; } } - if (NotANumber) - { + if (NotANumber) { string[] namearr = folders.Last().Split(new char[] { '_' }); string ProfileName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(namearr[0]); - for (int i = 1; i < namearr.Length; i++) - { + for (int i = 1; i < namearr.Length; i++) { ProfileName += " " + namearr[i]; } combDT.Rows.Add(saveFolder, "- " + ProfileName + " -"); - } - else - { + } else { string tmpName = GetCustomSaveFilename(saveFolder); if (tmpName != "") @@ -1057,16 +890,13 @@ public void FillProfileSaves() } //Check if save folders was found - if (combDT.Rows.Count > 0) - { + if (combDT.Rows.Count > 0) { comboBoxSaves.Enabled = true; buttonProfilesAndSavesOpenSaveFolder.Enabled = true; buttonMainDecryptSave.Enabled = true; UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Clear); - } - else - { + } else { combDT.Rows.Add("null"); //Add fake item to indicate zero saves found comboBoxSaves.Enabled = false; @@ -1081,9 +911,8 @@ public void FillProfileSaves() comboBoxSaves.DisplayMember = "DisplayMember"; comboBoxSaves.DataSource = combDT; - } - else //if zero folders found in "save" folder - { + } else //if zero folders found in "save" folder + { combDT.Rows.Add("null"); //Add fake item to indicate zero saves found comboBoxSaves.ValueMember = "savePath"; @@ -1099,15 +928,12 @@ public void FillProfileSaves() UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_No Save file folders found"); } - } - catch - { + } catch { IO_Utilities.ErrorLogWriter("Populating Saves list failed"); } } - private void comboBoxSaves_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxSaves_SelectedIndexChanged(object sender, EventArgs e) { // Update save path Globals.SelectedSavePath = Globals.SavesHex[comboBoxSaves.SelectedIndex]; Globals.SelectedSave = Globals.SelectedSavePath.Split(new string[] { "\\" }, StringSplitOptions.None).Last(); @@ -1121,8 +947,7 @@ private void comboBoxSaves_SelectedIndexChanged(object sender, EventArgs e) CheckSaveControls(); } - private void comboBoxSaves_DropDown(object sender, EventArgs e) - { + private void comboBoxSaves_DropDown(object sender, EventArgs e) { comboBoxSaves.SelectedIndexChanged -= new EventHandler(comboBoxSaves_SelectedIndexChanged); string sv = comboBoxSaves.SelectedValue.ToString(); //save selected value @@ -1131,13 +956,10 @@ private void comboBoxSaves_DropDown(object sender, EventArgs e) int index = FindByValue(comboBoxSaves, sv); // try find previous value - if (index > -1) - { + if (index > -1) { comboBoxSaves.SelectedValue = sv; // if exists - set as selected comboBoxSaves.SelectedIndexChanged += new EventHandler(comboBoxSaves_SelectedIndexChanged); - } - else - { + } else { comboBoxSaves.SelectedIndexChanged += new EventHandler(comboBoxSaves_SelectedIndexChanged); comboBoxSaves.SelectedIndex = 0; // if not - select first in the list } diff --git a/TS SE Tool/Forms/FormModManager.Designer.cs b/TS SE Tool/Forms/FormModManager.Designer.cs new file mode 100644 index 00000000..de5c623d --- /dev/null +++ b/TS SE Tool/Forms/FormModManager.Designer.cs @@ -0,0 +1,151 @@ +namespace TS_SE_Tool.Forms { + partial class FormModManager { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormModManager)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.reloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openPluginsDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tableMods = new System.Windows.Forms.DataGridView(); + this.modContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toggleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.showDebugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modEnabled = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.modName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tableMods)).BeginInit(); + this.modContextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.reloadToolStripMenuItem, + this.openPluginsDirectoryToolStripMenuItem}); + resources.ApplyResources(this.menuStrip1, "menuStrip1"); + this.menuStrip1.Name = "menuStrip1"; + // + // reloadToolStripMenuItem + // + this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem"; + resources.ApplyResources(this.reloadToolStripMenuItem, "reloadToolStripMenuItem"); + this.reloadToolStripMenuItem.Click += new System.EventHandler(this.reloadToolStripMenuItem_Click); + // + // openPluginsDirectoryToolStripMenuItem + // + this.openPluginsDirectoryToolStripMenuItem.Name = "openPluginsDirectoryToolStripMenuItem"; + resources.ApplyResources(this.openPluginsDirectoryToolStripMenuItem, "openPluginsDirectoryToolStripMenuItem"); + this.openPluginsDirectoryToolStripMenuItem.Click += new System.EventHandler(this.openModsDirectoryToolStripMenuItem_Click); + // + // tableMods + // + this.tableMods.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.tableMods.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.tableMods.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.modEnabled, + this.modName}); + resources.ApplyResources(this.tableMods, "tableMods"); + this.tableMods.Name = "tableMods"; + this.tableMods.RowHeadersVisible = false; + this.tableMods.CellContextMenuStripNeeded += new System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventHandler(this.tableMods_CellContextMenuStripNeeded); + // + // modContextMenu + // + this.modContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toggleToolStripMenuItem, + this.deleteToolStripMenuItem, + this.toolStripSeparator1, + this.showDebugToolStripMenuItem}); + this.modContextMenu.Name = "pluginContextMenu"; + resources.ApplyResources(this.modContextMenu, "modContextMenu"); + // + // toggleToolStripMenuItem + // + this.toggleToolStripMenuItem.Name = "toggleToolStripMenuItem"; + resources.ApplyResources(this.toggleToolStripMenuItem, "toggleToolStripMenuItem"); + this.toggleToolStripMenuItem.Click += new System.EventHandler(this.toggleToolStripMenuItem_Click); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + resources.ApplyResources(this.deleteToolStripMenuItem, "deleteToolStripMenuItem"); + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + // + // showDebugToolStripMenuItem + // + this.showDebugToolStripMenuItem.Name = "showDebugToolStripMenuItem"; + resources.ApplyResources(this.showDebugToolStripMenuItem, "showDebugToolStripMenuItem"); + this.showDebugToolStripMenuItem.Click += new System.EventHandler(this.showDebugToolStripMenuItem_Click); + // + // modEnabled + // + resources.ApplyResources(this.modEnabled, "modEnabled"); + this.modEnabled.Name = "modEnabled"; + // + // modName + // + resources.ApplyResources(this.modName, "modName"); + this.modName.Name = "modName"; + // + // FormModManager + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tableMods); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "FormModManager"; + this.Load += new System.EventHandler(this.FormModManager_Load); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tableMods)).EndInit(); + this.modContextMenu.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem openPluginsDirectoryToolStripMenuItem; + private System.Windows.Forms.DataGridView tableMods; + private System.Windows.Forms.ContextMenuStrip modContextMenu; + private System.Windows.Forms.ToolStripMenuItem toggleToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem showDebugToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reloadToolStripMenuItem; + private System.Windows.Forms.DataGridViewCheckBoxColumn modEnabled; + private System.Windows.Forms.DataGridViewTextBoxColumn modName; + } +} \ No newline at end of file diff --git a/TS SE Tool/Forms/FormModManager.aa-ER.resx b/TS SE Tool/Forms/FormModManager.aa-ER.resx new file mode 100644 index 00000000..ac6af749 --- /dev/null +++ b/TS SE Tool/Forms/FormModManager.aa-ER.resx @@ -0,0 +1,1732 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAABAQAAAAQAgAChCAABmFQAAgIAAAAEA + IAAoCAEAjlcAAAAAAAABACAA6BgAALZfAQAoAAAAEAAAACAAAAABACAAAAAAAAAIAAAAAAAAAAAAAAAA + AAAAAAAAAAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAP/q6ur/////////////////////////////////rq6u/y4uLv/e3t7///////// + ////////6urq/wAAAP8AAAD/////////////////////////////////z8/P/5KSkv8jIyP/mJiY//// + //////////////////8AAAD/AAAA//////////////////////////////////r6+v9ubm7/MzMz/ykp + Kf/n5+f/////////////////AAAA/wAAAP////////////////////////////////////////////39 + /f9iYmL/KSkp/+fn5////////////wAAAP8AAAD//////wAAAP8AAAD//////wAAAP//////AAAA/wAA + AP///////f39/2JiYv8oKCj/o6Oj/+Xl5f8AAAD/AAAA//////////////////////////////////// + ///////////////////9/f3/NDQ0/yQkJP9ERET/AAAA/wAAAP//////AAAA//////8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD//////2hoaP9eXl7/7u7u/wAAAP8AAAD///////////////////////// + ///////////////////////////////////39/f/sLCw/+np6f8AAAD/AAAA//////8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD//////wAA + AP//////AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP//////AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/6urq/////////////////////////////////////////////////////////////////+rq + 6v8AAAD/AAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/q6ur//////////////////////////////////////////////////// + ///////////////////Nzc3/ISEh/xYWFv9ycnL/+vr6//////////////////////////////////// + ////////q6ur/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + ///////////////////////////////////Jycn/MDAw/wAAAP+BgYH///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////+4uLj/6Ojo//////9/f3//AAAA/zIyMv////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////////////////////////////////////4aGhv8NDQ3/U1NT/w0NDf8AAAD/MTEx//// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////////// + ////////////////////////////////////////////////////////7e3t/yYmJv8AAAD/AAAA/wAA + AP8CAgL/n5+f////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////8/Pz/5+f + n/+NjY3/Pz8//wAAAP8CAgL/np6e//////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + ///////////////////39/f/R0dH/wAAAP8CAgL/np6e/////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP/////////////////39/f/SEhI/wAAAP8CAgL/np6e//////////////////// + ////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + ///////////////////////////////////////////////////39/f/SEhI/wAAAP8CAgL/nZ2d//// + //////////////////8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP/////////////////39/f/SUlJ/wAA + AP8CAgL/RERE/0tLS/+ampr//v7+/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///39/f/QEBA/wAAAP8AAAD/AAAA/wAAAP+EhIT/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+QkJD/AAAA/wsLC/+Ghob/bGxs/yAgIP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5mZmf8AAAD/IyMj////////////39/f/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP//////7Ozs/xkZGf8BAQH/VVVV/9ra2v//////AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////4ODg/25ubv9WVlb/qKio//// + //8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD//////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/qqqq//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////qqqq/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAAEAAAACAAAAAAQAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACQAAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD9AAAAxQAAACQAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/JCQk/8XFxf/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Q0ND/Xl5e/yMjI/8XFxf/Pz8//5aWlv/5+fn///////////////////////// + ///////////////////////////////////////////////////////////////////9/f3/xcXF/yQk + JP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8XFxf////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3/aWlp/wQEBP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+zs + 7P////////////////////////////////////////////////////////////////////////////// + ///////////////////FxcX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////V1dX/UVFR/wEB + Af8AAAD/AAAA/wAAAP9HR0f//v7+//////////////////////////////////////////////////// + /////////////////////////////////////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////++vr7/AAAA/wAAAP8AAAD/AAAA/76+vv////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+Pj4//f39////////////////////////Pz8/wAAAP8AAAD/AAAA/wAAAP9vb2////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8/Pz/8hISH/pqam//39/f////////////7+/v8DAwP/AAAA/wAA + AP8AAAD/V1dX//////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////n5+f/AgIC/wAAAP80NDT/tbW1/5iY + mP80NDT/AAAA/wAAAP8AAAD/AAAA/2lpaf////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/zIy + Mv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9cXFz///////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+3t7f/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BwcH/7m5 + uf////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5OTk/8EBAT/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8JCQn/ubm5//////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////zs7O/2Bg + YP8gICD/EhIS/yQkJP8FBQX/AAAA/wAAAP8AAAD/AAAA/wkJCf+5ubn///////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////19fX/yAgIP8AAAD/AAAA/wAAAP8AAAD/CQkJ/7i4 + uP///////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////e3t7/ICAg/wAA + AP8AAAD/AAAA/wAAAP8KCgr/uLi4//////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////97e3v8gICD/AAAA/wAAAP8AAAD/AAAA/wkJCf+4uLj///////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD////////////////////////////////////////////e3t7/ISEh/wAA + AP8AAAD/AAAA/wAAAP8JCQn/t7e3//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9/f3/8hISH/AAAA/wAAAP8AAAD/AAAA/wkJCf+3t7f///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA///////////////////////////////////////g4OD/IiIi/wAA + AP8AAAD/AAAA/wAAAP8ICAj/eHh4/5aWlv+Li4v/oaGh/+jo6P////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////9/f3/8iIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwf/eXl5//r6 + +v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////4ODg/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9eXl7//v7+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////a2tr/BgYG/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7Kysv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////ywsLP8AAAD/AAAA/wAAAP8AAAD/AgIC/0BAQP8mJib/AAAA/wAAAP9NTU3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////8YGBj/AAAA/wAAAP8AAAD/LCws/9nZ2f//////+fn5/5GR + kf8UFBT/Hh4e/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////Gxsb/wAAAP8AAAD/AAAA/0pK + Sv//////////////////////7+/v/5CQkP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0pK + Sv8AAAD/AAAA/wAAAP9ERET/////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+1tbX/AAAA/wAAAP8AAAD/BAQE/2VlZf/j4+P//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////2RkZP8AAAD/AAAA/wAAAP8AAAD/CgoK/3p6 + ev/v7+////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////8/Pz/hYWF/w4O + Dv8AAAD/AAAA/wAAAP8QEBD/nZ2d////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////x8fH/t7e3/6Ghof+4uLj/8/Pz/////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/xMTE//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8TExP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//ExMT//f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/8TExP8jIyP/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxAAAACMAAADEAAAA/QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAA + ACOAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAASgAAACAAAAAAAEAAAEAIAAAAAAAAAACAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAADDAAAA+AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAwwAAAFIAAAAAAAAAAAAAAAAAAACOAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAI4AAAAAAAAAUgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFIAAADDAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAPgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/Dw8P/+Pj4//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///d3d3/lZWV/1xcXP8xMTH/JSUl/zY2Nv9jY2P/m5ub/+Tk5P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////j4+P/Dw8P/UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Ojo7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////g4OD/YGBg/wUFBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/CAgI/21tbf/n5+f///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////jo6O/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/UlJS//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+fn5/zAw + MP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xgYGP+6urr///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Dw8P///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8fHx/4WFhf8QEBD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv+ysrL///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///Dw8P/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//j4+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Xl5f9ycnL/CQkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8P + D//S0tL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////j4+P8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////d3d3/Xl5e/wUF + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zo6Ov/8/Pz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/zc3N/0BAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/6ysrP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6urq/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/T09P//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////19fX/AQEB/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FBQX/8vLy//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+Li4v/d3d3///////////////////////////////////////// + //////////////v7+/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Gxsb///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////n5+f/wkJ + Cf95eXn/7+/v/////////////////////////////////////////////////wQEBP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/6+vr/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+hoaH/AAAA/wAAAP8YGBj/kJCQ//n5+f////////////// + ///////////////////8/Pz/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ra2t//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7u7 + u/8AAAD/AAAA/wAAAP8AAAD/Jycn/6mpqf/8/Pz////////////x8fH/mZmZ/zc3N/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/ExMT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////5eXl/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/zc3 + N/+goKD/X19f/xISEv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9/f + 3/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/Li4u/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/1tbW//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+bm5v/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP+ZmZn///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////T09P8mJib/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwcHP/e3t7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8PDw/8FBQX/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/ycnJ//g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////52dnf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/h4eH///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////6ur + q/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/g4OD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////97e3v9cXFz/BgYG/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQk + JP/h4eH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////h4eH/mJiY/1VVVf8qKir/HBwc/ysrK/9JSUn/RUVF/xMTE/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//g4OD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8PDw/25ubv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yUlJf/g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////f39/319 + ff8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUlJf/e3t7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/35+fv8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/e3t7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUl + Jf/e3t7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////3x8fP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/f39////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yMjI//f39////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /////////////////////////////////////////////////////////////////////////////39/ + f/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yIiIv/f39////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + /////////////////////////////////////////v7+/4GBgf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEhIf/e3t7///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + /////////f39/39/f/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//e3t7///////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + /////////////////////////////////////////////////////////f39/4CAgP8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////f39/4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yQkJP/d3d3///////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/4CA + gP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/d3d3///////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4CAgP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEh + If/d3d3///////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + /////////////////////////////////////////////////////////////4KCgv8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x8fH//AwMD/+/v7///////9/f3/+fn5//n5 + +f/+/v7/////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + /////////////////////////v7+/4SEhP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wMDA/8kJCT/NTU1/ygoKP8cHBz/Hh4e/ywsLP9ZWVn/rq6u//X19f////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////////////////f39/4KC + gv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/Hh4e/52dnf/6+vr//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + /////////////////////////////////////////f39/4ODg/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/01N + Tf/t7e3/////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/4SEhP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zg4OP/u7u7///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/4ODg/8BAQH/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/7+/v//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////3Jycv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/6enp///////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9vb2/xcX + F/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/KCgo//n5+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////////////////////////////////////VVVV/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/wsLC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //9aWlr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP9NTU3/s7Oz/4eH + h/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP9wcHD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////////////////////////////////////zw8PP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/xoaGv+Dg4P/4eHh//7+/v///////////+fn5/9oaGj/CQkJ/wAAAP8AAAD/AAAA/0VF + Rf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////JCQk/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/l5eX//////////////////// + ///////////////////V1dX/Tk5O/wMDA/8AAAD/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8oKCj/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP+Wlpb////////////////////////////////////////////9/f3/v7+//z09 + Pf8zMzP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////0RERP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5GRkf////////////// + /////////////////////////////////////////f39/9PT0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////cHBw/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/jY2N//////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+2trb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Dg4P///////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////39/f8tLS3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf+Dg4P/8/Pz//////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////////////////////6mpqf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8cHBz/lpaW//f39////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////f39/1pa + Wv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KSkp/7CwsP/7+/v///////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////8/Pz/0NDQ/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AgIC/zs7O//BwcH//v7+//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9PT0/2JiYv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUF + Bf+zs7P//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/7S0tP84ODj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8/Pz//vr6+//7+/v//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////IyMj/goKC/1xcXP9ERET/Q0ND/11dXf+FhYX/zs7O//// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/9/f3//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9/f3/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/BwcH///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///BwcH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1BQUP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1BQUP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4qKiv////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+Kior/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1BQUP/BwcH/9/f3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////f39//BwcH/UFBQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAMEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADBAAAAUAAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFAAAAAAAAAAigAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACKAAAAAAAA + AAAAAAAAAAAAUAAAAMEAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPcAAADBAAAAUAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAeJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAAAABc1JHQgCuzhzpAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwwAADsMBx2+o + ZAAAGH1JREFUeF7tnXnIVVUXh63sy2weFESaKaXBDMypMsLCigytBCnTFAobKYpMm+dJm6Q/NAskM8LI + gqCMoqiwkcpsUrBJK4dyyKnB2p/rct+uw+9991p373vPPuf8Hngo1uta99xz77pn2mefdq3QYbMjNjtr + s99t1lFKc6f0rvSw9LL0tIrzNrt4s6ggpTSfSk9Lb7dK+81O3ixKppQWQ+lx6fXtYPNTWg6l17dCdg3Q + P6SUFtP/Dgfk5ACP+Sktl9LzlRODcoYQ/QNKabGV3q9cJkB/pJQWW+l9XuentKRK78M/UErLIQxSSssh + DFJKyyEMUkrLIQxSSsshDFJKyyEMUkrLIQwG2aFDBzdixAg3a9Ys99133zlCiB3pHekh6SXpKdRrEYTB + uj3vvPPc4sWLq2+BEBID6SnpLdRzgcKg2fbt27vJkydXF5cQ0gikx6TXUA/WKQyaZfMT0hyk11AP1ikM + mpRdE0JI84h4OACDauXkBI/5CWku0nORTgzCoFo5Q0kIaT7Se6gnjcKgWrlMQQhpPtJ7qCeNwqBaXucn + JBuk91BPGoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID + 9aRRGFRLCMkO1JNGYVBtKKhmSvpAObSmD5RTJkNBNY3CoNpQUM2U9IFyaE0fKKdMhoJqGoVBtaGgminp + A+XQmj5QTpkMBdU0CoNqQ0E1U9IHyqE1faCcMhkKqmkUBtWGgmqmpA+UQ2v6QDllMhRU0ygMqg0F1UxJ + HyiH1vSBcspkKKimURhUGwqqmZI+UA6t6QPllMlQUE2jMKg2FFQzJX2gHFrTB8opk6GgmkZhUC0hJDtQ + TxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhU + SwjJDtSTRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMkfaCcPBkKqmkUBtWGgmrSmj5QTpH0 + gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMk + faCcPBkKqmkUBtWGgmrSmj5QTpH0gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQLSEkO1BPGoVB + tYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO + 1JNGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOh + oJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhUSwjJDtSTRmFQLSEkO1BP + GoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUG0oqCat6QPlxNQHyklJHyinmYaCahqFQbWhoJq0 + pg+UE1MfKCclfaCcZhoKqmkUBtWGgmrSmj5QTkx9oJyU9IFymmkoqKZRGFQbCqpJa/pAOTH1gXJS0gfK + aaahoJpGYVBtKKgmrekD5cTUB8pJSR8op5mGgmoahUG1oaCatKYPlBNTHygnJX2gnGYaCqppFAbVhoJq + 0po+UE5MfaCclPSBcpppKKimURhUGwqqSWv6QDkx9YFyUtIHymmmoaCaRmFQLSEkO1BPGoVBtYSQ7EA9 + aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBt + KKhmSvpAOTSePlBOngwF1TQKg2pDQTVT0gfKofH0gXLyZCioplEYVBsKqpmSPlAOjacPlJMnQ0E1jcKg + 2lBQzZT0gXJoPH2gnDwZCqppFAbVhoJqpqQPlEPj6QPl5MlQUE2jMKg2FFQzJX2gHBpPHygnT4aCahqF + QbWhoJop6QPl0Hj6QDl5MhRU0ygMqg0F1UxJHyiHxtMHysmToaCaRmFQLSEkO1BPGoVBtYSQ7EA9aRQG + 1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBtKKhm + kfSBcmLqA+XQmqmDltkoDKoNBdUskj5QTkx9oBxaM3XQMhuFQbWhoJpF0gfKiakPlENrpg5aZqMwqDYU + VLNI+kA5MfWBcmjN1EHLbBQG1YaCahZJHygnpj5QDq2ZOmiZjcKg2lBQzSLpA+XE1AfKoTVTBy2zURhU + GwqqWSR9oJyY+kA5tGbqoGU2CoNqQ0E1i6QPlBNTHyiH1kwdtMxGYVAtISQ7UE8ahUG1hJDsQD1pFAbV + EkJqrFy50n399ddu7ty5bubMme6RRx5xt99+u7vlllvcpEmT3HPPPefee+89t3DhQrd69Wr377//VjPr + A/WkURhUSwhx7t1333WjRo1yPXr0cJ07d3b/+9//YL+I8rcuXbq44447zl1++eXu008/rfuHANU3CoNq + CSkrv/76q3v22Wdd79693Q477AD7Q+OOO+7oTjvtNDd79my3Zs2aanUdqJ5RGFRLSNnYtGmTmzNnjjv6 + 6KNd+/btYV/U4y677OL69u3rPvvsM/fPP/9UX61tUB2jMKiWkDKxbNkyd+WVV1aaFfVDDDt27Ojuuece + 98cff1RftXVQvlEYVEtIWfjyyy/dscceW9llR70Qy913392df/75bv369dVXbh2UbxQG1YaCasbUB8qh + NX2gnJSMxdtvv+26desGXyOWch5hyJAh7rXXXnN///139ZXbBtUxCoNqQ0E1Y+oD5dCaPlBOSsZg3rx5 + 7rDDDoP1YyiHE8cff7x79dVX3V9//VV9VR2onlEYVBsKqhlTHyiH1vSBclIylB9//NEdddRRsHYMZa9C + xgvImIB6QDWNwqDaUFDNmPpAObSmD5STkiHISbgRI0YEXeJDyjkE2aO488473YYNG6qvVh+ovlEYVBsK + qhlTHyiH1vSBclIyhBkzZridd94Z1q1XqSejAmXPInQUoIBewygMqg0F1YypD5RDa/pAOSlZLz/99JM7 + 4IADYM163HfffSsjBb/55pvqK8QBvZZRGFQbCqoZUx8oh9b0gXJSsl5kDH+My3277rqrGzp0aOUSovbM + vgX0mkZhUG0oqGZMfaAcWtMHyknJeti4cWOUs/4yvPeVV15Rj+qrB/S6RmFQLSFFY/r06fC7blFu9pHj + /EaDXtsoDKolpEj8+eefbsCAAfC7bvGII45wv/32W7Vq40CvbRQG1RJSJL799lvXtWtX+F23eOSRR1bm + Bmg06LWNwqBaQoqEDPmNcaPPMccc41atWlWt2jjQaxuFQbWEFImnnnoKfs+t9uzZs+7RfRbQaxuFQbWE + FIlrr70Wfs+t9urVyzy5hxYZPTht2jT30ksvwdc2CoNqCSkSw4cPh99zq3369HG///57tWoc5PKkzBp0 + 8sknV8YoyHRi6LWNwqBaQorEGWecAb/nVvv37+/WrVtXrRqGXJn44IMPKlcntjw/MXr06K1es05hUG0o + qGaR9IFyYuoD5aRksxk4cCBcDqvSrJoJPdpC7hWQ6cHkhqQ999xzu9cYM2bMdrE6hEG1oaCaRdIHyomp + D5STks1m8ODBcDmsytx+IYcAMoho3Lhxbo899oD1xUIcAqCaRdIHyompD5STks3mkksugcthVe4BGDly + pPvoo49Md/3Jj8Zdd91VGYrc1m3I8rfx48fDvxmFQbWhoJpF0gfKiakPlJOSzebBBx+Ey1GvO+20kzvl + lFMq04f/8MMPrd4XIFcMnn/++coAIs38A1J3ypQp8G9GYVBtKKhmkfSBcmLqA+WkZLN54YUX4HKEKg17 + 4IEHugsvvLAyxVjLXoH896233qpcNrQMQJKHi7zxxhvwb0ZhUG0oqGaR9IFyYuoD5aRks5EJORs9669M + CnLqqadW9jZk9t+2niLUmnvttVdlpCH6m1EYVBsKqlkkfaCcmPpAOSnZbGRizthTgDVCmWNAQH8zCoNq + Q0E1i6QPlBNTHygnJZvN1KlT4XKkpBxOyA+VgP5uFAbVElIkzj33XPg9T8nu3bu75cuXV5YX/d0oDKol + pCjII7t32203+D1PSRkf0HI1Af3dKAyqJaQIyKg9Oa5G3/GU7NSpk1u6dGl1qfkDQEgUZKrues7GN1N5 + ErFMV7Yl6N8ZhUG1hOQZeRTXfffdVzmxhr7fKTlo0KDtbjFG/84oDKolJK/IcbQMu+3QoQP8bqekDCJa + smRJdclroH9rFAbVEpJHpPllIE7qu/2iHPe//vrr1SXfGvTvjcKgWkLyhuz2y3P58tD88kQhuebf2j0E + KMcoDKoNBdVMSR8oJ6Y+UE5Kpsi9996bi91+mZ14zpw5bd5NiPKMwqDaUFDNlPSBcmLqA+WkZErI035l + y5/6CT+5F+Gkk06qTFHuu5UY5RuFQbWhoJop6QPlxNQHyknJlLjjjjsq9+mj5UzFvffe202aNMmtWLGi + utRtg2oYhUG1oaCaKekD5cTUB8pJyRSQOfVS3/LLo8Tk6cELFiwwTSCCahmFQbWhoJop6QPlxNQHyknJ + FJAtf6rH/N26dXOPP/64W7RoUV1PD0Y1jcKg2lBQzZT0gXJi6gPlpGSWSEPdf//9lfvv0bLFUu4fkDkA + ZUpxmadv7Nixlf+XGYblWP7444+v/F2m8z7rrLMq045NnjzZzZ8/v9Wz+1rQ8hiFQbWhoJop6QPlxNQH + yknJrJDmv+2226I85qs1ZWiuNPXHH3/s1q5du1Uzy268HHrI1OAyz5/8Xe43kEuQMUHLZRQG1YaCaqak + D5QTUx8oJyWzQob3NrL55XzCddddFzz1dyho2YzCoFpCUkK2urfffntl64y+rzGUHxY5qVjPMXts0PIZ + hUG1hKSENH+jT/jdeuutlTEFKYCWzygMqiUkBaQh5Zi/kZf65IdFriiEnriLCVpOozColpAUkK1yo7f8 + stufypa/BbScRmFQLSFZ0oxBPnLML3sXKW35W0DLaxQG1RKSFZs2barM5NPos/133313clv+FtAyG4VB + tYRkgTT/Pffc09BBPlJbDi1SONvfGmi5jcKgWkKajez233TTTQ1tfpkrQH5gYg/ciQ1adqMwqDYUVLNI + +kA5KZkicia+kbv9omz55YcmddCyG4VBtaGgmkXSB8pJyZSQ43DZ8jf6Up/MEyiHGHkAvQejMKg2FFSz + SPpAOSmZEjfffHPDL/VJ86d6wg+B3oNRGFQbCqpZJH2gnJRMAWlIOdvf6C2/nO1P8VJfW6D3YhQG1YaC + ahZJHygnJVNAdvsbveVP+VJfW6D3YhQG1YaCahZJHygnJbNEzsDLLnkjb+yRs/0yyCcvx/zbgt6TURhU + GwqqWSR9oJyUzApp/gkTJjR06m65jCgThuThbH9roPdlFAbVhoJqFkkfKCcls0KG9zay+eV8glxOTP06 + vw/03ozCoFpCYiLH4bLlb/T9/LLlT3mEnxb0/ozCoFpCYiIn/Bo9yEfOK+R5t39L0PszCoNqCYnBxo0b + K1t+eSgG+p7FUK4kyFRhebvU1xbofRqFQbWExGD8+PENv9Qnu/15vNTXFuh9GoVBtYSEILviHORTP+j9 + GoVBtYTUi1x7v+GGGxp+P788Brwox/zbgt6zURhUS0g9SPPLBJ6NvqVXTvgV4Wx/a6D3bRQG1RJiRbbG + 119/fUObX/Yq5CGbeb/O7wO9d6MwqJYQC/LEHLmrrxmX+ore/AJ670ZhUC0hWuRSn2z5G3nCTx7//cAD + D+R2bL8VtA6MwqBaQjTIcfjVV1/d8C2/NH9RT/gh0DowCoNqCWkLue7+4YcfusGDB7sddtgBfodi2LLl + tzxbvwigdWEUBtWS8iDH1HPnznWPPPKIGz16dOXx1/369XN9+vSp/P/FF1/s7r33Xvfkk0+6adOmVQb3 + 9O/f3+2zzz7wuxPTiRMnlmrL3wJaF0ZhUC0pLrI1/f77790zzzzjhg0b5vbbbz/4HchSOaSQQT5lOebf + FrROjMKgWlI8pPGXLFnirrrqKte5c+eGnrQLUa7zy95IGc72twZaL0ZhUC0pFqtXr67sTh900EHw805F + uV1Y5u0v8iAfDWjdGIVBtaQYyDj5hQsXuhNOOCHZLX6LMrb/4YcfLn3zC2j9GIVBtaQYvPLKK8lv9Vss + 26W+tkDrxygMqiX5Rk6ezZo1y3Xs2BF+vikpl/oeeuihQt7VVy9oPRmFQbUk37z++utJnt1HSvNzy781 + aD0ZhUG1JL98/vnnbv/994efa0rKMb/c0sst//ag9WUUBtWSfCLj8gcOHNjQ0XkxlLP9cqmPW34MWmdG + YVAtyR9ynV+m3UafZ0rK7cJlHuSjAa03ozColuSP+fPnVwb4oM8zFWXP5NJLLy31IB8NaN0ZhUG1JH+M + Gzcu+V3/Qw45xP3888/VJSatgdadURhUS/LF8uXL3e677w4/y5QcNWoUT/opQOvOKAyqJflCjqnR55ia + cjch8YPWnVEYVEvyw9q1a12vXr3g55iab775ZnWpSVugdWcUBtWS/LBgwQLXpUsX+Dm2pTytp2/fvu6c + c85p2ohBmXeA+EHrzigMqiX5QUb9WW70kcbv3bu3mzlz5n/X4X/55ZfKWPyTTjrJ7bbbbjAvhq+++mrl + 9UjboHVnFAbVkvwg02Sjz3BbpfHlxiCZCOT333+vZm/NunXr3BdffOEuu+yyyiXF2E/znTp1avWVSFug + dWcUBtWS/DBmzBj4GW5p165dKw/sWLx4cTXLj0weMmXKFDdgwABYsx5lOjHiB607ozColuSHM888E36G + otwQNHbsWLd06dK6L7/J3kKswwKZc5D4QevOKAyqJflBJvvY9vOT4bYXXnih++ijj6IMuY01Aejw4cNL + N8NvPaB1ZxQG1ZL8IGfyWz43mU9PTuS99dZbUQfcxLpKcMEFF/AHQAFad0ZhUC3JD4MGDap8Zocffrh7 + 8cUX3Zo1a6p/iUes5/3JFOPED1p3RmFQLckPMo+ePDNPzuA3ApmjT64goO+J1QkTJlSrkrZA684oDKol + +UF29Ru5W71+/fpoPwDTp0+vViVtgdadURhUS0gLq1ativYD8Mknn1SrkrZA684oDKolpIVly5ZF+QGQ + gUWcBEQHWn9GYVAtIS38+OOPUX4AZHQh0YHWn1EYVEtIC/IU4NAfAJn6W+oQHWgdGoVBtYQIcvfeluMM + 6rVnz55u5cqV1arEB1qHRmFQLSkvcpw+b968yjX7WDcDTZ48uVqdaEDr0CgMqiXlRMb9X3HFFa5Tp07w + e1GPRx11VOVSItGD1qNRGFRLyoVM1PnYY4/VNbFIW8pNRC+//HL1VYgWtC6NwqBaUnxk8JCMHpRbfg8+ + +ODoTw+WGYrl7j9OAW4HrU+jMKjWct84yR8bNmxwTz/9tOvXr1/DphI/8cQTeeKvDqT30Po0CoNqZ8+e + XV0cUiSk8d955x3Xv3//aDf4IOXGpK+++qr6qsSC9B5ap0ZhUO1FF11UXRxSBGR3//3333dDhw6tXJNH + n3ksu3fvziG/AUjvofVqFAbVypNbZaJIkn9k2nCZFajRjS+DheR6v8wpSOpDek56D61fozBoUmZvIflH + Lu0NHjy44Y8Nk6f+cKMRhvQcWrd1CINmn3jiieqikTwjx/4TJ050hx56aNQfAqnVo0ePyglFzvQThvQa + Wsd1CoNmZSQYfwSKg8z0e+ONN7p999036LKffC9kpmH5bqxYsYLNH4isx8hTsMNg3cquCXfvioP8EDz6 + 6KNuyJAh7sADD1Td7CM/GHKCT+b1mzFjhlu9enW1GqkX6amIu/1bCoNByskJOUMplyk4TqAY/PHHH5Vr + 9fPnz688uPOaa65xw4YNc6effro7++yz3ciRIyt7DLNmzXKLFi2qND0H9oQhvSM9JL0U6YQfEgYppeUQ + Biml5RAGKaXlEAYppeUQBiml5RAGKaXlEAYppeWw3eJtApTScii93272FgFKaXmU3m930RYBSml5lN5v + 12Gzv1QDlNJyKD0vvV9h+GbRP6KUFlPp+a14YrPoH1JKi6X0+na03yx/BCgtttLj0uutIrsGPCdAabGU + nt5ut7815OSAnCGUywQcJ0BpPpXelR6WXv7vhF+Ndu3+D6LWAdnKS/AsAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/TS SE Tool/Forms/FormModManager.cs b/TS SE Tool/Forms/FormModManager.cs new file mode 100644 index 00000000..28e511ef --- /dev/null +++ b/TS SE Tool/Forms/FormModManager.cs @@ -0,0 +1,178 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Linq; +using TS_SE_Tool.Utilities; +using System.ComponentModel; +using System.Text; +using MoreLinq; +using TS_SE_Tool.CustomClasses.Program; + +namespace TS_SE_Tool.Forms { + public partial class FormModManager : Form { + //FormMain MainForm = Application.OpenForms.OfType().Single(); + public SupportedGame Game { get; private set; } + + public BindingList Mods = new BindingList(); + + + public FormModManager(SupportedGame game) { + Game = game; + InitializeComponent(); + } + + public HashSet FindMatchingmods(DirectoryInfo gameDir) { + var mods = new HashSet(); + var filesToProcess = Game.ModsDir.GetFiles("*.scs").Concat(Game.ModsDir.GetFiles("*.disabled")).ToList(); + while (filesToProcess.Count > 0) { + var file = filesToProcess[0]; + filesToProcess.RemoveAt(0); + var mod = new GameMod() { Enabled = file.Extension == ".disabled", File = file, Name = file.FileNameWithoutExtension() }; + mods.Add(mod); + } + + // Convert to a distinct HashSet to remove duplicates + mods = new HashSet(mods.Distinct()); + + IO_Utilities.LogWriter($"Found {mods.Count} distinct mod pairs in {gameDir}"); + + return mods; + } + + + private void Populatemods() { + //tableMods.Rows.Clear(); + Mods.Clear(); + FindMatchingmods(Game.ModsDir).ForEach(p => Mods.Add(p)); + //foreach (var mod in mods) { + // tableMods.Rows.Add(mod.Enabled, mod.Name, mod.InstallDate, mod.File32bit != null, mod.File64bit != null); + //} + } + + private void FormModManager_Load(object sender, EventArgs e) { + Text = $"Manage {Game.Name} mods"; + tableMods.Columns.Clear(); + tableMods.Rows.Clear(); + tableMods.DataSource = Mods; + tableMods.RowHeadersVisible = false; + tableMods.AllowUserToAddRows = false; + tableMods.AllowUserToDeleteRows = false; + tableMods.AllowUserToOrderColumns = true; + tableMods.MultiSelect = true; + tableMods.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + tableMods.CellContentClick += tableMods_CellContentClick; + tableMods.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + Populatemods(); + //foreach (var i in new[] { 0, 3, 4 }) + // tableMods.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; + //mods.ListChanged += mods_ListChanged; + //mods.AddingNew += mods_ListChanged; + } + + private void mods_ListChanged(object sender, object e) { + //throw new NotImplementedException(); + } + + private void tableMods_CellContentClick(object sender, DataGridViewCellEventArgs e) { + tableMods.CommitEdit(DataGridViewDataErrorContexts.Commit); + } + + private void openModsDirectoryToolStripMenuItem_Click(object sender, EventArgs e) { + Game.ModsDir.OpenInExplorer(); + } + + private GameMod GetmodFromRow(int rowIndex, DataGridView table = null) { + table ??= tableMods; + if (table is null || rowIndex < 0 || rowIndex > table.RowCount) return null; + return table.Rows[rowIndex].DataBoundItem as GameMod; + } + + private List GetModsFromSelected() { + var list = new List(); + foreach (DataGridViewRow row in tableMods.SelectedRows) { + list.Add(row.DataBoundItem as GameMod); + } + return list; + //MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item + } + + //private ContextMenuStrip strip; + private void tableMods_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) { + //var table = sender as DataGridView; + //if (sender is null || table is null || e is null || e.RowIndex < 0 || e.RowIndex > table.RowCount) { + // MessageBox.Show("fail"); + // return; + //} + var mods = GetModsFromSelected(); //var mod = GetmodFromRow(e.RowIndex, table); + if (mods.Count == 1) { + modContextMenu.Items[0].Text = mods.First().Enabled ? "Disable" : "Enable"; + } else { + modContextMenu.Items[0].Text = "Toggle"; + } + e.ContextMenuStrip = modContextMenu; + } + + private DialogResult AskUser(string action, MessageBoxIcon icons = MessageBoxIcon.Question) { + var mods = GetModsFromSelected(); + if (mods is null || mods.Count == 0) return DialogResult.Cancel; + var sb = new StringBuilder("Are you sure you want to " + action + " the following files:\n\n"); + foreach (var mod in mods) { + //var files = mod.Files; + //if (files.Count > 0) sb.AppendLine(string.Join(", ", files.Select(f => f.Name.Quote()))); + } + return MessageBox.Show(sb.ToString(), action + " files?", MessageBoxButtons.YesNo, icons); + } + + private void toggleToolStripMenuItem_Click(object sender, EventArgs e) { + //var menuItem = sender as ToolStripMenuItem; + if (AskUser("toggle") != DialogResult.Yes) return; + GetModsFromSelected().ForEach(p => p.Enabled = !p.Enabled); + Populatemods(); + } + + private void openFoldersToolStripMenuItem_Click(object sender, EventArgs e) { + //var menuItem = sender as ToolStripMenuItem; + var mods = GetModsFromSelected(); + var folders = new List(); + foreach (var mod in mods) { + //if (mod.x86) folders.Add(mod.File32bit.Directory); + //if (mod.x64) folders.Add(mod.File64bit.Directory); + } + foreach (var folder in folders.DistinctBy(x => x.FullName).ToList()) { + folder.OpenInExplorer(); + } + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { + //var menuItem = sender as ToolStripMenuItem; + if (AskUser("delete", MessageBoxIcon.Warning) != DialogResult.Yes) return; + foreach (var mod in GetModsFromSelected()) { + mod.Delete(); + } + Populatemods(); + } + + private void tableMods_MouseHover(object sender, EventArgs e) { + //var p = tableMods.PointToClient(Cursor.Position); + //var info = tableMods.HitTest(p.X, p.Y); + //var mod = GetmodFromRow(info.RowIndex, tableMods); + //tableMods.Rows[0].Cells + } + private void tableMods_CellMouseEnter(object sender, DataGridViewCellEventArgs e) { + + } + + private void showDebugToolStripMenuItem_Click(object sender, EventArgs e) { + MessageBox.Show(GetModsFromSelected().ToJson(true));// string.Join("\n", GetmodsFromSelected().Select(p => p.ToJson()))); + } + + private void reloadToolStripMenuItem_Click(object sender, EventArgs e) { + Populatemods(); + } + + //private void tableMods_CellValueChanged(object sender, DataGridViewCellEventArgs e) { + // UpdateDataGridViewSite(); + //} + } +} diff --git a/TS SE Tool/Forms/FormModManager.resx b/TS SE Tool/Forms/FormModManager.resx new file mode 100644 index 00000000..208bdb99 --- /dev/null +++ b/TS SE Tool/Forms/FormModManager.resx @@ -0,0 +1,1911 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + 0, 0 + + + 736, 25 + + + + 0 + + + menuStrip1 + + + menuStrip1 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + 55, 21 + + + Reload + + + 119, 21 + + + Open Mods Folder + + + True + + + Enabled + + + True + + + Name + + + + Fill + + + 0, 25 + + + 736, 531 + + + 1 + + + tableMods + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 347, 17 + + + 177, 76 + + + penis + + + modContextMenu + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 180, 22 + + + Toggle + + + 180, 22 + + + Delete + + + 177, 6 + + + 180, 22 + + + Show Debug Infos + + + True + + + 6, 13 + + + 736, 556 + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAABAQAAAAQAgAChCAABmFQAAgIAAAAEA + IAAoCAEAjlcAAAAAAAABACAA6BgAALZfAQAoAAAAEAAAACAAAAABACAAAAAAAAAIAAAAAAAAAAAAAAAA + AAAAAAAAAAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAP/q6ur/////////////////////////////////rq6u/y4uLv/e3t7///////// + ////////6urq/wAAAP8AAAD/////////////////////////////////z8/P/5KSkv8jIyP/mJiY//// + //////////////////8AAAD/AAAA//////////////////////////////////r6+v9ubm7/MzMz/ykp + Kf/n5+f/////////////////AAAA/wAAAP////////////////////////////////////////////39 + /f9iYmL/KSkp/+fn5////////////wAAAP8AAAD//////wAAAP8AAAD//////wAAAP//////AAAA/wAA + AP///////f39/2JiYv8oKCj/o6Oj/+Xl5f8AAAD/AAAA//////////////////////////////////// + ///////////////////9/f3/NDQ0/yQkJP9ERET/AAAA/wAAAP//////AAAA//////8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD//////2hoaP9eXl7/7u7u/wAAAP8AAAD///////////////////////// + ///////////////////////////////////39/f/sLCw/+np6f8AAAD/AAAA//////8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD//////wAA + AP//////AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP//////AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/6urq/////////////////////////////////////////////////////////////////+rq + 6v8AAAD/AAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/q6ur//////////////////////////////////////////////////// + ///////////////////Nzc3/ISEh/xYWFv9ycnL/+vr6//////////////////////////////////// + ////////q6ur/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + ///////////////////////////////////Jycn/MDAw/wAAAP+BgYH///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////+4uLj/6Ojo//////9/f3//AAAA/zIyMv////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////////////////////////////////////4aGhv8NDQ3/U1NT/w0NDf8AAAD/MTEx//// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////////// + ////////////////////////////////////////////////////////7e3t/yYmJv8AAAD/AAAA/wAA + AP8CAgL/n5+f////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////8/Pz/5+f + n/+NjY3/Pz8//wAAAP8CAgL/np6e//////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + ///////////////////39/f/R0dH/wAAAP8CAgL/np6e/////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP/////////////////39/f/SEhI/wAAAP8CAgL/np6e//////////////////// + ////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + ///////////////////////////////////////////////////39/f/SEhI/wAAAP8CAgL/nZ2d//// + //////////////////8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP/////////////////39/f/SUlJ/wAA + AP8CAgL/RERE/0tLS/+ampr//v7+/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///39/f/QEBA/wAAAP8AAAD/AAAA/wAAAP+EhIT/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+QkJD/AAAA/wsLC/+Ghob/bGxs/yAgIP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5mZmf8AAAD/IyMj////////////39/f/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP//////7Ozs/xkZGf8BAQH/VVVV/9ra2v//////AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////4ODg/25ubv9WVlb/qKio//// + //8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD//////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/qqqq//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////qqqq/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAAEAAAACAAAAAAQAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACQAAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD9AAAAxQAAACQAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/JCQk/8XFxf/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Q0ND/Xl5e/yMjI/8XFxf/Pz8//5aWlv/5+fn///////////////////////// + ///////////////////////////////////////////////////////////////////9/f3/xcXF/yQk + JP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8XFxf////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3/aWlp/wQEBP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+zs + 7P////////////////////////////////////////////////////////////////////////////// + ///////////////////FxcX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////V1dX/UVFR/wEB + Af8AAAD/AAAA/wAAAP9HR0f//v7+//////////////////////////////////////////////////// + /////////////////////////////////////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////++vr7/AAAA/wAAAP8AAAD/AAAA/76+vv////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+Pj4//f39////////////////////////Pz8/wAAAP8AAAD/AAAA/wAAAP9vb2////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8/Pz/8hISH/pqam//39/f////////////7+/v8DAwP/AAAA/wAA + AP8AAAD/V1dX//////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////n5+f/AgIC/wAAAP80NDT/tbW1/5iY + mP80NDT/AAAA/wAAAP8AAAD/AAAA/2lpaf////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/zIy + Mv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9cXFz///////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+3t7f/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BwcH/7m5 + uf////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5OTk/8EBAT/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8JCQn/ubm5//////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////zs7O/2Bg + YP8gICD/EhIS/yQkJP8FBQX/AAAA/wAAAP8AAAD/AAAA/wkJCf+5ubn///////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////19fX/yAgIP8AAAD/AAAA/wAAAP8AAAD/CQkJ/7i4 + uP///////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////e3t7/ICAg/wAA + AP8AAAD/AAAA/wAAAP8KCgr/uLi4//////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////97e3v8gICD/AAAA/wAAAP8AAAD/AAAA/wkJCf+4uLj///////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD////////////////////////////////////////////e3t7/ISEh/wAA + AP8AAAD/AAAA/wAAAP8JCQn/t7e3//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9/f3/8hISH/AAAA/wAAAP8AAAD/AAAA/wkJCf+3t7f///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA///////////////////////////////////////g4OD/IiIi/wAA + AP8AAAD/AAAA/wAAAP8ICAj/eHh4/5aWlv+Li4v/oaGh/+jo6P////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////9/f3/8iIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwf/eXl5//r6 + +v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////4ODg/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9eXl7//v7+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////a2tr/BgYG/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7Kysv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////ywsLP8AAAD/AAAA/wAAAP8AAAD/AgIC/0BAQP8mJib/AAAA/wAAAP9NTU3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////8YGBj/AAAA/wAAAP8AAAD/LCws/9nZ2f//////+fn5/5GR + kf8UFBT/Hh4e/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////Gxsb/wAAAP8AAAD/AAAA/0pK + Sv//////////////////////7+/v/5CQkP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0pK + Sv8AAAD/AAAA/wAAAP9ERET/////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+1tbX/AAAA/wAAAP8AAAD/BAQE/2VlZf/j4+P//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////2RkZP8AAAD/AAAA/wAAAP8AAAD/CgoK/3p6 + ev/v7+////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////8/Pz/hYWF/w4O + Dv8AAAD/AAAA/wAAAP8QEBD/nZ2d////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////x8fH/t7e3/6Ghof+4uLj/8/Pz/////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/xMTE//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8TExP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//ExMT//f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/8TExP8jIyP/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxAAAACMAAADEAAAA/QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAA + ACOAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAASgAAACAAAAAAAEAAAEAIAAAAAAAAAACAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAADDAAAA+AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAwwAAAFIAAAAAAAAAAAAAAAAAAACOAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAI4AAAAAAAAAUgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFIAAADDAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAPgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/Dw8P/+Pj4//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///d3d3/lZWV/1xcXP8xMTH/JSUl/zY2Nv9jY2P/m5ub/+Tk5P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////j4+P/Dw8P/UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Ojo7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////g4OD/YGBg/wUFBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/CAgI/21tbf/n5+f///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////jo6O/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/UlJS//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+fn5/zAw + MP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xgYGP+6urr///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Dw8P///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8fHx/4WFhf8QEBD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv+ysrL///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///Dw8P/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//j4+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Xl5f9ycnL/CQkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8P + D//S0tL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////j4+P8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////d3d3/Xl5e/wUF + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zo6Ov/8/Pz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/zc3N/0BAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/6ysrP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6urq/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/T09P//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////19fX/AQEB/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FBQX/8vLy//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+Li4v/d3d3///////////////////////////////////////// + //////////////v7+/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Gxsb///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////n5+f/wkJ + Cf95eXn/7+/v/////////////////////////////////////////////////wQEBP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/6+vr/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+hoaH/AAAA/wAAAP8YGBj/kJCQ//n5+f////////////// + ///////////////////8/Pz/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ra2t//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7u7 + u/8AAAD/AAAA/wAAAP8AAAD/Jycn/6mpqf/8/Pz////////////x8fH/mZmZ/zc3N/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/ExMT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////5eXl/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/zc3 + N/+goKD/X19f/xISEv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9/f + 3/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/Li4u/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/1tbW//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+bm5v/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP+ZmZn///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////T09P8mJib/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwcHP/e3t7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8PDw/8FBQX/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/ycnJ//g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////52dnf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/h4eH///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////6ur + q/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/g4OD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////97e3v9cXFz/BgYG/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQk + JP/h4eH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////h4eH/mJiY/1VVVf8qKir/HBwc/ysrK/9JSUn/RUVF/xMTE/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//g4OD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8PDw/25ubv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yUlJf/g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////f39/319 + ff8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUlJf/e3t7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/35+fv8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/e3t7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUl + Jf/e3t7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////3x8fP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/f39////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yMjI//f39////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /////////////////////////////////////////////////////////////////////////////39/ + f/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yIiIv/f39////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + /////////////////////////////////////////v7+/4GBgf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEhIf/e3t7///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + /////////f39/39/f/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//e3t7///////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + /////////////////////////////////////////////////////////f39/4CAgP8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////f39/4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yQkJP/d3d3///////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/4CA + gP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/d3d3///////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4CAgP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEh + If/d3d3///////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + /////////////////////////////////////////////////////////////4KCgv8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x8fH//AwMD/+/v7///////9/f3/+fn5//n5 + +f/+/v7/////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + /////////////////////////v7+/4SEhP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wMDA/8kJCT/NTU1/ygoKP8cHBz/Hh4e/ywsLP9ZWVn/rq6u//X19f////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////////////////f39/4KC + gv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/Hh4e/52dnf/6+vr//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + /////////////////////////////////////////f39/4ODg/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/01N + Tf/t7e3/////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/4SEhP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zg4OP/u7u7///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/4ODg/8BAQH/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/7+/v//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////3Jycv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/6enp///////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9vb2/xcX + F/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/KCgo//n5+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////////////////////////////////////VVVV/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/wsLC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //9aWlr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP9NTU3/s7Oz/4eH + h/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP9wcHD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////////////////////////////////////zw8PP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/xoaGv+Dg4P/4eHh//7+/v///////////+fn5/9oaGj/CQkJ/wAAAP8AAAD/AAAA/0VF + Rf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////JCQk/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/l5eX//////////////////// + ///////////////////V1dX/Tk5O/wMDA/8AAAD/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8oKCj/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP+Wlpb////////////////////////////////////////////9/f3/v7+//z09 + Pf8zMzP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////0RERP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5GRkf////////////// + /////////////////////////////////////////f39/9PT0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////cHBw/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/jY2N//////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+2trb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Dg4P///////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////39/f8tLS3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf+Dg4P/8/Pz//////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////////////////////6mpqf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8cHBz/lpaW//f39////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////f39/1pa + Wv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KSkp/7CwsP/7+/v///////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////8/Pz/0NDQ/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AgIC/zs7O//BwcH//v7+//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9PT0/2JiYv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUF + Bf+zs7P//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/7S0tP84ODj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8/Pz//vr6+//7+/v//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////IyMj/goKC/1xcXP9ERET/Q0ND/11dXf+FhYX/zs7O//// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/9/f3//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9/f3/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/BwcH///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///BwcH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1BQUP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1BQUP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4qKiv////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+Kior/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1BQUP/BwcH/9/f3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////f39//BwcH/UFBQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAMEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADBAAAAUAAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFAAAAAAAAAAigAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACKAAAAAAAA + AAAAAAAAAAAAUAAAAMEAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPcAAADBAAAAUAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAeJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAAAABc1JHQgCuzhzpAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwwAADsMBx2+o + ZAAAGH1JREFUeF7tnXnIVVUXh63sy2weFESaKaXBDMypMsLCigytBCnTFAobKYpMm+dJm6Q/NAskM8LI + gqCMoqiwkcpsUrBJK4dyyKnB2p/rct+uw+9991p373vPPuf8Hngo1uta99xz77pn2mefdq3QYbMjNjtr + s99t1lFKc6f0rvSw9LL0tIrzNrt4s6ggpTSfSk9Lb7dK+81O3ixKppQWQ+lx6fXtYPNTWg6l17dCdg3Q + P6SUFtP/Dgfk5ACP+Sktl9LzlRODcoYQ/QNKabGV3q9cJkB/pJQWW+l9XuentKRK78M/UErLIQxSSssh + DFJKyyEMUkrLIQxSSsshDFJKyyEMUkrLIQwG2aFDBzdixAg3a9Ys99133zlCiB3pHekh6SXpKdRrEYTB + uj3vvPPc4sWLq2+BEBID6SnpLdRzgcKg2fbt27vJkydXF5cQ0gikx6TXUA/WKQyaZfMT0hyk11AP1ikM + mpRdE0JI84h4OACDauXkBI/5CWku0nORTgzCoFo5Q0kIaT7Se6gnjcKgWrlMQQhpPtJ7qCeNwqBaXucn + JBuk91BPGoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID + 9aRRGFRLCMkO1JNGYVBtKKhmSvpAObSmD5RTJkNBNY3CoNpQUM2U9IFyaE0fKKdMhoJqGoVBtaGgminp + A+XQmj5QTpkMBdU0CoNqQ0E1U9IHyqE1faCcMhkKqmkUBtWGgmqmpA+UQ2v6QDllMhRU0ygMqg0F1UxJ + HyiH1vSBcspkKKimURhUGwqqmZI+UA6t6QPllMlQUE2jMKg2FFQzJX2gHFrTB8opk6GgmkZhUC0hJDtQ + TxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhU + SwjJDtSTRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMkfaCcPBkKqmkUBtWGgmrSmj5QTpH0 + gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMk + faCcPBkKqmkUBtWGgmrSmj5QTpH0gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQLSEkO1BPGoVB + tYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO + 1JNGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOh + oJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhUSwjJDtSTRmFQLSEkO1BP + GoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUG0oqCat6QPlxNQHyklJHyinmYaCahqFQbWhoJq0 + pg+UE1MfKCclfaCcZhoKqmkUBtWGgmrSmj5QTkx9oJyU9IFymmkoqKZRGFQbCqpJa/pAOTH1gXJS0gfK + aaahoJpGYVBtKKgmrekD5cTUB8pJSR8op5mGgmoahUG1oaCatKYPlBNTHygnJX2gnGYaCqppFAbVhoJq + 0po+UE5MfaCclPSBcpppKKimURhUGwqqSWv6QDkx9YFyUtIHymmmoaCaRmFQLSEkO1BPGoVBtYSQ7EA9 + aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBt + KKhmSvpAOTSePlBOngwF1TQKg2pDQTVT0gfKofH0gXLyZCioplEYVBsKqpmSPlAOjacPlJMnQ0E1jcKg + 2lBQzZT0gXJoPH2gnDwZCqppFAbVhoJqpqQPlEPj6QPl5MlQUE2jMKg2FFQzJX2gHBpPHygnT4aCahqF + QbWhoJop6QPl0Hj6QDl5MhRU0ygMqg0F1UxJHyiHxtMHysmToaCaRmFQLSEkO1BPGoVBtYSQ7EA9aRQG + 1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBtKKhm + kfSBcmLqA+XQmqmDltkoDKoNBdUskj5QTkx9oBxaM3XQMhuFQbWhoJpF0gfKiakPlENrpg5aZqMwqDYU + VLNI+kA5MfWBcmjN1EHLbBQG1YaCahZJHygnpj5QDq2ZOmiZjcKg2lBQzSLpA+XE1AfKoTVTBy2zURhU + GwqqWSR9oJyY+kA5tGbqoGU2CoNqQ0E1i6QPlBNTHyiH1kwdtMxGYVAtISQ7UE8ahUG1hJDsQD1pFAbV + EkJqrFy50n399ddu7ty5bubMme6RRx5xt99+u7vlllvcpEmT3HPPPefee+89t3DhQrd69Wr377//VjPr + A/WkURhUSwhx7t1333WjRo1yPXr0cJ07d3b/+9//YL+I8rcuXbq44447zl1++eXu008/rfuHANU3CoNq + CSkrv/76q3v22Wdd79693Q477AD7Q+OOO+7oTjvtNDd79my3Zs2aanUdqJ5RGFRLSNnYtGmTmzNnjjv6 + 6KNd+/btYV/U4y677OL69u3rPvvsM/fPP/9UX61tUB2jMKiWkDKxbNkyd+WVV1aaFfVDDDt27Ojuuece + 98cff1RftXVQvlEYVEtIWfjyyy/dscceW9llR70Qy913392df/75bv369dVXbh2UbxQG1YaCasbUB8qh + NX2gnJSMxdtvv+26desGXyOWch5hyJAh7rXXXnN///139ZXbBtUxCoNqQ0E1Y+oD5dCaPlBOSsZg3rx5 + 7rDDDoP1YyiHE8cff7x79dVX3V9//VV9VR2onlEYVBsKqhlTHyiH1vSBclIylB9//NEdddRRsHYMZa9C + xgvImIB6QDWNwqDaUFDNmPpAObSmD5STkiHISbgRI0YEXeJDyjkE2aO488473YYNG6qvVh+ovlEYVBsK + qhlTHyiH1vSBclIyhBkzZridd94Z1q1XqSejAmXPInQUoIBewygMqg0F1YypD5RDa/pAOSlZLz/99JM7 + 4IADYM163HfffSsjBb/55pvqK8QBvZZRGFQbCqoZUx8oh9b0gXJSsl5kDH+My3277rqrGzp0aOUSovbM + vgX0mkZhUG0oqGZMfaAcWtMHyknJeti4cWOUs/4yvPeVV15Rj+qrB/S6RmFQLSFFY/r06fC7blFu9pHj + /EaDXtsoDKolpEj8+eefbsCAAfC7bvGII45wv/32W7Vq40CvbRQG1RJSJL799lvXtWtX+F23eOSRR1bm + Bmg06LWNwqBaQoqEDPmNcaPPMccc41atWlWt2jjQaxuFQbWEFImnnnoKfs+t9uzZs+7RfRbQaxuFQbWE + FIlrr70Wfs+t9urVyzy5hxYZPTht2jT30ksvwdc2CoNqCSkSw4cPh99zq3369HG///57tWoc5PKkzBp0 + 8sknV8YoyHRi6LWNwqBaQorEGWecAb/nVvv37+/WrVtXrRqGXJn44IMPKlcntjw/MXr06K1es05hUG0o + qGaR9IFyYuoD5aRksxk4cCBcDqvSrJoJPdpC7hWQ6cHkhqQ999xzu9cYM2bMdrE6hEG1oaCaRdIHyomp + D5STks1m8ODBcDmsytx+IYcAMoho3Lhxbo899oD1xUIcAqCaRdIHyompD5STks3mkksugcthVe4BGDly + pPvoo49Md/3Jj8Zdd91VGYrc1m3I8rfx48fDvxmFQbWhoJpF0gfKiakPlJOSzebBBx+Ey1GvO+20kzvl + lFMq04f/8MMPrd4XIFcMnn/++coAIs38A1J3ypQp8G9GYVBtKKhmkfSBcmLqA+WkZLN54YUX4HKEKg17 + 4IEHugsvvLAyxVjLXoH896233qpcNrQMQJKHi7zxxhvwb0ZhUG0oqGaR9IFyYuoD5aRks5EJORs9669M + CnLqqadW9jZk9t+2niLUmnvttVdlpCH6m1EYVBsKqlkkfaCcmPpAOSnZbGRizthTgDVCmWNAQH8zCoNq + Q0E1i6QPlBNTHygnJZvN1KlT4XKkpBxOyA+VgP5uFAbVElIkzj33XPg9T8nu3bu75cuXV5YX/d0oDKol + pCjII7t32203+D1PSRkf0HI1Af3dKAyqJaQIyKg9Oa5G3/GU7NSpk1u6dGl1qfkDQEgUZKrues7GN1N5 + ErFMV7Yl6N8ZhUG1hOQZeRTXfffdVzmxhr7fKTlo0KDtbjFG/84oDKolJK/IcbQMu+3QoQP8bqekDCJa + smRJdclroH9rFAbVEpJHpPllIE7qu/2iHPe//vrr1SXfGvTvjcKgWkLyhuz2y3P58tD88kQhuebf2j0E + KMcoDKoNBdVMSR8oJ6Y+UE5Kpsi9996bi91+mZ14zpw5bd5NiPKMwqDaUFDNlPSBcmLqA+WkZErI035l + y5/6CT+5F+Gkk06qTFHuu5UY5RuFQbWhoJop6QPlxNQHyknJlLjjjjsq9+mj5UzFvffe202aNMmtWLGi + utRtg2oYhUG1oaCaKekD5cTUB8pJyRSQOfVS3/LLo8Tk6cELFiwwTSCCahmFQbWhoJop6QPlxNQHyknJ + FJAtf6rH/N26dXOPP/64W7RoUV1PD0Y1jcKg2lBQzZT0gXJi6gPlpGSWSEPdf//9lfvv0bLFUu4fkDkA + ZUpxmadv7Nixlf+XGYblWP7444+v/F2m8z7rrLMq045NnjzZzZ8/v9Wz+1rQ8hiFQbWhoJop6QPlxNQH + yknJrJDmv+2226I85qs1ZWiuNPXHH3/s1q5du1Uzy268HHrI1OAyz5/8Xe43kEuQMUHLZRQG1YaCaqak + D5QTUx8oJyWzQob3NrL55XzCddddFzz1dyho2YzCoFpCUkK2urfffntl64y+rzGUHxY5qVjPMXts0PIZ + hUG1hKSENH+jT/jdeuutlTEFKYCWzygMqiUkBaQh5Zi/kZf65IdFriiEnriLCVpOozColpAUkK1yo7f8 + stufypa/BbScRmFQLSFZ0oxBPnLML3sXKW35W0DLaxQG1RKSFZs2barM5NPos/133313clv+FtAyG4VB + tYRkgTT/Pffc09BBPlJbDi1SONvfGmi5jcKgWkKajez233TTTQ1tfpkrQH5gYg/ciQ1adqMwqDYUVLNI + +kA5KZkicia+kbv9omz55YcmddCyG4VBtaGgmkXSB8pJyZSQ43DZ8jf6Up/MEyiHGHkAvQejMKg2FFSz + SPpAOSmZEjfffHPDL/VJ86d6wg+B3oNRGFQbCqpZJH2gnJRMAWlIOdvf6C2/nO1P8VJfW6D3YhQG1YaC + ahZJHygnJVNAdvsbveVP+VJfW6D3YhQG1YaCahZJHygnJbNEzsDLLnkjb+yRs/0yyCcvx/zbgt6TURhU + GwqqWSR9oJyUzApp/gkTJjR06m65jCgThuThbH9roPdlFAbVhoJqFkkfKCcls0KG9zay+eV8glxOTP06 + vw/03ozCoFpCYiLH4bLlb/T9/LLlT3mEnxb0/ozCoFpCYiIn/Bo9yEfOK+R5t39L0PszCoNqCYnBxo0b + K1t+eSgG+p7FUK4kyFRhebvU1xbofRqFQbWExGD8+PENv9Qnu/15vNTXFuh9GoVBtYSEILviHORTP+j9 + GoVBtYTUi1x7v+GGGxp+P788Brwox/zbgt6zURhUS0g9SPPLBJ6NvqVXTvgV4Wx/a6D3bRQG1RJiRbbG + 119/fUObX/Yq5CGbeb/O7wO9d6MwqJYQC/LEHLmrrxmX+ore/AJ670ZhUC0hWuRSn2z5G3nCTx7//cAD + D+R2bL8VtA6MwqBaQjTIcfjVV1/d8C2/NH9RT/gh0DowCoNqCWkLue7+4YcfusGDB7sddtgBfodi2LLl + tzxbvwigdWEUBtWS8iDH1HPnznWPPPKIGz16dOXx1/369XN9+vSp/P/FF1/s7r33Xvfkk0+6adOmVQb3 + 9O/f3+2zzz7wuxPTiRMnlmrL3wJaF0ZhUC0pLrI1/f77790zzzzjhg0b5vbbbz/4HchSOaSQQT5lOebf + FrROjMKgWlI8pPGXLFnirrrqKte5c+eGnrQLUa7zy95IGc72twZaL0ZhUC0pFqtXr67sTh900EHw805F + uV1Y5u0v8iAfDWjdGIVBtaQYyDj5hQsXuhNOOCHZLX6LMrb/4YcfLn3zC2j9GIVBtaQYvPLKK8lv9Vss + 26W+tkDrxygMqiX5Rk6ezZo1y3Xs2BF+vikpl/oeeuihQt7VVy9oPRmFQbUk37z++utJnt1HSvNzy781 + aD0ZhUG1JL98/vnnbv/994efa0rKMb/c0sst//ag9WUUBtWSfCLj8gcOHNjQ0XkxlLP9cqmPW34MWmdG + YVAtyR9ynV+m3UafZ0rK7cJlHuSjAa03ozColuSP+fPnVwb4oM8zFWXP5NJLLy31IB8NaN0ZhUG1JH+M + Gzcu+V3/Qw45xP3888/VJSatgdadURhUS/LF8uXL3e677w4/y5QcNWoUT/opQOvOKAyqJflCjqnR55ia + cjch8YPWnVEYVEvyw9q1a12vXr3g55iab775ZnWpSVugdWcUBtWS/LBgwQLXpUsX+Dm2pTytp2/fvu6c + c85p2ohBmXeA+EHrzigMqiX5QUb9WW70kcbv3bu3mzlz5n/X4X/55ZfKWPyTTjrJ7bbbbjAvhq+++mrl + 9UjboHVnFAbVkvwg02Sjz3BbpfHlxiCZCOT333+vZm/NunXr3BdffOEuu+yyyiXF2E/znTp1avWVSFug + dWcUBtWS/DBmzBj4GW5p165dKw/sWLx4cTXLj0weMmXKFDdgwABYsx5lOjHiB607ozColuSHM888E36G + otwQNHbsWLd06dK6L7/J3kKswwKZc5D4QevOKAyqJflBJvvY9vOT4bYXXnih++ijj6IMuY01Aejw4cNL + N8NvPaB1ZxQG1ZL8IGfyWz43mU9PTuS99dZbUQfcxLpKcMEFF/AHQAFad0ZhUC3JD4MGDap8Zocffrh7 + 8cUX3Zo1a6p/iUes5/3JFOPED1p3RmFQLckPMo+ePDNPzuA3ApmjT64goO+J1QkTJlSrkrZA684oDKol + +UF29Ru5W71+/fpoPwDTp0+vViVtgdadURhUS0gLq1ativYD8Mknn1SrkrZA684oDKolpIVly5ZF+QGQ + gUWcBEQHWn9GYVAtIS38+OOPUX4AZHQh0YHWn1EYVEtIC/IU4NAfAJn6W+oQHWgdGoVBtYQIcvfeluMM + 6rVnz55u5cqV1arEB1qHRmFQLSkvcpw+b968yjX7WDcDTZ48uVqdaEDr0CgMqiXlRMb9X3HFFa5Tp07w + e1GPRx11VOVSItGD1qNRGFRLyoVM1PnYY4/VNbFIW8pNRC+//HL1VYgWtC6NwqBaUnxk8JCMHpRbfg8+ + +ODoTw+WGYrl7j9OAW4HrU+jMKjWct84yR8bNmxwTz/9tOvXr1/DphI/8cQTeeKvDqT30Po0CoNqZ8+e + XV0cUiSk8d955x3Xv3//aDf4IOXGpK+++qr6qsSC9B5ap0ZhUO1FF11UXRxSBGR3//3333dDhw6tXJNH + n3ksu3fvziG/AUjvofVqFAbVypNbZaJIkn9k2nCZFajRjS+DheR6v8wpSOpDek56D61fozBoUmZvIflH + Lu0NHjy44Y8Nk6f+cKMRhvQcWrd1CINmn3jiieqikTwjx/4TJ050hx56aNQfAqnVo0ePyglFzvQThvQa + Wsd1CoNmZSQYfwSKg8z0e+ONN7p999036LKffC9kpmH5bqxYsYLNH4isx8hTsMNg3cquCXfvioP8EDz6 + 6KNuyJAh7sADD1Td7CM/GHKCT+b1mzFjhlu9enW1GqkX6amIu/1bCoNByskJOUMplyk4TqAY/PHHH5Vr + 9fPnz688uPOaa65xw4YNc6effro7++yz3ciRIyt7DLNmzXKLFi2qND0H9oQhvSM9JL0U6YQfEgYppeUQ + Biml5RAGKaXlEAYppeUQBiml5RAGKaXlEAYppeWw3eJtApTScii93272FgFKaXmU3m930RYBSml5lN5v + 12Gzv1QDlNJyKD0vvV9h+GbRP6KUFlPp+a14YrPoH1JKi6X0+na03yx/BCgtttLj0uutIrsGPCdAabGU + nt5ut7815OSAnCGUywQcJ0BpPpXelR6WXv7vhF+Ndu3+D6LWAdnKS/AsAAAAAElFTkSuQmCC + + + + Manage Mods + + + reloadToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openPluginsDirectoryToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toggleToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + deleteToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + showDebugToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + modEnabled + + + System.Windows.Forms.DataGridViewCheckBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + modName + + + System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + FormModManager + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TS SE Tool/Forms/FormPluginManager.Designer.cs b/TS SE Tool/Forms/FormPluginManager.Designer.cs new file mode 100644 index 00000000..d8ab9278 --- /dev/null +++ b/TS SE Tool/Forms/FormPluginManager.Designer.cs @@ -0,0 +1,168 @@ +namespace TS_SE_Tool.Forms { + partial class FormPluginManager { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormPluginManager)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.reloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openPluginsDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.x64ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.x86ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tablePlugins = new System.Windows.Forms.DataGridView(); + this.pluginContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toggleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openFoldersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.showDebugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tablePlugins)).BeginInit(); + this.pluginContextMenu.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.reloadToolStripMenuItem, + this.openPluginsDirectoryToolStripMenuItem, + this.addToolStripMenuItem}); + resources.ApplyResources(this.menuStrip1, "menuStrip1"); + this.menuStrip1.Name = "menuStrip1"; + // + // reloadToolStripMenuItem + // + this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem"; + resources.ApplyResources(this.reloadToolStripMenuItem, "reloadToolStripMenuItem"); + this.reloadToolStripMenuItem.Click += new System.EventHandler(this.reloadToolStripMenuItem_Click); + // + // openPluginsDirectoryToolStripMenuItem + // + this.openPluginsDirectoryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.x64ToolStripMenuItem, + this.x86ToolStripMenuItem}); + this.openPluginsDirectoryToolStripMenuItem.Name = "openPluginsDirectoryToolStripMenuItem"; + resources.ApplyResources(this.openPluginsDirectoryToolStripMenuItem, "openPluginsDirectoryToolStripMenuItem"); + // + // x64ToolStripMenuItem + // + this.x64ToolStripMenuItem.Name = "x64ToolStripMenuItem"; + resources.ApplyResources(this.x64ToolStripMenuItem, "x64ToolStripMenuItem"); + this.x64ToolStripMenuItem.Click += new System.EventHandler(this.openPluginsDirToolStripMenuItem_Click); + // + // x86ToolStripMenuItem + // + this.x86ToolStripMenuItem.Name = "x86ToolStripMenuItem"; + resources.ApplyResources(this.x86ToolStripMenuItem, "x86ToolStripMenuItem"); + this.x86ToolStripMenuItem.Click += new System.EventHandler(this.openPluginsDirToolStripMenuItem_Click); + // + // tablePlugins + // + this.tablePlugins.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + resources.ApplyResources(this.tablePlugins, "tablePlugins"); + this.tablePlugins.Name = "tablePlugins"; + this.tablePlugins.CellContextMenuStripNeeded += new System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventHandler(this.tablePlugins_CellContextMenuStripNeeded); + // + // pluginContextMenu + // + this.pluginContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toggleToolStripMenuItem, + this.openFoldersToolStripMenuItem, + this.deleteToolStripMenuItem, + this.toolStripSeparator1, + this.showDebugToolStripMenuItem}); + this.pluginContextMenu.Name = "pluginContextMenu"; + resources.ApplyResources(this.pluginContextMenu, "pluginContextMenu"); + // + // toggleToolStripMenuItem + // + this.toggleToolStripMenuItem.Name = "toggleToolStripMenuItem"; + resources.ApplyResources(this.toggleToolStripMenuItem, "toggleToolStripMenuItem"); + this.toggleToolStripMenuItem.Click += new System.EventHandler(this.toggleToolStripMenuItem_Click); + // + // openFoldersToolStripMenuItem + // + this.openFoldersToolStripMenuItem.Name = "openFoldersToolStripMenuItem"; + resources.ApplyResources(this.openFoldersToolStripMenuItem, "openFoldersToolStripMenuItem"); + this.openFoldersToolStripMenuItem.Click += new System.EventHandler(this.openFoldersToolStripMenuItem_Click); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + resources.ApplyResources(this.deleteToolStripMenuItem, "deleteToolStripMenuItem"); + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + // + // showDebugToolStripMenuItem + // + this.showDebugToolStripMenuItem.Name = "showDebugToolStripMenuItem"; + resources.ApplyResources(this.showDebugToolStripMenuItem, "showDebugToolStripMenuItem"); + this.showDebugToolStripMenuItem.Click += new System.EventHandler(this.showDebugToolStripMenuItem_Click); + // + // addToolStripMenuItem + // + this.addToolStripMenuItem.Name = "addToolStripMenuItem"; + resources.ApplyResources(this.addToolStripMenuItem, "addToolStripMenuItem"); + this.addToolStripMenuItem.Click += new System.EventHandler(this.addToolStripMenuItem_Click); + // + // FormPluginManager + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tablePlugins); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "FormPluginManager"; + this.Load += new System.EventHandler(this.FormPluginManager_Load); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tablePlugins)).EndInit(); + this.pluginContextMenu.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem openPluginsDirectoryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem x64ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem x86ToolStripMenuItem; + private System.Windows.Forms.DataGridView tablePlugins; + private System.Windows.Forms.ContextMenuStrip pluginContextMenu; + private System.Windows.Forms.ToolStripMenuItem toggleToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openFoldersToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem showDebugToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reloadToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem; + } +} \ No newline at end of file diff --git a/TS SE Tool/Forms/FormPluginManager.aa-ER.resx b/TS SE Tool/Forms/FormPluginManager.aa-ER.resx new file mode 100644 index 00000000..ac6af749 --- /dev/null +++ b/TS SE Tool/Forms/FormPluginManager.aa-ER.resx @@ -0,0 +1,1732 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAABAQAAAAQAgAChCAABmFQAAgIAAAAEA + IAAoCAEAjlcAAAAAAAABACAA6BgAALZfAQAoAAAAEAAAACAAAAABACAAAAAAAAAIAAAAAAAAAAAAAAAA + AAAAAAAAAAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAP/q6ur/////////////////////////////////rq6u/y4uLv/e3t7///////// + ////////6urq/wAAAP8AAAD/////////////////////////////////z8/P/5KSkv8jIyP/mJiY//// + //////////////////8AAAD/AAAA//////////////////////////////////r6+v9ubm7/MzMz/ykp + Kf/n5+f/////////////////AAAA/wAAAP////////////////////////////////////////////39 + /f9iYmL/KSkp/+fn5////////////wAAAP8AAAD//////wAAAP8AAAD//////wAAAP//////AAAA/wAA + AP///////f39/2JiYv8oKCj/o6Oj/+Xl5f8AAAD/AAAA//////////////////////////////////// + ///////////////////9/f3/NDQ0/yQkJP9ERET/AAAA/wAAAP//////AAAA//////8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD//////2hoaP9eXl7/7u7u/wAAAP8AAAD///////////////////////// + ///////////////////////////////////39/f/sLCw/+np6f8AAAD/AAAA//////8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD//////wAA + AP//////AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP//////AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/6urq/////////////////////////////////////////////////////////////////+rq + 6v8AAAD/AAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/q6ur//////////////////////////////////////////////////// + ///////////////////Nzc3/ISEh/xYWFv9ycnL/+vr6//////////////////////////////////// + ////////q6ur/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + ///////////////////////////////////Jycn/MDAw/wAAAP+BgYH///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////+4uLj/6Ojo//////9/f3//AAAA/zIyMv////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////////////////////////////////////4aGhv8NDQ3/U1NT/w0NDf8AAAD/MTEx//// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////////// + ////////////////////////////////////////////////////////7e3t/yYmJv8AAAD/AAAA/wAA + AP8CAgL/n5+f////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////8/Pz/5+f + n/+NjY3/Pz8//wAAAP8CAgL/np6e//////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + ///////////////////39/f/R0dH/wAAAP8CAgL/np6e/////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP/////////////////39/f/SEhI/wAAAP8CAgL/np6e//////////////////// + ////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + ///////////////////////////////////////////////////39/f/SEhI/wAAAP8CAgL/nZ2d//// + //////////////////8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP/////////////////39/f/SUlJ/wAA + AP8CAgL/RERE/0tLS/+ampr//v7+/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///39/f/QEBA/wAAAP8AAAD/AAAA/wAAAP+EhIT/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+QkJD/AAAA/wsLC/+Ghob/bGxs/yAgIP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5mZmf8AAAD/IyMj////////////39/f/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP//////7Ozs/xkZGf8BAQH/VVVV/9ra2v//////AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////4ODg/25ubv9WVlb/qKio//// + //8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD//////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/qqqq//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////qqqq/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAAEAAAACAAAAAAQAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACQAAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD9AAAAxQAAACQAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/JCQk/8XFxf/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Q0ND/Xl5e/yMjI/8XFxf/Pz8//5aWlv/5+fn///////////////////////// + ///////////////////////////////////////////////////////////////////9/f3/xcXF/yQk + JP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8XFxf////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3/aWlp/wQEBP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+zs + 7P////////////////////////////////////////////////////////////////////////////// + ///////////////////FxcX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////V1dX/UVFR/wEB + Af8AAAD/AAAA/wAAAP9HR0f//v7+//////////////////////////////////////////////////// + /////////////////////////////////////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////++vr7/AAAA/wAAAP8AAAD/AAAA/76+vv////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+Pj4//f39////////////////////////Pz8/wAAAP8AAAD/AAAA/wAAAP9vb2////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8/Pz/8hISH/pqam//39/f////////////7+/v8DAwP/AAAA/wAA + AP8AAAD/V1dX//////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////n5+f/AgIC/wAAAP80NDT/tbW1/5iY + mP80NDT/AAAA/wAAAP8AAAD/AAAA/2lpaf////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/zIy + Mv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9cXFz///////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+3t7f/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BwcH/7m5 + uf////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5OTk/8EBAT/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8JCQn/ubm5//////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////zs7O/2Bg + YP8gICD/EhIS/yQkJP8FBQX/AAAA/wAAAP8AAAD/AAAA/wkJCf+5ubn///////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////19fX/yAgIP8AAAD/AAAA/wAAAP8AAAD/CQkJ/7i4 + uP///////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////e3t7/ICAg/wAA + AP8AAAD/AAAA/wAAAP8KCgr/uLi4//////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////97e3v8gICD/AAAA/wAAAP8AAAD/AAAA/wkJCf+4uLj///////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD////////////////////////////////////////////e3t7/ISEh/wAA + AP8AAAD/AAAA/wAAAP8JCQn/t7e3//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9/f3/8hISH/AAAA/wAAAP8AAAD/AAAA/wkJCf+3t7f///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA///////////////////////////////////////g4OD/IiIi/wAA + AP8AAAD/AAAA/wAAAP8ICAj/eHh4/5aWlv+Li4v/oaGh/+jo6P////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////9/f3/8iIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwf/eXl5//r6 + +v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////4ODg/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9eXl7//v7+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////a2tr/BgYG/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7Kysv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////ywsLP8AAAD/AAAA/wAAAP8AAAD/AgIC/0BAQP8mJib/AAAA/wAAAP9NTU3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////8YGBj/AAAA/wAAAP8AAAD/LCws/9nZ2f//////+fn5/5GR + kf8UFBT/Hh4e/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////Gxsb/wAAAP8AAAD/AAAA/0pK + Sv//////////////////////7+/v/5CQkP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0pK + Sv8AAAD/AAAA/wAAAP9ERET/////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+1tbX/AAAA/wAAAP8AAAD/BAQE/2VlZf/j4+P//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////2RkZP8AAAD/AAAA/wAAAP8AAAD/CgoK/3p6 + ev/v7+////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////8/Pz/hYWF/w4O + Dv8AAAD/AAAA/wAAAP8QEBD/nZ2d////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////x8fH/t7e3/6Ghof+4uLj/8/Pz/////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/xMTE//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8TExP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//ExMT//f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/8TExP8jIyP/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxAAAACMAAADEAAAA/QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAA + ACOAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAASgAAACAAAAAAAEAAAEAIAAAAAAAAAACAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAADDAAAA+AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAwwAAAFIAAAAAAAAAAAAAAAAAAACOAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAI4AAAAAAAAAUgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFIAAADDAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAPgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/Dw8P/+Pj4//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///d3d3/lZWV/1xcXP8xMTH/JSUl/zY2Nv9jY2P/m5ub/+Tk5P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////j4+P/Dw8P/UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Ojo7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////g4OD/YGBg/wUFBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/CAgI/21tbf/n5+f///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////jo6O/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/UlJS//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+fn5/zAw + MP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xgYGP+6urr///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Dw8P///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8fHx/4WFhf8QEBD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv+ysrL///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///Dw8P/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//j4+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Xl5f9ycnL/CQkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8P + D//S0tL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////j4+P8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////d3d3/Xl5e/wUF + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zo6Ov/8/Pz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/zc3N/0BAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/6ysrP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6urq/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/T09P//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////19fX/AQEB/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FBQX/8vLy//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+Li4v/d3d3///////////////////////////////////////// + //////////////v7+/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Gxsb///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////n5+f/wkJ + Cf95eXn/7+/v/////////////////////////////////////////////////wQEBP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/6+vr/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+hoaH/AAAA/wAAAP8YGBj/kJCQ//n5+f////////////// + ///////////////////8/Pz/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ra2t//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7u7 + u/8AAAD/AAAA/wAAAP8AAAD/Jycn/6mpqf/8/Pz////////////x8fH/mZmZ/zc3N/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/ExMT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////5eXl/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/zc3 + N/+goKD/X19f/xISEv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9/f + 3/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/Li4u/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/1tbW//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+bm5v/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP+ZmZn///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////T09P8mJib/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwcHP/e3t7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8PDw/8FBQX/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/ycnJ//g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////52dnf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/h4eH///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////6ur + q/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/g4OD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////97e3v9cXFz/BgYG/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQk + JP/h4eH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////h4eH/mJiY/1VVVf8qKir/HBwc/ysrK/9JSUn/RUVF/xMTE/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//g4OD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8PDw/25ubv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yUlJf/g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////f39/319 + ff8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUlJf/e3t7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/35+fv8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/e3t7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUl + Jf/e3t7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////3x8fP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/f39////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yMjI//f39////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /////////////////////////////////////////////////////////////////////////////39/ + f/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yIiIv/f39////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + /////////////////////////////////////////v7+/4GBgf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEhIf/e3t7///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + /////////f39/39/f/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//e3t7///////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + /////////////////////////////////////////////////////////f39/4CAgP8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////f39/4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yQkJP/d3d3///////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/4CA + gP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/d3d3///////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4CAgP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEh + If/d3d3///////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + /////////////////////////////////////////////////////////////4KCgv8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x8fH//AwMD/+/v7///////9/f3/+fn5//n5 + +f/+/v7/////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + /////////////////////////v7+/4SEhP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wMDA/8kJCT/NTU1/ygoKP8cHBz/Hh4e/ywsLP9ZWVn/rq6u//X19f////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////////////////f39/4KC + gv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/Hh4e/52dnf/6+vr//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + /////////////////////////////////////////f39/4ODg/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/01N + Tf/t7e3/////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/4SEhP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zg4OP/u7u7///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/4ODg/8BAQH/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/7+/v//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////3Jycv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/6enp///////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9vb2/xcX + F/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/KCgo//n5+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////////////////////////////////////VVVV/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/wsLC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //9aWlr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP9NTU3/s7Oz/4eH + h/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP9wcHD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////////////////////////////////////zw8PP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/xoaGv+Dg4P/4eHh//7+/v///////////+fn5/9oaGj/CQkJ/wAAAP8AAAD/AAAA/0VF + Rf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////JCQk/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/l5eX//////////////////// + ///////////////////V1dX/Tk5O/wMDA/8AAAD/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8oKCj/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP+Wlpb////////////////////////////////////////////9/f3/v7+//z09 + Pf8zMzP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////0RERP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5GRkf////////////// + /////////////////////////////////////////f39/9PT0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////cHBw/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/jY2N//////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+2trb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Dg4P///////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////39/f8tLS3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf+Dg4P/8/Pz//////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////////////////////6mpqf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8cHBz/lpaW//f39////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////f39/1pa + Wv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KSkp/7CwsP/7+/v///////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////8/Pz/0NDQ/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AgIC/zs7O//BwcH//v7+//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9PT0/2JiYv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUF + Bf+zs7P//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/7S0tP84ODj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8/Pz//vr6+//7+/v//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////IyMj/goKC/1xcXP9ERET/Q0ND/11dXf+FhYX/zs7O//// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/9/f3//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9/f3/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/BwcH///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///BwcH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1BQUP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1BQUP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4qKiv////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+Kior/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1BQUP/BwcH/9/f3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////f39//BwcH/UFBQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAMEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADBAAAAUAAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFAAAAAAAAAAigAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACKAAAAAAAA + AAAAAAAAAAAAUAAAAMEAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPcAAADBAAAAUAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAeJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAAAABc1JHQgCuzhzpAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwwAADsMBx2+o + ZAAAGH1JREFUeF7tnXnIVVUXh63sy2weFESaKaXBDMypMsLCigytBCnTFAobKYpMm+dJm6Q/NAskM8LI + gqCMoqiwkcpsUrBJK4dyyKnB2p/rct+uw+9991p373vPPuf8Hngo1uta99xz77pn2mefdq3QYbMjNjtr + s99t1lFKc6f0rvSw9LL0tIrzNrt4s6ggpTSfSk9Lb7dK+81O3ixKppQWQ+lx6fXtYPNTWg6l17dCdg3Q + P6SUFtP/Dgfk5ACP+Sktl9LzlRODcoYQ/QNKabGV3q9cJkB/pJQWW+l9XuentKRK78M/UErLIQxSSssh + DFJKyyEMUkrLIQxSSsshDFJKyyEMUkrLIQwG2aFDBzdixAg3a9Ys99133zlCiB3pHekh6SXpKdRrEYTB + uj3vvPPc4sWLq2+BEBID6SnpLdRzgcKg2fbt27vJkydXF5cQ0gikx6TXUA/WKQyaZfMT0hyk11AP1ikM + mpRdE0JI84h4OACDauXkBI/5CWku0nORTgzCoFo5Q0kIaT7Se6gnjcKgWrlMQQhpPtJ7qCeNwqBaXucn + JBuk91BPGoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID + 9aRRGFRLCMkO1JNGYVBtKKhmSvpAObSmD5RTJkNBNY3CoNpQUM2U9IFyaE0fKKdMhoJqGoVBtaGgminp + A+XQmj5QTpkMBdU0CoNqQ0E1U9IHyqE1faCcMhkKqmkUBtWGgmqmpA+UQ2v6QDllMhRU0ygMqg0F1UxJ + HyiH1vSBcspkKKimURhUGwqqmZI+UA6t6QPllMlQUE2jMKg2FFQzJX2gHFrTB8opk6GgmkZhUC0hJDtQ + TxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhU + SwjJDtSTRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMkfaCcPBkKqmkUBtWGgmrSmj5QTpH0 + gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMk + faCcPBkKqmkUBtWGgmrSmj5QTpH0gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQLSEkO1BPGoVB + tYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO + 1JNGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOh + oJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhUSwjJDtSTRmFQLSEkO1BP + GoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUG0oqCat6QPlxNQHyklJHyinmYaCahqFQbWhoJq0 + pg+UE1MfKCclfaCcZhoKqmkUBtWGgmrSmj5QTkx9oJyU9IFymmkoqKZRGFQbCqpJa/pAOTH1gXJS0gfK + aaahoJpGYVBtKKgmrekD5cTUB8pJSR8op5mGgmoahUG1oaCatKYPlBNTHygnJX2gnGYaCqppFAbVhoJq + 0po+UE5MfaCclPSBcpppKKimURhUGwqqSWv6QDkx9YFyUtIHymmmoaCaRmFQLSEkO1BPGoVBtYSQ7EA9 + aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBt + KKhmSvpAOTSePlBOngwF1TQKg2pDQTVT0gfKofH0gXLyZCioplEYVBsKqpmSPlAOjacPlJMnQ0E1jcKg + 2lBQzZT0gXJoPH2gnDwZCqppFAbVhoJqpqQPlEPj6QPl5MlQUE2jMKg2FFQzJX2gHBpPHygnT4aCahqF + QbWhoJop6QPl0Hj6QDl5MhRU0ygMqg0F1UxJHyiHxtMHysmToaCaRmFQLSEkO1BPGoVBtYSQ7EA9aRQG + 1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBtKKhm + kfSBcmLqA+XQmqmDltkoDKoNBdUskj5QTkx9oBxaM3XQMhuFQbWhoJpF0gfKiakPlENrpg5aZqMwqDYU + VLNI+kA5MfWBcmjN1EHLbBQG1YaCahZJHygnpj5QDq2ZOmiZjcKg2lBQzSLpA+XE1AfKoTVTBy2zURhU + GwqqWSR9oJyY+kA5tGbqoGU2CoNqQ0E1i6QPlBNTHyiH1kwdtMxGYVAtISQ7UE8ahUG1hJDsQD1pFAbV + EkJqrFy50n399ddu7ty5bubMme6RRx5xt99+u7vlllvcpEmT3HPPPefee+89t3DhQrd69Wr377//VjPr + A/WkURhUSwhx7t1333WjRo1yPXr0cJ07d3b/+9//YL+I8rcuXbq44447zl1++eXu008/rfuHANU3CoNq + CSkrv/76q3v22Wdd79693Q477AD7Q+OOO+7oTjvtNDd79my3Zs2aanUdqJ5RGFRLSNnYtGmTmzNnjjv6 + 6KNd+/btYV/U4y677OL69u3rPvvsM/fPP/9UX61tUB2jMKiWkDKxbNkyd+WVV1aaFfVDDDt27Ojuuece + 98cff1RftXVQvlEYVEtIWfjyyy/dscceW9llR70Qy913392df/75bv369dVXbh2UbxQG1YaCasbUB8qh + NX2gnJSMxdtvv+26desGXyOWch5hyJAh7rXXXnN///139ZXbBtUxCoNqQ0E1Y+oD5dCaPlBOSsZg3rx5 + 7rDDDoP1YyiHE8cff7x79dVX3V9//VV9VR2onlEYVBsKqhlTHyiH1vSBclIylB9//NEdddRRsHYMZa9C + xgvImIB6QDWNwqDaUFDNmPpAObSmD5STkiHISbgRI0YEXeJDyjkE2aO488473YYNG6qvVh+ovlEYVBsK + qhlTHyiH1vSBclIyhBkzZridd94Z1q1XqSejAmXPInQUoIBewygMqg0F1YypD5RDa/pAOSlZLz/99JM7 + 4IADYM163HfffSsjBb/55pvqK8QBvZZRGFQbCqoZUx8oh9b0gXJSsl5kDH+My3277rqrGzp0aOUSovbM + vgX0mkZhUG0oqGZMfaAcWtMHyknJeti4cWOUs/4yvPeVV15Rj+qrB/S6RmFQLSFFY/r06fC7blFu9pHj + /EaDXtsoDKolpEj8+eefbsCAAfC7bvGII45wv/32W7Vq40CvbRQG1RJSJL799lvXtWtX+F23eOSRR1bm + Bmg06LWNwqBaQoqEDPmNcaPPMccc41atWlWt2jjQaxuFQbWEFImnnnoKfs+t9uzZs+7RfRbQaxuFQbWE + FIlrr70Wfs+t9urVyzy5hxYZPTht2jT30ksvwdc2CoNqCSkSw4cPh99zq3369HG///57tWoc5PKkzBp0 + 8sknV8YoyHRi6LWNwqBaQorEGWecAb/nVvv37+/WrVtXrRqGXJn44IMPKlcntjw/MXr06K1es05hUG0o + qGaR9IFyYuoD5aRksxk4cCBcDqvSrJoJPdpC7hWQ6cHkhqQ999xzu9cYM2bMdrE6hEG1oaCaRdIHyomp + D5STks1m8ODBcDmsytx+IYcAMoho3Lhxbo899oD1xUIcAqCaRdIHyompD5STks3mkksugcthVe4BGDly + pPvoo49Md/3Jj8Zdd91VGYrc1m3I8rfx48fDvxmFQbWhoJpF0gfKiakPlJOSzebBBx+Ey1GvO+20kzvl + lFMq04f/8MMPrd4XIFcMnn/++coAIs38A1J3ypQp8G9GYVBtKKhmkfSBcmLqA+WkZLN54YUX4HKEKg17 + 4IEHugsvvLAyxVjLXoH896233qpcNrQMQJKHi7zxxhvwb0ZhUG0oqGaR9IFyYuoD5aRks5EJORs9669M + CnLqqadW9jZk9t+2niLUmnvttVdlpCH6m1EYVBsKqlkkfaCcmPpAOSnZbGRizthTgDVCmWNAQH8zCoNq + Q0E1i6QPlBNTHygnJZvN1KlT4XKkpBxOyA+VgP5uFAbVElIkzj33XPg9T8nu3bu75cuXV5YX/d0oDKol + pCjII7t32203+D1PSRkf0HI1Af3dKAyqJaQIyKg9Oa5G3/GU7NSpk1u6dGl1qfkDQEgUZKrues7GN1N5 + ErFMV7Yl6N8ZhUG1hOQZeRTXfffdVzmxhr7fKTlo0KDtbjFG/84oDKolJK/IcbQMu+3QoQP8bqekDCJa + smRJdclroH9rFAbVEpJHpPllIE7qu/2iHPe//vrr1SXfGvTvjcKgWkLyhuz2y3P58tD88kQhuebf2j0E + KMcoDKoNBdVMSR8oJ6Y+UE5Kpsi9996bi91+mZ14zpw5bd5NiPKMwqDaUFDNlPSBcmLqA+WkZErI035l + y5/6CT+5F+Gkk06qTFHuu5UY5RuFQbWhoJop6QPlxNQHyknJlLjjjjsq9+mj5UzFvffe202aNMmtWLGi + utRtg2oYhUG1oaCaKekD5cTUB8pJyRSQOfVS3/LLo8Tk6cELFiwwTSCCahmFQbWhoJop6QPlxNQHyknJ + FJAtf6rH/N26dXOPP/64W7RoUV1PD0Y1jcKg2lBQzZT0gXJi6gPlpGSWSEPdf//9lfvv0bLFUu4fkDkA + ZUpxmadv7Nixlf+XGYblWP7444+v/F2m8z7rrLMq045NnjzZzZ8/v9Wz+1rQ8hiFQbWhoJop6QPlxNQH + yknJrJDmv+2226I85qs1ZWiuNPXHH3/s1q5du1Uzy268HHrI1OAyz5/8Xe43kEuQMUHLZRQG1YaCaqak + D5QTUx8oJyWzQob3NrL55XzCddddFzz1dyho2YzCoFpCUkK2urfffntl64y+rzGUHxY5qVjPMXts0PIZ + hUG1hKSENH+jT/jdeuutlTEFKYCWzygMqiUkBaQh5Zi/kZf65IdFriiEnriLCVpOozColpAUkK1yo7f8 + stufypa/BbScRmFQLSFZ0oxBPnLML3sXKW35W0DLaxQG1RKSFZs2barM5NPos/133313clv+FtAyG4VB + tYRkgTT/Pffc09BBPlJbDi1SONvfGmi5jcKgWkKajez233TTTQ1tfpkrQH5gYg/ciQ1adqMwqDYUVLNI + +kA5KZkicia+kbv9omz55YcmddCyG4VBtaGgmkXSB8pJyZSQ43DZ8jf6Up/MEyiHGHkAvQejMKg2FFSz + SPpAOSmZEjfffHPDL/VJ86d6wg+B3oNRGFQbCqpZJH2gnJRMAWlIOdvf6C2/nO1P8VJfW6D3YhQG1YaC + ahZJHygnJVNAdvsbveVP+VJfW6D3YhQG1YaCahZJHygnJbNEzsDLLnkjb+yRs/0yyCcvx/zbgt6TURhU + GwqqWSR9oJyUzApp/gkTJjR06m65jCgThuThbH9roPdlFAbVhoJqFkkfKCcls0KG9zay+eV8glxOTP06 + vw/03ozCoFpCYiLH4bLlb/T9/LLlT3mEnxb0/ozCoFpCYiIn/Bo9yEfOK+R5t39L0PszCoNqCYnBxo0b + K1t+eSgG+p7FUK4kyFRhebvU1xbofRqFQbWExGD8+PENv9Qnu/15vNTXFuh9GoVBtYSEILviHORTP+j9 + GoVBtYTUi1x7v+GGGxp+P788Brwox/zbgt6zURhUS0g9SPPLBJ6NvqVXTvgV4Wx/a6D3bRQG1RJiRbbG + 119/fUObX/Yq5CGbeb/O7wO9d6MwqJYQC/LEHLmrrxmX+ore/AJ670ZhUC0hWuRSn2z5G3nCTx7//cAD + D+R2bL8VtA6MwqBaQjTIcfjVV1/d8C2/NH9RT/gh0DowCoNqCWkLue7+4YcfusGDB7sddtgBfodi2LLl + tzxbvwigdWEUBtWS8iDH1HPnznWPPPKIGz16dOXx1/369XN9+vSp/P/FF1/s7r33Xvfkk0+6adOmVQb3 + 9O/f3+2zzz7wuxPTiRMnlmrL3wJaF0ZhUC0pLrI1/f77790zzzzjhg0b5vbbbz/4HchSOaSQQT5lOebf + FrROjMKgWlI8pPGXLFnirrrqKte5c+eGnrQLUa7zy95IGc72twZaL0ZhUC0pFqtXr67sTh900EHw805F + uV1Y5u0v8iAfDWjdGIVBtaQYyDj5hQsXuhNOOCHZLX6LMrb/4YcfLn3zC2j9GIVBtaQYvPLKK8lv9Vss + 26W+tkDrxygMqiX5Rk6ezZo1y3Xs2BF+vikpl/oeeuihQt7VVy9oPRmFQbUk37z++utJnt1HSvNzy781 + aD0ZhUG1JL98/vnnbv/994efa0rKMb/c0sst//ag9WUUBtWSfCLj8gcOHNjQ0XkxlLP9cqmPW34MWmdG + YVAtyR9ynV+m3UafZ0rK7cJlHuSjAa03ozColuSP+fPnVwb4oM8zFWXP5NJLLy31IB8NaN0ZhUG1JH+M + Gzcu+V3/Qw45xP3888/VJSatgdadURhUS/LF8uXL3e677w4/y5QcNWoUT/opQOvOKAyqJflCjqnR55ia + cjch8YPWnVEYVEvyw9q1a12vXr3g55iab775ZnWpSVugdWcUBtWS/LBgwQLXpUsX+Dm2pTytp2/fvu6c + c85p2ohBmXeA+EHrzigMqiX5QUb9WW70kcbv3bu3mzlz5n/X4X/55ZfKWPyTTjrJ7bbbbjAvhq+++mrl + 9UjboHVnFAbVkvwg02Sjz3BbpfHlxiCZCOT333+vZm/NunXr3BdffOEuu+yyyiXF2E/znTp1avWVSFug + dWcUBtWS/DBmzBj4GW5p165dKw/sWLx4cTXLj0weMmXKFDdgwABYsx5lOjHiB607ozColuSHM888E36G + otwQNHbsWLd06dK6L7/J3kKswwKZc5D4QevOKAyqJflBJvvY9vOT4bYXXnih++ijj6IMuY01Aejw4cNL + N8NvPaB1ZxQG1ZL8IGfyWz43mU9PTuS99dZbUQfcxLpKcMEFF/AHQAFad0ZhUC3JD4MGDap8Zocffrh7 + 8cUX3Zo1a6p/iUes5/3JFOPED1p3RmFQLckPMo+ePDNPzuA3ApmjT64goO+J1QkTJlSrkrZA684oDKol + +UF29Ru5W71+/fpoPwDTp0+vViVtgdadURhUS0gLq1ativYD8Mknn1SrkrZA684oDKolpIVly5ZF+QGQ + gUWcBEQHWn9GYVAtIS38+OOPUX4AZHQh0YHWn1EYVEtIC/IU4NAfAJn6W+oQHWgdGoVBtYQIcvfeluMM + 6rVnz55u5cqV1arEB1qHRmFQLSkvcpw+b968yjX7WDcDTZ48uVqdaEDr0CgMqiXlRMb9X3HFFa5Tp07w + e1GPRx11VOVSItGD1qNRGFRLyoVM1PnYY4/VNbFIW8pNRC+//HL1VYgWtC6NwqBaUnxk8JCMHpRbfg8+ + +ODoTw+WGYrl7j9OAW4HrU+jMKjWct84yR8bNmxwTz/9tOvXr1/DphI/8cQTeeKvDqT30Po0CoNqZ8+e + XV0cUiSk8d955x3Xv3//aDf4IOXGpK+++qr6qsSC9B5ap0ZhUO1FF11UXRxSBGR3//3333dDhw6tXJNH + n3ksu3fvziG/AUjvofVqFAbVypNbZaJIkn9k2nCZFajRjS+DheR6v8wpSOpDek56D61fozBoUmZvIflH + Lu0NHjy44Y8Nk6f+cKMRhvQcWrd1CINmn3jiieqikTwjx/4TJ050hx56aNQfAqnVo0ePyglFzvQThvQa + Wsd1CoNmZSQYfwSKg8z0e+ONN7p999036LKffC9kpmH5bqxYsYLNH4isx8hTsMNg3cquCXfvioP8EDz6 + 6KNuyJAh7sADD1Td7CM/GHKCT+b1mzFjhlu9enW1GqkX6amIu/1bCoNByskJOUMplyk4TqAY/PHHH5Vr + 9fPnz688uPOaa65xw4YNc6effro7++yz3ciRIyt7DLNmzXKLFi2qND0H9oQhvSM9JL0U6YQfEgYppeUQ + Biml5RAGKaXlEAYppeUQBiml5RAGKaXlEAYppeWw3eJtApTScii93272FgFKaXmU3m930RYBSml5lN5v + 12Gzv1QDlNJyKD0vvV9h+GbRP6KUFlPp+a14YrPoH1JKi6X0+na03yx/BCgtttLj0uutIrsGPCdAabGU + nt5ut7815OSAnCGUywQcJ0BpPpXelR6WXv7vhF+Ndu3+D6LWAdnKS/AsAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/TS SE Tool/Forms/FormPluginManager.cs b/TS SE Tool/Forms/FormPluginManager.cs new file mode 100644 index 00000000..94fe73ef --- /dev/null +++ b/TS SE Tool/Forms/FormPluginManager.cs @@ -0,0 +1,239 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Linq; +using TS_SE_Tool.Utilities; +using System.ComponentModel; +using System.Text; +using MoreLinq; +using TS_SE_Tool.CustomClasses.Program; + +namespace TS_SE_Tool.Forms { + public partial class FormPluginManager : Form { + public SupportedGame Game { get; private set; } + public BindingList Plugins = new BindingList(); + + public FormPluginManager(SupportedGame game) { + Game = game; + InitializeComponent(); + } + + public static DirectoryInfo GetPluginsDir(DirectoryInfo gameDir, string arch = "win_x64") { + var combined = gameDir.Combine("bin", arch, "plugins"); + if (!combined.Exists) combined.Create(); + return combined; + } + + public static GamePlugin? FindPluginByPath(IEnumerable plugins, FileInfo file) { + foreach (var plugin in plugins) { + if (plugin.x86 && plugin.File32bit.FullName == file.FullName) return plugin; + if (plugin.x64 && plugin.File64bit.FullName == file.FullName) return plugin; + } + return null; + } + + public static List AskUserImport() { + // Create a new instance of OpenFileDialog + OpenFileDialog openFileDialog = new OpenFileDialog { + Title = "Select one or more DLL or ZIP files", + Filter = "DLL Files (*.dll)|*.dll|ZIP Files (*.zip)|*.zip", + Multiselect = true, + }; + List selectedFiles = new List(); + if (openFileDialog.ShowDialog() == DialogResult.OK) { + foreach (string filePath in openFileDialog.FileNames) { + selectedFiles.Add(new FileInfo(filePath)); + } + } + return selectedFiles; + } + + public static HashSet FindMatchingPlugins(DirectoryInfo gameDir) { + var plugins = new HashSet(); + var x86Dir = GetPluginsDir(gameDir, "win_x86"); + var x64Dir = GetPluginsDir(gameDir, "win_x64"); + var filesToProcess = x86Dir.GetFiles("*.dll").Concat(x86Dir.GetFiles("*.disabled").Concat(x64Dir.GetFiles("*.dll")).Concat(x64Dir.GetFiles("*.disabled"))).ToList(); + + // While there are files left to process... + while (filesToProcess.Count > 0) { + // Take the next file to process + var file = filesToProcess[0]; + filesToProcess.RemoveAt(0); + + // Try to find a matching plugin for this file + var plugin = FindPluginByPath(plugins, file); // FindPluginByPath uses FileInfo for comparison + if (plugin is null) plugin = plugins.GetDirectMatch(file); + if (plugin is null) plugin = plugins.GetFuzzyMatch(file); + if (plugin is null) { + // If no matching plugin is found, create a new one + plugin = new GamePlugin() { }; + plugins.Add(plugin); + } + if (file.Is64BitDll()) plugin.File64bit = file; + else plugin.File32bit = file; + } + + // Convert to a distinct HashSet to remove duplicates + plugins = new HashSet(plugins.Distinct()); + + IO_Utilities.LogWriter($"Found {plugins.Count} distinct plugin pairs in {gameDir}"); + + return plugins; + } + + + private void PopulatePlugins() { + //tablePlugins.Rows.Clear(); + Plugins.Clear(); + FindMatchingPlugins(Game.GameDir).ForEach(p => Plugins.Add(p)); + //foreach (var plugin in Plugins) { + // tablePlugins.Rows.Add(plugin.Enabled, plugin.Name, plugin.InstallDate, plugin.File32bit != null, plugin.File64bit != null); + //} + } + + private void FormPluginManager_Load(object sender, EventArgs e) { + Text = $"Manage {Game.Name} plugins"; + tablePlugins.Columns.Clear(); + tablePlugins.Rows.Clear(); + tablePlugins.DataSource = Plugins; + tablePlugins.RowHeadersVisible = false; + tablePlugins.AllowUserToAddRows = false; + tablePlugins.AllowUserToDeleteRows = false; + tablePlugins.AllowUserToOrderColumns = true; + tablePlugins.MultiSelect = true; + tablePlugins.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + tablePlugins.CellContentClick += tablePlugins_CellContentClick; + tablePlugins.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + PopulatePlugins(); + foreach (var i in new[] { 0, 3, 4 }) + tablePlugins.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; + //Plugins.ListChanged += Plugins_ListChanged; + //Plugins.AddingNew += Plugins_ListChanged; + } + + private void Plugins_ListChanged(object sender, object e) { + //throw new NotImplementedException(); + } + + private void tablePlugins_CellContentClick(object sender, DataGridViewCellEventArgs e) { + tablePlugins.CommitEdit(DataGridViewDataErrorContexts.Commit); + } + + private void openPluginsDirToolStripMenuItem_Click(object sender, EventArgs e) { + var arch = ((ToolStripItem)sender).Text; + GetPluginsDir(Game.GameDir, "win_" + arch).OpenInExplorer(); + } + + private GamePlugin GetPluginFromRow(int rowIndex, DataGridView table = null) { + table ??= tablePlugins; + if (table is null || rowIndex < 0 || rowIndex > table.RowCount) return null; + return table.Rows[rowIndex].DataBoundItem as GamePlugin; + } + + private List GetPluginsFromSelected() { + var list = new List(); + foreach (DataGridViewRow row in tablePlugins.SelectedRows) { + list.Add(row.DataBoundItem as GamePlugin); + } + return list; + //MyType selectedItem = (MyType)list[0].DataBoundItem; //[0] ---> first item + } + + //private ContextMenuStrip strip; + private void tablePlugins_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) { + //var table = sender as DataGridView; + //if (sender is null || table is null || e is null || e.RowIndex < 0 || e.RowIndex > table.RowCount) { + // MessageBox.Show("fail"); + // return; + //} + var plugins = GetPluginsFromSelected(); //var plugin = GetPluginFromRow(e.RowIndex, table); + if (plugins.Count == 1) { + pluginContextMenu.Items[0].Text = plugins.First().Enabled ? "Disable" : "Enable"; + } else { + pluginContextMenu.Items[0].Text = "Toggle"; + } + e.ContextMenuStrip = pluginContextMenu; + } + + private DialogResult AskUser(string action, MessageBoxIcon icons = MessageBoxIcon.Question) { + var plugins = GetPluginsFromSelected(); + if (plugins is null || plugins.Count == 0) return DialogResult.Cancel; + var sb = new StringBuilder("Are you sure you want to " + action + " the following files:\n\n"); + foreach (var plugin in plugins) { + var files = plugin.Files; + if (files.Count > 0) sb.AppendLine(string.Join(", ", files.Select(f => f.Name.Quote()))); + } + return MessageBox.Show(sb.ToString(), action + " files?", MessageBoxButtons.YesNo, icons); + } + + private void toggleToolStripMenuItem_Click(object sender, EventArgs e) { + //var menuItem = sender as ToolStripMenuItem; + if (AskUser("toggle") != DialogResult.Yes) return; + GetPluginsFromSelected().ForEach(p => p.Enabled = !p.Enabled); + PopulatePlugins(); + } + + private void openFoldersToolStripMenuItem_Click(object sender, EventArgs e) { + //var menuItem = sender as ToolStripMenuItem; + var plugins = GetPluginsFromSelected(); + var folders = new List(); + foreach (var plugin in plugins) { + if (plugin.x86) folders.Add(plugin.File32bit.Directory); + if (plugin.x64) folders.Add(plugin.File64bit.Directory); + } + foreach (var folder in folders.DistinctBy(x => x.FullName).ToList()) { + folder.OpenInExplorer(); + } + } + + private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { + //var menuItem = sender as ToolStripMenuItem; + if (AskUser("delete", MessageBoxIcon.Warning) != DialogResult.Yes) return; + foreach (var plugin in GetPluginsFromSelected()) { + plugin.Delete(); + } + PopulatePlugins(); + } + + private void tablePlugins_MouseHover(object sender, EventArgs e) { + //var p = tablePlugins.PointToClient(Cursor.Position); + //var info = tablePlugins.HitTest(p.X, p.Y); + //var plugin = GetPluginFromRow(info.RowIndex, tablePlugins); + //tablePlugins.Rows[0].Cells + } + private void tablePlugins_CellMouseEnter(object sender, DataGridViewCellEventArgs e) { + + } + + private void showDebugToolStripMenuItem_Click(object sender, EventArgs e) { + MessageBox.Show(GetPluginsFromSelected().ToJson(true));// string.Join("\n", GetPluginsFromSelected().Select(p => p.ToJson()))); + } + + private void reloadToolStripMenuItem_Click(object sender, EventArgs e) { + PopulatePlugins(); + } + + private void ImportDll(FileInfo file) { + if (!file.Exists) return; + if (file.Extension.ToLower() == ".dll") { + file.CopyTo(GetPluginsDir(Game.GameDir, file.Is64BitDll() ? "win_x64" : "win_x86").CombineFile(file.Name)); + } + } + + private void addToolStripMenuItem_Click(object sender, EventArgs e) { + var selectedFiles = AskUserImport(); + if (selectedFiles.Count < 1) return; + foreach (var file in selectedFiles) { + if (file.Extension.ToLower() == ".dll") { + ImportDll(file); + } + } + PopulatePlugins(); + } + + //private void tablePlugins_CellValueChanged(object sender, DataGridViewCellEventArgs e) { + // UpdateDataGridViewSite(); + //} + } +} diff --git a/TS SE Tool/Forms/FormPluginManager.resx b/TS SE Tool/Forms/FormPluginManager.resx new file mode 100644 index 00000000..81811f9a --- /dev/null +++ b/TS SE Tool/Forms/FormPluginManager.resx @@ -0,0 +1,1935 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + 55, 21 + + + Reload + + + 97, 22 + + + x64 + + + 97, 22 + + + x86 + + + 149, 21 + + + Open Plugins Directory + + + 40, 21 + + + Add + + + 0, 0 + + + 736, 25 + + + + 0 + + + menuStrip1 + + + menuStrip1 + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + + Fill + + + 0, 25 + + + 736, 531 + + + 1 + + + tablePlugins + + + System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 347, 17 + + + 176, 22 + + + Toggle + + + 176, 22 + + + Open Folder(s) + + + 176, 22 + + + Delete + + + 173, 6 + + + 176, 22 + + + Show Debug Infos + + + 177, 98 + + + penis + + + pluginContextMenu + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 6, 13 + + + 736, 556 + + + + AAABAAUAEBAAAAEAIABoBAAAVgAAACAgAAABACAAqBAAAL4EAABAQAAAAQAgAChCAABmFQAAgIAAAAEA + IAAoCAEAjlcAAAAAAAABACAA6BgAALZfAQAoAAAAEAAAACAAAAABACAAAAAAAAAIAAAAAAAAAAAAAAAA + AAAAAAAAAAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAP/q6ur/////////////////////////////////rq6u/y4uLv/e3t7///////// + ////////6urq/wAAAP8AAAD/////////////////////////////////z8/P/5KSkv8jIyP/mJiY//// + //////////////////8AAAD/AAAA//////////////////////////////////r6+v9ubm7/MzMz/ykp + Kf/n5+f/////////////////AAAA/wAAAP////////////////////////////////////////////39 + /f9iYmL/KSkp/+fn5////////////wAAAP8AAAD//////wAAAP8AAAD//////wAAAP//////AAAA/wAA + AP///////f39/2JiYv8oKCj/o6Oj/+Xl5f8AAAD/AAAA//////////////////////////////////// + ///////////////////9/f3/NDQ0/yQkJP9ERET/AAAA/wAAAP//////AAAA//////8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD//////2hoaP9eXl7/7u7u/wAAAP8AAAD///////////////////////// + ///////////////////////////////////39/f/sLCw/+np6f8AAAD/AAAA//////8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD//////wAA + AP//////AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP//////AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/6urq/////////////////////////////////////////////////////////////////+rq + 6v8AAAD/AAAA6gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAqwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AKsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/q6ur//////////////////////////////////////////////////// + ///////////////////Nzc3/ISEh/xYWFv9ycnL/+vr6//////////////////////////////////// + ////////q6ur/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + ///////////////////////////////////Jycn/MDAw/wAAAP+BgYH///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////+4uLj/6Ojo//////9/f3//AAAA/zIyMv////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////////////////////////////////////4aGhv8NDQ3/U1NT/w0NDf8AAAD/MTEx//// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP////////////// + ////////////////////////////////////////////////////////7e3t/yYmJv8AAAD/AAAA/wAA + AP8CAgL/n5+f////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////////////////////////////////////8/Pz/5+f + n/+NjY3/Pz8//wAAAP8CAgL/np6e//////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + ///////////////////39/f/R0dH/wAAAP8CAgL/np6e/////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP/////////////////39/f/SEhI/wAAAP8CAgL/np6e//////////////////// + ////////AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + ///////////////////////////////////////////////////39/f/SEhI/wAAAP8CAgL/nZ2d//// + //////////////////8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP/////////////////39/f/SUlJ/wAA + AP8CAgL/RERE/0tLS/+ampr//v7+/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///39/f/QEBA/wAAAP8AAAD/AAAA/wAAAP+EhIT/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+QkJD/AAAA/wsLC/+Ghob/bGxs/yAgIP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////5mZmf8AAAD/IyMj////////////39/f/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP//////7Ozs/xkZGf8BAQH/VVVV/9ra2v//////AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////4ODg/25ubv9WVlb/qKio//// + //8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAA + AP8AAAD/AAAA//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAAAP//////AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD//////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/qqqq//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////qqqq/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAAEAAAACAAAAAAQAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACQAAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD9AAAAxQAAACQAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADFAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/JCQk/8XFxf/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////Q0ND/Xl5e/yMjI/8XFxf/Pz8//5aWlv/5+fn///////////////////////// + ///////////////////////////////////////////////////////////////////9/f3/xcXF/yQk + JP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/8XFxf////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////9/f3/aWlp/wQEBP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+zs + 7P////////////////////////////////////////////////////////////////////////////// + ///////////////////FxcX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////V1dX/UVFR/wEB + Af8AAAD/AAAA/wAAAP9HR0f//v7+//////////////////////////////////////////////////// + /////////////////////////////////////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////++vr7/AAAA/wAAAP8AAAD/AAAA/76+vv////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+Pj4//f39////////////////////////Pz8/wAAAP8AAAD/AAAA/wAAAP9vb2////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8/Pz/8hISH/pqam//39/f////////////7+/v8DAwP/AAAA/wAA + AP8AAAD/V1dX//////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////n5+f/AgIC/wAAAP80NDT/tbW1/5iY + mP80NDT/AAAA/wAAAP8AAAD/AAAA/2lpaf////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/zIy + Mv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9cXFz///////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+3t7f/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BwcH/7m5 + uf////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////5OTk/8EBAT/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8JCQn/ubm5//////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////zs7O/2Bg + YP8gICD/EhIS/yQkJP8FBQX/AAAA/wAAAP8AAAD/AAAA/wkJCf+5ubn///////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////19fX/yAgIP8AAAD/AAAA/wAAAP8AAAD/CQkJ/7i4 + uP///////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////e3t7/ICAg/wAA + AP8AAAD/AAAA/wAAAP8KCgr/uLi4//////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////97e3v8gICD/AAAA/wAAAP8AAAD/AAAA/wkJCf+4uLj///////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD////////////////////////////////////////////e3t7/ISEh/wAA + AP8AAAD/AAAA/wAAAP8JCQn/t7e3//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////9/f3/8hISH/AAAA/wAAAP8AAAD/AAAA/wkJCf+3t7f///////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////39/f/yEhIf8AAAD/AAAA/wAAAP8AAAD/CQkJ/7e3 + t////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA///////////////////////////////////////g4OD/IiIi/wAA + AP8AAAD/AAAA/wAAAP8ICAj/eHh4/5aWlv+Li4v/oaGh/+jo6P////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////9/f3/8iIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8HBwf/eXl5//r6 + +v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////4ODg/yEhIf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP9eXl7//v7+/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////a2tr/BgYG/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7Kysv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + /////////////ywsLP8AAAD/AAAA/wAAAP8AAAD/AgIC/0BAQP8mJib/AAAA/wAAAP9NTU3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////8YGBj/AAAA/wAAAP8AAAD/LCws/9nZ2f//////+fn5/5GR + kf8UFBT/Hh4e/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////Gxsb/wAAAP8AAAD/AAAA/0pK + Sv//////////////////////7+/v/5CQkP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////0pK + Sv8AAAD/AAAA/wAAAP9ERET/////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////+1tbX/AAAA/wAAAP8AAAD/BAQE/2VlZf/j4+P//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////2RkZP8AAAD/AAAA/wAAAP8AAAD/CgoK/3p6 + ev/v7+////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////8/Pz/hYWF/w4O + Dv8AAAD/AAAA/wAAAP8QEBD/nZ2d////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////x8fH/t7e3/6Ghof+4uLj/8/Pz/////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/9/f3///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////f39/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/xMTE//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////8TExP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//ExMT//f39//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/8TExP8jIyP/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxAAAACMAAADEAAAA/QAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAxAAA + ACOAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAASgAAACAAAAAAAEAAAEAIAAAAAAAAAACAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAADDAAAA+AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAwwAAAFIAAAAAAAAAAAAAAAAAAACOAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAI4AAAAAAAAAUgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFIAAADDAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAPgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/Dw8P/+Pj4//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///d3d3/lZWV/1xcXP8xMTH/JSUl/zY2Nv9jY2P/m5ub/+Tk5P////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////j4+P/Dw8P/UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Ojo7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////g4OD/YGBg/wUFBf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/CAgI/21tbf/n5+f///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////jo6O/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/UlJS//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+fn5/zAw + MP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xgYGP+6urr///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////UlJS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Dw8P///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////8fHx/4WFhf8QEBD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv+ysrL///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///Dw8P/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//j4+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+Xl5f9ycnL/CQkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8P + D//S0tL///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////j4+P8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////d3d3/Xl5e/wUF + Bf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zo6Ov/8/Pz///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/zc3N/0BAQP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/6ysrP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6urq/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/T09P//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////19fX/AQEB/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8FBQX/8vLy//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+Li4v/d3d3///////////////////////////////////////// + //////////////v7+/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/Gxsb///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////n5+f/wkJ + Cf95eXn/7+/v/////////////////////////////////////////////////wQEBP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/6+vr/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////+hoaH/AAAA/wAAAP8YGBj/kJCQ//n5+f////////////// + ///////////////////8/Pz/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ra2t//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////7u7 + u/8AAAD/AAAA/wAAAP8AAAD/Jycn/6mpqf/8/Pz////////////x8fH/mZmZ/zc3N/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/ExMT///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////5eXl/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/zc3 + N/+goKD/X19f/xISEv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/9/f + 3/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/Li4u/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/1tbW//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////+bm5v/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP+ZmZn///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////T09P8mJib/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwcHP/e3t7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////8PDw/8FBQX/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/ycnJ//g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////52dnf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/h4eH///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////6ur + q/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/g4OD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////97e3v9cXFz/BgYG/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQk + JP/h4eH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////h4eH/mJiY/1VVVf8qKir/HBwc/ysrK/9JSUn/RUVF/xMTE/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//g4OD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8PDw/25ubv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yUlJf/g4OD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////f39/319 + ff8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUlJf/e3t7///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////f39/35+fv8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv/e3t7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yUl + Jf/e3t7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////3x8fP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/f39////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////319ff8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yMjI//f39////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /////////////////////////////////////////////////////////////////////////////39/ + f/8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yIiIv/f39////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + /////////////////////////////////////////v7+/4GBgf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEhIf/e3t7///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + /////////f39/39/f/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMj + I//e3t7///////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + /////////////////////////////////////////////////////////f39/4CAgP8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////f39/4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/yQkJP/d3d3///////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+/4CA + gP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP/d3d3///////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////4CAgP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI//d3d3///////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////4GBgf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yEh + If/d3d3///////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + /////////////////////////////////////////////////////////////4KCgv8CAgL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x8fH//AwMD/+/v7///////9/f3/+fn5//n5 + +f/+/v7/////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + /////////////////////////v7+/4SEhP8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wMDA/8kJCT/NTU1/ygoKP8cHBz/Hh4e/ywsLP9ZWVn/rq6u//X19f////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////////////////////////////////////////////////f39/4KC + gv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/Hh4e/52dnf/6+vr//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + /////////////////////////////////////////f39/4ODg/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/01N + Tf/t7e3/////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v7+/4SEhP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zg4OP/u7u7///////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/4ODg/8BAQH/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1JSUv/7+/v//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////3Jycv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/6enp///////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////9vb2/xcX + F/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/KCgo//n5+f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////////////////////////////////////VVVV/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/wsLC/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////////////////////////////////// + //9aWlr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP9NTU3/s7Oz/4eH + h/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP9wcHD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////////////////////////////////////zw8PP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/xoaGv+Dg4P/4eHh//7+/v///////////+fn5/9oaGj/CQkJ/wAAAP8AAAD/AAAA/0VF + Rf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////JCQk/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/l5eX//////////////////// + ///////////////////V1dX/Tk5O/wMDA/8AAAD/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8oKCj/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP+Wlpb////////////////////////////////////////////9/f3/v7+//z09 + Pf8zMzP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////0RERP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5GRkf////////////// + /////////////////////////////////////////f39/9PT0/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////cHBw/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/jY2N//////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////+2trb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP+Dg4P///////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////39/f8tLS3/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf+Dg4P/8/Pz//////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////////////////////6mpqf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8cHBz/lpaW//f39////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////f39/1pa + Wv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KSkp/7CwsP/7+/v///////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////8/Pz/0NDQ/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AgIC/zs7O//BwcH//v7+//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////9PT0/2JiYv8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUF + Bf+zs7P//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+/7S0tP84ODj/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8/Pz//vr6+//7+/v//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////IyMj/goKC/1xcXP9ERET/Q0ND/11dXf+FhYX/zs7O//// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + /////////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP///////////////////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////////////////////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + /////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////////8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////////////////////AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + /////////////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP///////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + //////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA////////////////////////////////////////////AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////////////// + ////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////////////////////wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////// + //////////////////////////////////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/9/f3//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////9/f3/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/BwcH///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///BwcH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/1BQUP////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////1BQUP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4qKiv////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //+Kior/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/1BQUP/BwcH/9/f3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////f39//BwcH/UFBQ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAMEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADBAAAAUAAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFAAAAAAAAAAigAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACKAAAAAAAA + AAAAAAAAAAAAUAAAAMEAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPcAAADBAAAAUAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAeJUE5HDQoaCgAAAA1JSERSAAABAAAA + AQAIBgAAAFxyqGYAAAABc1JHQgCuzhzpAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwwAADsMBx2+o + ZAAAGH1JREFUeF7tnXnIVVUXh63sy2weFESaKaXBDMypMsLCigytBCnTFAobKYpMm+dJm6Q/NAskM8LI + gqCMoqiwkcpsUrBJK4dyyKnB2p/rct+uw+9991p373vPPuf8Hngo1uta99xz77pn2mefdq3QYbMjNjtr + s99t1lFKc6f0rvSw9LL0tIrzNrt4s6ggpTSfSk9Lb7dK+81O3ixKppQWQ+lx6fXtYPNTWg6l17dCdg3Q + P6SUFtP/Dgfk5ACP+Sktl9LzlRODcoYQ/QNKabGV3q9cJkB/pJQWW+l9XuentKRK78M/UErLIQxSSssh + DFJKyyEMUkrLIQxSSsshDFJKyyEMUkrLIQwG2aFDBzdixAg3a9Ys99133zlCiB3pHekh6SXpKdRrEYTB + uj3vvPPc4sWLq2+BEBID6SnpLdRzgcKg2fbt27vJkydXF5cQ0gikx6TXUA/WKQyaZfMT0hyk11AP1ikM + mpRdE0JI84h4OACDauXkBI/5CWku0nORTgzCoFo5Q0kIaT7Se6gnjcKgWrlMQQhpPtJ7qCeNwqBaXucn + JBuk91BPGoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID + 9aRRGFRLCMkO1JNGYVBtKKhmSvpAObSmD5RTJkNBNY3CoNpQUM2U9IFyaE0fKKdMhoJqGoVBtaGgminp + A+XQmj5QTpkMBdU0CoNqQ0E1U9IHyqE1faCcMhkKqmkUBtWGgmqmpA+UQ2v6QDllMhRU0ygMqg0F1UxJ + HyiH1vSBcspkKKimURhUGwqqmZI+UA6t6QPllMlQUE2jMKg2FFQzJX2gHFrTB8opk6GgmkZhUC0hJDtQ + TxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhU + SwjJDtSTRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMkfaCcPBkKqmkUBtWGgmrSmj5QTpH0 + gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQbSioJq3pA+UUSR8oJ0+GgmoahUG1oaCatKYPlFMk + faCcPBkKqmkUBtWGgmrSmj5QTpH0gXLyZCioplEYVBsKqklr+kA5RdIHysmToaCaRmFQLSEkO1BPGoVB + tYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO + 1JNGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOh + oJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2gnJj6QDlF0gfKKZOhoJpGYVBtKKhmTH2g + nJj6QDlF0gfKKZOhoJpGYVAtISQ7UE8ahUG1hJDsQD1pFAbVEkKyA/WkURhUSwjJDtSTRmFQLSEkO1BP + GoVBtYSQ7EA9aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUG0oqCat6QPlxNQHyklJHyinmYaCahqFQbWhoJq0 + pg+UE1MfKCclfaCcZhoKqmkUBtWGgmrSmj5QTkx9oJyU9IFymmkoqKZRGFQbCqpJa/pAOTH1gXJS0gfK + aaahoJpGYVBtKKgmrekD5cTUB8pJSR8op5mGgmoahUG1oaCatKYPlBNTHygnJX2gnGYaCqppFAbVhoJq + 0po+UE5MfaCclPSBcpppKKimURhUGwqqSWv6QDkx9YFyUtIHymmmoaCaRmFQLSEkO1BPGoVBtYSQ7EA9 + aRQG1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBt + KKhmSvpAOTSePlBOngwF1TQKg2pDQTVT0gfKofH0gXLyZCioplEYVBsKqpmSPlAOjacPlJMnQ0E1jcKg + 2lBQzZT0gXJoPH2gnDwZCqppFAbVhoJqpqQPlEPj6QPl5MlQUE2jMKg2FFQzJX2gHBpPHygnT4aCahqF + QbWhoJop6QPl0Hj6QDl5MhRU0ygMqg0F1UxJHyiHxtMHysmToaCaRmFQLSEkO1BPGoVBtYSQ7EA9aRQG + 1RJCsgP1pFEYVEsIyQ7Uk0ZhUC0hJDtQTxqFQbWEkOxAPWkUBtUSQrID9aRRGFRLCMkO1JNGYVBtKKhm + kfSBcmLqA+XQmqmDltkoDKoNBdUskj5QTkx9oBxaM3XQMhuFQbWhoJpF0gfKiakPlENrpg5aZqMwqDYU + VLNI+kA5MfWBcmjN1EHLbBQG1YaCahZJHygnpj5QDq2ZOmiZjcKg2lBQzSLpA+XE1AfKoTVTBy2zURhU + GwqqWSR9oJyY+kA5tGbqoGU2CoNqQ0E1i6QPlBNTHyiH1kwdtMxGYVAtISQ7UE8ahUG1hJDsQD1pFAbV + EkJqrFy50n399ddu7ty5bubMme6RRx5xt99+u7vlllvcpEmT3HPPPefee+89t3DhQrd69Wr377//VjPr + A/WkURhUSwhx7t1333WjRo1yPXr0cJ07d3b/+9//YL+I8rcuXbq44447zl1++eXu008/rfuHANU3CoNq + CSkrv/76q3v22Wdd79693Q477AD7Q+OOO+7oTjvtNDd79my3Zs2aanUdqJ5RGFRLSNnYtGmTmzNnjjv6 + 6KNd+/btYV/U4y677OL69u3rPvvsM/fPP/9UX61tUB2jMKiWkDKxbNkyd+WVV1aaFfVDDDt27Ojuuece + 98cff1RftXVQvlEYVEtIWfjyyy/dscceW9llR70Qy913392df/75bv369dVXbh2UbxQG1YaCasbUB8qh + NX2gnJSMxdtvv+26desGXyOWch5hyJAh7rXXXnN///139ZXbBtUxCoNqQ0E1Y+oD5dCaPlBOSsZg3rx5 + 7rDDDoP1YyiHE8cff7x79dVX3V9//VV9VR2onlEYVBsKqhlTHyiH1vSBclIylB9//NEdddRRsHYMZa9C + xgvImIB6QDWNwqDaUFDNmPpAObSmD5STkiHISbgRI0YEXeJDyjkE2aO488473YYNG6qvVh+ovlEYVBsK + qhlTHyiH1vSBclIyhBkzZridd94Z1q1XqSejAmXPInQUoIBewygMqg0F1YypD5RDa/pAOSlZLz/99JM7 + 4IADYM163HfffSsjBb/55pvqK8QBvZZRGFQbCqoZUx8oh9b0gXJSsl5kDH+My3277rqrGzp0aOUSovbM + vgX0mkZhUG0oqGZMfaAcWtMHyknJeti4cWOUs/4yvPeVV15Rj+qrB/S6RmFQLSFFY/r06fC7blFu9pHj + /EaDXtsoDKolpEj8+eefbsCAAfC7bvGII45wv/32W7Vq40CvbRQG1RJSJL799lvXtWtX+F23eOSRR1bm + Bmg06LWNwqBaQoqEDPmNcaPPMccc41atWlWt2jjQaxuFQbWEFImnnnoKfs+t9uzZs+7RfRbQaxuFQbWE + FIlrr70Wfs+t9urVyzy5hxYZPTht2jT30ksvwdc2CoNqCSkSw4cPh99zq3369HG///57tWoc5PKkzBp0 + 8sknV8YoyHRi6LWNwqBaQorEGWecAb/nVvv37+/WrVtXrRqGXJn44IMPKlcntjw/MXr06K1es05hUG0o + qGaR9IFyYuoD5aRksxk4cCBcDqvSrJoJPdpC7hWQ6cHkhqQ999xzu9cYM2bMdrE6hEG1oaCaRdIHyomp + D5STks1m8ODBcDmsytx+IYcAMoho3Lhxbo899oD1xUIcAqCaRdIHyompD5STks3mkksugcthVe4BGDly + pPvoo49Md/3Jj8Zdd91VGYrc1m3I8rfx48fDvxmFQbWhoJpF0gfKiakPlJOSzebBBx+Ey1GvO+20kzvl + lFMq04f/8MMPrd4XIFcMnn/++coAIs38A1J3ypQp8G9GYVBtKKhmkfSBcmLqA+WkZLN54YUX4HKEKg17 + 4IEHugsvvLAyxVjLXoH896233qpcNrQMQJKHi7zxxhvwb0ZhUG0oqGaR9IFyYuoD5aRks5EJORs9669M + CnLqqadW9jZk9t+2niLUmnvttVdlpCH6m1EYVBsKqlkkfaCcmPpAOSnZbGRizthTgDVCmWNAQH8zCoNq + Q0E1i6QPlBNTHygnJZvN1KlT4XKkpBxOyA+VgP5uFAbVElIkzj33XPg9T8nu3bu75cuXV5YX/d0oDKol + pCjII7t32203+D1PSRkf0HI1Af3dKAyqJaQIyKg9Oa5G3/GU7NSpk1u6dGl1qfkDQEgUZKrues7GN1N5 + ErFMV7Yl6N8ZhUG1hOQZeRTXfffdVzmxhr7fKTlo0KDtbjFG/84oDKolJK/IcbQMu+3QoQP8bqekDCJa + smRJdclroH9rFAbVEpJHpPllIE7qu/2iHPe//vrr1SXfGvTvjcKgWkLyhuz2y3P58tD88kQhuebf2j0E + KMcoDKoNBdVMSR8oJ6Y+UE5Kpsi9996bi91+mZ14zpw5bd5NiPKMwqDaUFDNlPSBcmLqA+WkZErI035l + y5/6CT+5F+Gkk06qTFHuu5UY5RuFQbWhoJop6QPlxNQHyknJlLjjjjsq9+mj5UzFvffe202aNMmtWLGi + utRtg2oYhUG1oaCaKekD5cTUB8pJyRSQOfVS3/LLo8Tk6cELFiwwTSCCahmFQbWhoJop6QPlxNQHyknJ + FJAtf6rH/N26dXOPP/64W7RoUV1PD0Y1jcKg2lBQzZT0gXJi6gPlpGSWSEPdf//9lfvv0bLFUu4fkDkA + ZUpxmadv7Nixlf+XGYblWP7444+v/F2m8z7rrLMq045NnjzZzZ8/v9Wz+1rQ8hiFQbWhoJop6QPlxNQH + yknJrJDmv+2226I85qs1ZWiuNPXHH3/s1q5du1Uzy268HHrI1OAyz5/8Xe43kEuQMUHLZRQG1YaCaqak + D5QTUx8oJyWzQob3NrL55XzCddddFzz1dyho2YzCoFpCUkK2urfffntl64y+rzGUHxY5qVjPMXts0PIZ + hUG1hKSENH+jT/jdeuutlTEFKYCWzygMqiUkBaQh5Zi/kZf65IdFriiEnriLCVpOozColpAUkK1yo7f8 + stufypa/BbScRmFQLSFZ0oxBPnLML3sXKW35W0DLaxQG1RKSFZs2barM5NPos/133313clv+FtAyG4VB + tYRkgTT/Pffc09BBPlJbDi1SONvfGmi5jcKgWkKajez233TTTQ1tfpkrQH5gYg/ciQ1adqMwqDYUVLNI + +kA5KZkicia+kbv9omz55YcmddCyG4VBtaGgmkXSB8pJyZSQ43DZ8jf6Up/MEyiHGHkAvQejMKg2FFSz + SPpAOSmZEjfffHPDL/VJ86d6wg+B3oNRGFQbCqpZJH2gnJRMAWlIOdvf6C2/nO1P8VJfW6D3YhQG1YaC + ahZJHygnJVNAdvsbveVP+VJfW6D3YhQG1YaCahZJHygnJbNEzsDLLnkjb+yRs/0yyCcvx/zbgt6TURhU + GwqqWSR9oJyUzApp/gkTJjR06m65jCgThuThbH9roPdlFAbVhoJqFkkfKCcls0KG9zay+eV8glxOTP06 + vw/03ozCoFpCYiLH4bLlb/T9/LLlT3mEnxb0/ozCoFpCYiIn/Bo9yEfOK+R5t39L0PszCoNqCYnBxo0b + K1t+eSgG+p7FUK4kyFRhebvU1xbofRqFQbWExGD8+PENv9Qnu/15vNTXFuh9GoVBtYSEILviHORTP+j9 + GoVBtYTUi1x7v+GGGxp+P788Brwox/zbgt6zURhUS0g9SPPLBJ6NvqVXTvgV4Wx/a6D3bRQG1RJiRbbG + 119/fUObX/Yq5CGbeb/O7wO9d6MwqJYQC/LEHLmrrxmX+ore/AJ670ZhUC0hWuRSn2z5G3nCTx7//cAD + D+R2bL8VtA6MwqBaQjTIcfjVV1/d8C2/NH9RT/gh0DowCoNqCWkLue7+4YcfusGDB7sddtgBfodi2LLl + tzxbvwigdWEUBtWS8iDH1HPnznWPPPKIGz16dOXx1/369XN9+vSp/P/FF1/s7r33Xvfkk0+6adOmVQb3 + 9O/f3+2zzz7wuxPTiRMnlmrL3wJaF0ZhUC0pLrI1/f77790zzzzjhg0b5vbbbz/4HchSOaSQQT5lOebf + FrROjMKgWlI8pPGXLFnirrrqKte5c+eGnrQLUa7zy95IGc72twZaL0ZhUC0pFqtXr67sTh900EHw805F + uV1Y5u0v8iAfDWjdGIVBtaQYyDj5hQsXuhNOOCHZLX6LMrb/4YcfLn3zC2j9GIVBtaQYvPLKK8lv9Vss + 26W+tkDrxygMqiX5Rk6ezZo1y3Xs2BF+vikpl/oeeuihQt7VVy9oPRmFQbUk37z++utJnt1HSvNzy781 + aD0ZhUG1JL98/vnnbv/994efa0rKMb/c0sst//ag9WUUBtWSfCLj8gcOHNjQ0XkxlLP9cqmPW34MWmdG + YVAtyR9ynV+m3UafZ0rK7cJlHuSjAa03ozColuSP+fPnVwb4oM8zFWXP5NJLLy31IB8NaN0ZhUG1JH+M + Gzcu+V3/Qw45xP3888/VJSatgdadURhUS/LF8uXL3e677w4/y5QcNWoUT/opQOvOKAyqJflCjqnR55ia + cjch8YPWnVEYVEvyw9q1a12vXr3g55iab775ZnWpSVugdWcUBtWS/LBgwQLXpUsX+Dm2pTytp2/fvu6c + c85p2ohBmXeA+EHrzigMqiX5QUb9WW70kcbv3bu3mzlz5n/X4X/55ZfKWPyTTjrJ7bbbbjAvhq+++mrl + 9UjboHVnFAbVkvwg02Sjz3BbpfHlxiCZCOT333+vZm/NunXr3BdffOEuu+yyyiXF2E/znTp1avWVSFug + dWcUBtWS/DBmzBj4GW5p165dKw/sWLx4cTXLj0weMmXKFDdgwABYsx5lOjHiB607ozColuSHM888E36G + otwQNHbsWLd06dK6L7/J3kKswwKZc5D4QevOKAyqJflBJvvY9vOT4bYXXnih++ijj6IMuY01Aejw4cNL + N8NvPaB1ZxQG1ZL8IGfyWz43mU9PTuS99dZbUQfcxLpKcMEFF/AHQAFad0ZhUC3JD4MGDap8Zocffrh7 + 8cUX3Zo1a6p/iUes5/3JFOPED1p3RmFQLckPMo+ePDNPzuA3ApmjT64goO+J1QkTJlSrkrZA684oDKol + +UF29Ru5W71+/fpoPwDTp0+vViVtgdadURhUS0gLq1ativYD8Mknn1SrkrZA684oDKolpIVly5ZF+QGQ + gUWcBEQHWn9GYVAtIS38+OOPUX4AZHQh0YHWn1EYVEtIC/IU4NAfAJn6W+oQHWgdGoVBtYQIcvfeluMM + 6rVnz55u5cqV1arEB1qHRmFQLSkvcpw+b968yjX7WDcDTZ48uVqdaEDr0CgMqiXlRMb9X3HFFa5Tp07w + e1GPRx11VOVSItGD1qNRGFRLyoVM1PnYY4/VNbFIW8pNRC+//HL1VYgWtC6NwqBaUnxk8JCMHpRbfg8+ + +ODoTw+WGYrl7j9OAW4HrU+jMKjWct84yR8bNmxwTz/9tOvXr1/DphI/8cQTeeKvDqT30Po0CoNqZ8+e + XV0cUiSk8d955x3Xv3//aDf4IOXGpK+++qr6qsSC9B5ap0ZhUO1FF11UXRxSBGR3//3333dDhw6tXJNH + n3ksu3fvziG/AUjvofVqFAbVypNbZaJIkn9k2nCZFajRjS+DheR6v8wpSOpDek56D61fozBoUmZvIflH + Lu0NHjy44Y8Nk6f+cKMRhvQcWrd1CINmn3jiieqikTwjx/4TJ050hx56aNQfAqnVo0ePyglFzvQThvQa + Wsd1CoNmZSQYfwSKg8z0e+ONN7p999036LKffC9kpmH5bqxYsYLNH4isx8hTsMNg3cquCXfvioP8EDz6 + 6KNuyJAh7sADD1Td7CM/GHKCT+b1mzFjhlu9enW1GqkX6amIu/1bCoNByskJOUMplyk4TqAY/PHHH5Vr + 9fPnz688uPOaa65xw4YNc6effro7++yz3ciRIyt7DLNmzXKLFi2qND0H9oQhvSM9JL0U6YQfEgYppeUQ + Biml5RAGKaXlEAYppeUQBiml5RAGKaXlEAYppeWw3eJtApTScii93272FgFKaXmU3m930RYBSml5lN5v + 12Gzv1QDlNJyKD0vvV9h+GbRP6KUFlPp+a14YrPoH1JKi6X0+na03yx/BCgtttLj0uutIrsGPCdAabGU + nt5ut7815OSAnCGUywQcJ0BpPpXelR6WXv7vhF+Ndu3+D6LWAdnKS/AsAAAAAElFTkSuQmCC + + + + Manage Plugins + + + reloadToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openPluginsDirectoryToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + x64ToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + x86ToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toggleToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openFoldersToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + deleteToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + showDebugToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + addToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + FormPluginManager + + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/TS SE Tool/Forms/FormSettings.cs b/TS SE Tool/Forms/FormSettings.cs index 53c65d9c..7dbd40c9 100644 --- a/TS SE Tool/Forms/FormSettings.cs +++ b/TS SE Tool/Forms/FormSettings.cs @@ -25,29 +25,24 @@ limitations under the License. using System.IO; using System.Globalization; using System.Threading; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool -{ - public partial class FormSettings : Form - { +namespace TS_SE_Tool { + public partial class FormSettings : Form { FormMain MainForm = Application.OpenForms.OfType().Single(); - public FormSettings() - { + public FormSettings() { InitializeComponent(); - this.Icon = Utilities.Graphics_TSSET.IconFromImage(MainForm.ProgUIImgsDict["Settings"]); + this.Icon = Utilities.Graphics_TSSET.IconFromImage(MainForm.ProgUIImgsDict["Settings"]); this.SuspendLayout(); - try - { + try { string translatedString = MainForm.ResourceManagerMain.GetString(this.Name, Thread.CurrentThread.CurrentUICulture); if (translatedString != null) this.Text = translatedString; - } - catch - { } + } catch { } MainForm.HelpTranslateFormMethod(this, toolTip); @@ -57,8 +52,7 @@ public FormSettings() PopulateControls(); } - private void CorrectControlsPositions() - { + private void CorrectControlsPositions() { //Longest setting string int longeststr = 0, margin = 6; @@ -87,12 +81,10 @@ private void CorrectControlsPositions() CorrectControlsPositionsMover(Controllist, longeststr, margin); } - private int CorrectControlsPositionsLoongest(Control[] _inputList) - { + private int CorrectControlsPositionsLoongest(Control[] _inputList) { int longeststr = 0; - foreach (Control c in _inputList) - { + foreach (Control c in _inputList) { Label temp = c as Label; if (c.Width > longeststr) longeststr = c.Width + c.Location.X; @@ -101,14 +93,11 @@ private int CorrectControlsPositionsLoongest(Control[] _inputList) return longeststr; } - private void CorrectControlsPositionsMover(Control[][] _Controllist, int _longeststr, int _margin) - { - foreach (Control[] cc in _Controllist) - { + private void CorrectControlsPositionsMover(Control[][] _Controllist, int _longeststr, int _margin) { + foreach (Control[] cc in _Controllist) { int margincount = 2, startX = _longeststr; - foreach (Control c in cc) - { + foreach (Control c in cc) { c.Location = new Point(startX + _margin * margincount, c.Location.Y); startX += c.Width; margincount++; @@ -116,8 +105,7 @@ private void CorrectControlsPositionsMover(Control[][] _Controllist, int _longes } } - private void PopulateControls() - { + private void PopulateControls() { bool _fixSettings = false; DataTable combDT; @@ -128,16 +116,12 @@ private void PopulateControls() Dictionary DistanceMesNames = new Dictionary { { "km", "Kilometers" }, { "mi", "Miles" } }; - foreach (KeyValuePair tempitem in DistanceMesNames) - { + foreach (KeyValuePair tempitem in DistanceMesNames) { string value = MainForm.ResourceManagerMain.GetString(tempitem.Value, Thread.CurrentThread.CurrentUICulture); - if (value != null && value != "") - { + if (value != null && value != "") { combDT.Rows.Add(tempitem.Key, value); - } - else - { + } else { combDT.Rows.Add(tempitem.Key, tempitem.Value); } } @@ -147,8 +131,7 @@ private void PopulateControls() comboBoxSettingDistanceMesSelect.DataSource = combDT; comboBoxSettingDistanceMesSelect.SelectedValue = MainForm.ProgSettingsV.DistanceMes; - if (comboBoxSettingDistanceMesSelect.SelectedValue == null) - { + if (comboBoxSettingDistanceMesSelect.SelectedValue == null) { _fixSettings = true; comboBoxSettingDistanceMesSelect.SelectedIndex = 0; } @@ -161,16 +144,12 @@ private void PopulateControls() Dictionary WeightMesNames = new Dictionary { { "kg", "Kilograms" }, { "lb", "Pounds" } }; - foreach (KeyValuePair tempitem in WeightMesNames) - { + foreach (KeyValuePair tempitem in WeightMesNames) { string value = MainForm.ResourceManagerMain.GetString(tempitem.Value, Thread.CurrentThread.CurrentUICulture); - if (value != null && value != "") - { + if (value != null && value != "") { combDT.Rows.Add(tempitem.Key, value); - } - else - { + } else { combDT.Rows.Add(tempitem.Key, tempitem.Value); } } @@ -180,8 +159,7 @@ private void PopulateControls() comboBoxWeightMesSelect.DataSource = combDT; comboBoxWeightMesSelect.SelectedValue = MainForm.ProgSettingsV.WeightMes; - if (comboBoxWeightMesSelect.SelectedValue == null) - { + if (comboBoxWeightMesSelect.SelectedValue == null) { _fixSettings = true; comboBoxWeightMesSelect.SelectedIndex = 0; } @@ -192,18 +170,14 @@ private void PopulateControls() combDT = new DataTable(); combDT.Columns.Add("ID"); combDT.Columns.Add("CurrencyDisplayName"); - - foreach (KeyValuePair tempitem in MainForm.CurrencyDictConversionETS2) - { - string value = MainForm.ResourceManagerMain.GetString(tempitem.Key, Thread.CurrentThread.CurrentUICulture); - - if (value != null && value != "") - { - combDT.Rows.Add(tempitem.Key, value); - } - else - { - combDT.Rows.Add(tempitem.Key, tempitem.Key); + var game = Globals.SupportedGames.Get("ETS2"); + foreach (var currency in game.Currencies) { + var value = MainForm.ResourceManagerMain.GetString($"currency{currency.Name}", Thread.CurrentThread.CurrentUICulture); + + if (!string.IsNullOrWhiteSpace(value)) { + combDT.Rows.Add(currency.Name, value); + } else { + combDT.Rows.Add(currency.Name, currency.Name); } } @@ -212,8 +186,7 @@ private void PopulateControls() comboBoxSettingCurrencySelectETS2.DataSource = combDT; comboBoxSettingCurrencySelectETS2.SelectedValue = MainForm.ProgSettingsV.CurrencyMesETS2; - if (comboBoxSettingCurrencySelectETS2.SelectedValue == null) - { + if (comboBoxSettingCurrencySelectETS2.SelectedValue == null) { _fixSettings = true; comboBoxSettingCurrencySelectETS2.SelectedIndex = 0; } @@ -222,17 +195,14 @@ private void PopulateControls() combDT.Columns.Add("ID"); combDT.Columns.Add("CurrencyDisplayName"); - foreach (KeyValuePair tempitem in MainForm.CurrencyDictConversionATS) - { - string value = MainForm.ResourceManagerMain.GetString(tempitem.Key, Thread.CurrentThread.CurrentUICulture); + game = Globals.SupportedGames.Get("ATS"); + foreach (var currency in game.Currencies) { + var value = MainForm.ResourceManagerMain.GetString($"currency{currency.Name}", Thread.CurrentThread.CurrentUICulture); - if (value != null && value != "") - { - combDT.Rows.Add(tempitem.Key, value); - } - else - { - combDT.Rows.Add(tempitem.Key, tempitem.Key); + if (!string.IsNullOrWhiteSpace(value)) { + combDT.Rows.Add(currency.Name, value); + } else { + combDT.Rows.Add(currency.Name, currency.Name); } } @@ -241,8 +211,7 @@ private void PopulateControls() comboBoxSettingCurrencySelectATS.DataSource = combDT; comboBoxSettingCurrencySelectATS.SelectedValue = MainForm.ProgSettingsV.CurrencyMesATS; - if (comboBoxSettingCurrencySelectATS.SelectedValue == null) - { + if (comboBoxSettingCurrencySelectATS.SelectedValue == null) { _fixSettings = true; comboBoxSettingCurrencySelectATS.SelectedIndex = 0; } @@ -258,51 +227,40 @@ private void PopulateControls() if (_fixSettings) PrepareSettingsAndSave(); } - + //Events - + //Pickup window - private void numericUpDownSettingPickTimeD_ValueChanged(object sender, EventArgs e) - { + private void numericUpDownSettingPickTimeD_ValueChanged(object sender, EventArgs e) { numericUpDownSettingPickTimeH.Value = 0; } - private void numericUpDownSettingPickTimeH_ValueChanged(object sender, EventArgs e) - { + private void numericUpDownSettingPickTimeH_ValueChanged(object sender, EventArgs e) { - if (numericUpDownSettingPickTimeH.Value == 24) - { + if (numericUpDownSettingPickTimeH.Value == 24) { numericUpDownSettingPickTimeD.Value++; numericUpDownSettingPickTimeH.Value = 0; - } - else if (numericUpDownSettingPickTimeH.Value == -1) - { - if(numericUpDownSettingPickTimeD.Value > 0) - { + } else if (numericUpDownSettingPickTimeH.Value == -1) { + if (numericUpDownSettingPickTimeD.Value > 0) { numericUpDownSettingPickTimeD.Value--; numericUpDownSettingPickTimeH.Value = 0; - } - else - { + } else { numericUpDownSettingPickTimeH.Value = 0; } } } // - private void numericUpDownSettingLoopCitys_ValueChanged(object sender, EventArgs e) - { + private void numericUpDownSettingLoopCitys_ValueChanged(object sender, EventArgs e) { MainForm.ProgSettingsV.LoopEvery = Convert.ToByte(numericUpDownSettingLoopCitys.Value); } //Buttons - private void buttonSettingSave_Click(object sender, EventArgs e) - { + private void buttonSettingSave_Click(object sender, EventArgs e) { PrepareSettingsAndSave(); } - private void PrepareSettingsAndSave() - { + private void PrepareSettingsAndSave() { MainForm.ProgSettingsV.DistanceMes = comboBoxSettingDistanceMesSelect.SelectedValue.ToString(); MainForm.ProgSettingsV.WeightMes = comboBoxWeightMesSelect.SelectedValue.ToString(); MainForm.ProgSettingsV.CurrencyMesETS2 = comboBoxSettingCurrencySelectETS2.SelectedValue.ToString(); @@ -312,18 +270,14 @@ private void PrepareSettingsAndSave() MainForm.ProgSettingsV.WriteConfigToFile(); - if (MainForm.GameType == "ETS2") - { + if (MainForm.SelectedGame.Type == "ETS2") { Globals.CurrencyName = MainForm.ProgSettingsV.CurrencyMesETS2; - } - else - { + } else { Globals.CurrencyName = MainForm.ProgSettingsV.CurrencyMesATS; } } - private void buttonSettingCancel_Click(object sender, EventArgs e) - { + private void buttonSettingCancel_Click(object sender, EventArgs e) { this.Close(); } } diff --git a/TS SE Tool/Forms/FormSplash.cs b/TS SE Tool/Forms/FormSplash.cs index d6ec9b80..9aca055b 100644 --- a/TS SE Tool/Forms/FormSplash.cs +++ b/TS SE Tool/Forms/FormSplash.cs @@ -31,17 +31,14 @@ limitations under the License. using System.Security.Cryptography; using TS_SE_Tool.Utilities; -namespace TS_SE_Tool -{ - public partial class FormSplash : Form - { +namespace TS_SE_Tool { + public partial class FormSplash : Form { string[] NewVersion = { "", "" }; FormMain MainForm = Application.OpenForms.OfType().Single(); bool CheckForUpdates = true; - public FormSplash() - { + public FormSplash() { InitializeComponent(); MainForm.HelpTranslateFormMethod(this); @@ -58,14 +55,10 @@ public FormSplash() buttonSupportDeveloper.Visible = false; } - private void FormSplash_Load(object sender, EventArgs e) - { - try - { + private void FormSplash_Load(object sender, EventArgs e) { + try { CheckForUpdates = Properties.Settings.Default.CheckUpdatesOnStartup; - } - catch - { + } catch { MessageBox.Show("Please update manually in order to fix it.", "Installation corrupted", MessageBoxButtons.OK, MessageBoxIcon.Error); buttonOK.Click -= new EventHandler(this.buttonOK_Click); buttonOK.Text = "Close application"; @@ -75,12 +68,10 @@ private void FormSplash_Load(object sender, EventArgs e) CheckLatestVersion(); } - private void FormSplash_Shown(object sender, EventArgs e) - { } + private void FormSplash_Shown(object sender, EventArgs e) { } //Actions - private void linkLabelNewVersion_Click(object sender, EventArgs e) - { + private void linkLabelNewVersion_Click(object sender, EventArgs e) { buttonOK.Enabled = false; FormCheckUpdates FormWindow = new FormCheckUpdates("download"); @@ -88,13 +79,10 @@ private void linkLabelNewVersion_Click(object sender, EventArgs e) DialogResult t = FormWindow.ShowDialog(); - if (t == DialogResult.OK) - { + if (t == DialogResult.OK) { linkLabelNewVersion.Text = String.Format("You are using latest version!\r\n(Repair)"); linkLabelNewVersion.DisabledLinkColor = this.ForeColor; - } - else if (t == DialogResult.Abort) - { + } else if (t == DialogResult.Abort) { linkLabelNewVersion.Text = String.Format("Something gone wrong. Please use links below for manual update."); linkLabelNewVersion.DisabledLinkColor = Color.Red; } @@ -105,23 +93,19 @@ private void linkLabelNewVersion_Click(object sender, EventArgs e) buttonOK.Enabled = true; } //Links - private void linkFirst_Click(object sender, EventArgs e) - { + private void linkFirst_Click(object sender, EventArgs e) { Process.Start(Utilities.Web_Utilities.External.linkSCSforum); } - private void linkSecond_Click(object sender, EventArgs e) - { + private void linkSecond_Click(object sender, EventArgs e) { Process.Start(Utilities.Web_Utilities.External.linkTMPforum); } - private void linkLabelGitHub_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { + private void linkLabelGitHub_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Process.Start(Utilities.Web_Utilities.External.linkGithubReleasesLatest); } - private void linkLabelHelpLocalPDF_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { + private void linkLabelHelpLocalPDF_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { string file = "HowTo.pdf"; if (File.Exists(file)) @@ -130,23 +114,20 @@ private void linkLabelHelpLocalPDF_LinkClicked(object sender, LinkLabelLinkClick MessageBox.Show("Missing manual. Try to repair via update", "HowTo.pdf not found"); } - private void linkLabelHelpYouTube_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { + private void linkLabelHelpYouTube_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Process.Start(Utilities.Web_Utilities.External.linkYoutubeTutorial); } //Main button - private void buttonOK_Click(object sender, EventArgs e) - { + private void buttonOK_Click(object sender, EventArgs e) { this.Close(); } - private void buttonOK_ClickCloseApp(object sender, EventArgs e) - { - Application.Exit(); + private void buttonOK_ClickCloseApp(object sender, EventArgs e) { + if ((ModifierKeys & Keys.Shift) != 0) this.Close(); // bypass close when shift is pressed + else Application.Exit(); } - private void buttonSupportDeveloper_Click(object sender, EventArgs e) - { + private void buttonSupportDeveloper_Click(object sender, EventArgs e) { string url = Utilities.Web_Utilities.External.linkHelpDeveloper; DialogResult result = MessageBox.Show("This will open " + url + " web-page.\nDo you want to continue?", "Support developer", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2); @@ -155,20 +136,15 @@ private void buttonSupportDeveloper_Click(object sender, EventArgs e) } //Extra - private async void CheckLatestVersion() - { - if ( !MainForm.TssetFoldersExist || (CheckForUpdates && Web_Utilities.External.CheckNewVersionTimeElapsed(MainForm.ProgSettingsV.LastUpdateCheck)) ) - { - if (MainForm.TssetFoldersExist) - { + private async void CheckLatestVersion() { + if (!MainForm.TssetFoldersExist || (CheckForUpdates && Web_Utilities.External.CheckNewVersionTimeElapsed(MainForm.ProgSettingsV.LastUpdateCheck))) { + if (MainForm.TssetFoldersExist) { SetLinkLabelNewVersionvisual(visualStatus.neutral); linkLabelNewVersion.Text = "Checking "; buttonOK.Text = "Checking for updates"; - } - else - { + } else { SetLinkLabelNewVersionvisual(visualStatus.neutralBold); linkLabelNewVersion.Text = String.Format("Your version lacking important files!\r\nGetting link "); @@ -178,21 +154,16 @@ private async void CheckLatestVersion() NewVersion = await Task.Run(() => Web_Utilities.External.CheckNewVersionAvailability(linkLabelNewVersion)); - if (NewVersion != null && NewVersion[0] != "" && NewVersion[1] != "") - { + if (NewVersion != null && NewVersion[0] != "" && NewVersion[1] != "") { bool? betterVersion = false; betterVersion = Web_Utilities.External.CheckNewVersionStatus(NewVersion); - if (betterVersion is bool checkBool) - { - if (checkBool) - { + if (betterVersion is bool checkBool) { + if (checkBool) { linkLabelNewVersion.Text = String.Format("New version {0} available!\r\n(Download)", NewVersion[0]); SetLinkLabelNewVersionvisual(visualStatus.good); - } - else - { + } else { if (MainForm.TssetFoldersExist) linkLabelNewVersion.Text = String.Format("You are using latest version!\r\n(Repair)"); else @@ -202,16 +173,12 @@ private async void CheckLatestVersion() } linkLabelNewVersion.Click += new EventHandler(linkLabelNewVersion_Click); - } - else - { + } else { linkLabelNewVersion.Text = String.Format("Hello developer =)"); SetLinkLabelNewVersionvisual(visualStatus.neutral); } - } - else - { + } else { tableLayoutPanel2.RowStyles[3] = new RowStyle(SizeType.Absolute, 30F); linkLabelNewVersion.Text = String.Format("Cannot check for updates!"); @@ -221,25 +188,20 @@ private async void CheckLatestVersion() //Update time whaen checking for updates MainForm.ProgSettingsV.LastUpdateCheck = DateTime.Now; - } - else + } else tableLayoutPanel2.RowStyles[3] = new RowStyle(SizeType.Absolute, 0F); - if (MainForm.TssetFoldersExist) - { + if (MainForm.TssetFoldersExist) { buttonOK.Click += new EventHandler(buttonOK_Click); buttonOK.Text = "OK"; - } - else - { + } else { buttonOK.Click += new EventHandler(buttonOK_ClickCloseApp); buttonOK.Text = "Close"; } } // - internal enum visualStatus : SByte - { + internal enum visualStatus : SByte { neutral = 0, good = 1, neutralBold = 2, @@ -247,12 +209,9 @@ internal enum visualStatus : SByte bad = -1 } - private void SetLinkLabelNewVersionvisual(visualStatus _status) - { - switch (_status) - { - case visualStatus.neutral: - { + private void SetLinkLabelNewVersionvisual(visualStatus _status) { + switch (_status) { + case visualStatus.neutral: { linkLabelNewVersion.Links[0].Enabled = false; linkLabelNewVersion.LinkBehavior = LinkBehavior.NeverUnderline; @@ -263,8 +222,7 @@ private void SetLinkLabelNewVersionvisual(visualStatus _status) break; } - case visualStatus.neutralBold: - { + case visualStatus.neutralBold: { linkLabelNewVersion.Links[0].Enabled = false; linkLabelNewVersion.LinkBehavior = LinkBehavior.NeverUnderline; @@ -275,8 +233,7 @@ private void SetLinkLabelNewVersionvisual(visualStatus _status) break; } - case visualStatus.neutralLinked: - { + case visualStatus.neutralLinked: { linkLabelNewVersion.Links[0].Enabled = true; linkLabelNewVersion.LinkBehavior = LinkBehavior.AlwaysUnderline; @@ -287,8 +244,7 @@ private void SetLinkLabelNewVersionvisual(visualStatus _status) break; } - case visualStatus.good: - { + case visualStatus.good: { linkLabelNewVersion.Links[0].Enabled = true; linkLabelNewVersion.LinkBehavior = LinkBehavior.AlwaysUnderline; @@ -298,8 +254,7 @@ private void SetLinkLabelNewVersionvisual(visualStatus _status) break; } - case visualStatus.bad: - { + case visualStatus.bad: { linkLabelNewVersion.Links[0].Enabled = false; linkLabelNewVersion.LinkBehavior = LinkBehavior.NeverUnderline; diff --git a/TS SE Tool/Forms/MainTabs/FormMethodsCompanyTab.cs b/TS SE Tool/Forms/MainTabs/FormMethodsCompanyTab.cs index caeda251..5076678c 100644 --- a/TS SE Tool/Forms/MainTabs/FormMethodsCompanyTab.cs +++ b/TS SE Tool/Forms/MainTabs/FormMethodsCompanyTab.cs @@ -24,40 +24,32 @@ limitations under the License. using System.Linq; using System.Threading; using System.Windows.Forms; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool -{ - public partial class FormMain - { +namespace TS_SE_Tool { + public partial class FormMain { //User Company tab - private void CreateCompanyPanelControls() - { + private void CreateCompanyPanelControls() { buttonUserCompanyGaragesManage.Text = ""; buttonUserCompanyGaragesManage.BackgroundImage = CustomizeImg; buttonUserCompanyGaragesManage.BackgroundImageLayout = ImageLayout.Center; } - private void tableLayoutPanel2_EnabledChanged(object sender, EventArgs e) - { + private void tableLayoutPanel2_EnabledChanged(object sender, EventArgs e) { ToggleVisualUserCompanyControls(tableLayoutPanelCompanyMain.Enabled); } - private void ToggleVisualUserCompanyControls(bool _state) - { + private void ToggleVisualUserCompanyControls(bool _state) { Control tmpControl; string[] buttons = { "buttonUserCompanyGaragesManage" }; Image[] images = { CustomizeImg }; - for (int i = 0; i < buttons.Count(); i++) - { - try - { + for (int i = 0; i < buttons.Count(); i++) { + try { tmpControl = tabControlMain.TabPages["tabPageCompany"].Controls.Find(buttons[i], true)[0]; - } - catch - { + } catch { break; } @@ -68,9 +60,8 @@ private void ToggleVisualUserCompanyControls(bool _state) } } - private void FillFormCompanyControls() - { - pictureBoxCompanyLogo.Image = Utilities.Graphics_TSSET.ddsImgLoader(@"img\" + GameType + @"\player_logo\" + MainSaveFileProfileData.Logo + ".dds", 94, 94).images[0]; + private void FillFormCompanyControls() { + pictureBoxCompanyLogo.Image = Utilities.Graphics_TSSET.ddsImgLoader(@"img\" + SelectedGame.Type + @"\player_logo\" + MainSaveFileProfileData.Logo + ".dds", 94, 94).images[0]; textBoxUserCompanyCompanyName.Text = MainSaveFileProfileData.CompanyName.Value; @@ -83,10 +74,9 @@ private void FillFormCompanyControls() PopulateDriversList(); } - public void FillAccountMoneyTB() - { + public void FillAccountMoneyTB() { // - Int64 valueBefore = (long)Math.Floor(SiiNunitData.Bank.money_account * CurrencyDictConversion[Globals.CurrencyName]); + Int64 valueBefore = (long)Math.Floor(SiiNunitData.Bank.money_account * SelectedGame.Currencies.Get(Globals.CurrencyName).ConversionRate); textBoxUserCompanyMoneyAccount.Text = String.Format(CultureInfo.CurrentCulture, "{0:N0}", valueBefore); @@ -95,8 +85,7 @@ public void FillAccountMoneyTB() this.ActiveControl = null; } - private void FillHQcities() - { + private void FillHQcities() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("City", typeof(string)); combDT.Columns.Add(dc); @@ -107,8 +96,7 @@ private void FillHQcities() //start filling //fill source and destination cities - foreach (Garages garage in from x in GaragesList where x.GarageStatus != 0 && !x.IgnoreStatus select x) - { + foreach (Garages garage in from x in GaragesList where x.GarageStatus != 0 && !x.IgnoreStatus select x) { combDT.Rows.Add(garage.GarageName, garage.GarageNameTranslated); } @@ -123,10 +111,8 @@ private void FillHQcities() comboBoxUserCompanyHQcity.SelectedIndexChanged += comboBoxUserCompanyHQcity_SelectedIndexChanged; } - private void comboBoxUserCompanyHQcity_SelectedIndexChanged(object sender, EventArgs e) - { - if (comboBoxUserCompanyHQcity.SelectedValue != null) - { + private void comboBoxUserCompanyHQcity_SelectedIndexChanged(object sender, EventArgs e) { + if (comboBoxUserCompanyHQcity.SelectedValue != null) { string prevHQ = SiiNunitData.Player.hq_city, newHQ = comboBoxUserCompanyHQcity.SelectedValue.ToString(); Garages prevGarage = GaragesList.Where(x => x.GarageName == prevHQ).First(), @@ -144,26 +130,21 @@ private void comboBoxUserCompanyHQcity_SelectedIndexChanged(object sender, Event //Check for spare slots int spareSlots = -1; - for (int i = 0; i < newGarage.Drivers.Count; i++) - { - if (newGarage.Drivers[i] == newGarage.Vehicles[i]) - { + for (int i = 0; i < newGarage.Drivers.Count; i++) { + if (newGarage.Drivers[i] == newGarage.Vehicles[i]) { spareSlots = i; break; } } - if (spareSlots > -1) - { + if (spareSlots > -1) { //Move newGarage.Drivers[spareSlots] = tmpDrvr; newGarage.Vehicles[spareSlots] = tmpVhcl; prevGarage.Drivers[prevSlotIdx] = null; prevGarage.Vehicles[prevSlotIdx] = null; - } - else - { + } else { //Swap prevGarage.Drivers[prevSlotIdx] = tmpDrvr; prevGarage.Vehicles[prevSlotIdx] = tmpVhcl; @@ -176,20 +157,16 @@ private void comboBoxUserCompanyHQcity_SelectedIndexChanged(object sender, Event } } - private void textBoxUserCompanyCompanyName_TextChanged(object sender, EventArgs e) - { - if (textBoxUserCompanyCompanyName.Text.Length > 20) - { + private void textBoxUserCompanyCompanyName_TextChanged(object sender, EventArgs e) { + if (textBoxUserCompanyCompanyName.Text.Length > 20) { textBoxUserCompanyCompanyName.Text = textBoxUserCompanyCompanyName.Text.Remove(20); textBoxUserCompanyCompanyName.Select(20, 0); } int txtLength = textBoxUserCompanyCompanyName.Text.Length; - switch (txtLength) - { - case 0: - { + switch (txtLength) { + case 0: { labelUserCompanyCompanyName.ForeColor = Color.Red; labelCompanyNameSize.ForeColor = Color.Red; @@ -198,8 +175,7 @@ private void textBoxUserCompanyCompanyName_TextChanged(object sender, EventArgs break; } - case 20: - { + case 20: { labelUserCompanyCompanyName.ForeColor = Color.FromKnownColor(KnownColor.ControlText); labelCompanyNameSize.ForeColor = Color.DarkGreen; @@ -208,8 +184,7 @@ private void textBoxUserCompanyCompanyName_TextChanged(object sender, EventArgs break; } - default: - { + default: { labelUserCompanyCompanyName.ForeColor = Color.FromKnownColor(KnownColor.ControlText); labelCompanyNameSize.ForeColor = Color.FromKnownColor(KnownColor.ControlText); @@ -221,29 +196,25 @@ private void textBoxUserCompanyCompanyName_TextChanged(object sender, EventArgs labelCompanyNameSize.Text = textBoxUserCompanyCompanyName.Text.Length.ToString() + " / 20"; - if (textBoxUserCompanyCompanyName.Text != MainSaveFileProfileData.CompanyName.Value) - { + if (textBoxUserCompanyCompanyName.Text != MainSaveFileProfileData.CompanyName.Value) { MainSaveFileProfileData.isEdited = true; MainSaveFileProfileData.CompanyName = new Save.DataFormat.SCS_String(textBoxUserCompanyCompanyName.Text); } } - private void textBoxUserCompanyCompanyName_Validating(object sender, CancelEventArgs e) - { + private void textBoxUserCompanyCompanyName_Validating(object sender, CancelEventArgs e) { TextBox txtbx = sender as TextBox; if (txtbx.ReadOnly == false) - if (txtbx.TextLength == 0) - { + if (txtbx.TextLength == 0) { // Cancel the event and select the text to be corrected by the user. MessageBox.Show("Company name is empty." + Environment.NewLine + "It must contain at least 1 letter. ", "Company name", MessageBoxButtons.OK, MessageBoxIcon.Error); e.Cancel = true; } } - private void textBoxUserCompanyMoneyAccount_Enter(object sender, EventArgs e) - { - Int64 valueBefore = (long)Math.Floor(SiiNunitData.Bank.money_account * CurrencyDictConversion[Globals.CurrencyName]); + private void textBoxUserCompanyMoneyAccount_Enter(object sender, EventArgs e) { + Int64 valueBefore = (long)Math.Floor(SiiNunitData.Bank.money_account * SelectedGame.Currencies.Get(Globals.CurrencyName).ConversionRate); textBoxUserCompanyMoneyAccount.Text = String.Format(CultureInfo.CurrentCulture, "{0:N0}", valueBefore); @@ -256,10 +227,8 @@ private void textBoxUserCompanyMoneyAccount_Enter(object sender, EventArgs e) bool MoneyAccountEntered = false; - private void textBoxUserCompanyMoneyAccount_MouseClick(object sender, MouseEventArgs e) - { - if (MoneyAccountEntered) - { + private void textBoxUserCompanyMoneyAccount_MouseClick(object sender, MouseEventArgs e) { + if (MoneyAccountEntered) { int selbefore = textBoxUserCompanyMoneyAccount.SelectionStart; var charIndex = textBoxUserCompanyMoneyAccount.GetCharIndexFromPosition(e.Location); @@ -274,10 +243,10 @@ private void textBoxUserCompanyMoneyAccount_MouseClick(object sender, MouseEvent string newtext = ""; - if (CurrencyDictFormat[Globals.CurrencyName][0] != "") - newtext += CurrencyDictFormat[Globals.CurrencyName][0] + "-"; + if (SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[0] != "") + newtext += SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[0] + "-"; - newtext += CurrencyDictFormat[Globals.CurrencyName][1]; + newtext += SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[1]; textBoxUserCompanyMoneyAccount.SelectionStart = selbefore - newtext.Length; @@ -285,13 +254,11 @@ private void textBoxUserCompanyMoneyAccount_MouseClick(object sender, MouseEvent } } - private void textBoxUserCompanyMoneyAccount_Validating(object sender, CancelEventArgs e) - { + private void textBoxUserCompanyMoneyAccount_Validating(object sender, CancelEventArgs e) { } - private void textBoxUserCompanyMoneyAccount_Leave(object sender, EventArgs e) - { + private void textBoxUserCompanyMoneyAccount_Leave(object sender, EventArgs e) { textBoxUserCompanyMoneyAccount.KeyPress -= textBoxMoneyAccount_KeyPress; textBoxUserCompanyMoneyAccount.TextChanged -= textBoxMoneyAccount_TextChanged; @@ -299,35 +266,30 @@ private void textBoxUserCompanyMoneyAccount_Leave(object sender, EventArgs e) if (!Int64.TryParse(textBoxUserCompanyMoneyAccount.Text, NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign, CultureInfo.CurrentCulture, out long newValue)) return; - SiiNunitData.Bank.money_account = (long)Math.Round(newValue / CurrencyDictConversion[Globals.CurrencyName]); + SiiNunitData.Bank.money_account = (long)Math.Round(newValue / SelectedGame.Currencies.Get(Globals.CurrencyName).ConversionRate); //[sign1] - [sign2] 1.234,- [sign3] string newtext = ""; - if (CurrencyDictFormat[Globals.CurrencyName][0] != "") - newtext += CurrencyDictFormat[Globals.CurrencyName][0] + "-"; + if (SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[0] != "") + newtext += SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[0] + "-"; - newtext += CurrencyDictFormat[Globals.CurrencyName][1] + String.Format(CultureInfo.CurrentCulture, "{0:N0}", newValue) + ",-" + CurrencyDictFormat[Globals.CurrencyName][2]; + newtext += SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[1] + String.Format(CultureInfo.CurrentCulture, "{0:N0}", newValue) + ",-" + SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[2]; // textBoxUserCompanyMoneyAccount.Text = newtext; } - private void textBoxMoneyAccount_KeyPress(object sender, KeyPressEventArgs e) - { + private void textBoxMoneyAccount_KeyPress(object sender, KeyPressEventArgs e) { TextBox textBoxAccountMoney = sender as TextBox; - if (!string.IsNullOrEmpty(textBoxAccountMoney.Text)) - { - if (!Char.IsDigit(e.KeyChar)) - { - if (e.KeyChar == (char)Keys.Enter) - { + if (!string.IsNullOrEmpty(textBoxAccountMoney.Text)) { + if (!Char.IsDigit(e.KeyChar)) { + if (e.KeyChar == (char)Keys.Enter) { this.ActiveControl = null; return; } - if (e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Delete || e.KeyChar == (char)'-') - { + if (e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Delete || e.KeyChar == (char)'-') { return; } @@ -336,20 +298,17 @@ private void textBoxMoneyAccount_KeyPress(object sender, KeyPressEventArgs e) } } - private void textBoxMoneyAccount_TextChanged(object sender, EventArgs e) - { + private void textBoxMoneyAccount_TextChanged(object sender, EventArgs e) { TextBox textBoxAccountMoney = sender as TextBox; string newtext = ""; - if (!string.IsNullOrEmpty(textBoxAccountMoney.Text)) - { + if (!string.IsNullOrEmpty(textBoxAccountMoney.Text)) { int selectionStart = textBoxAccountMoney.SelectionStart; string onlyDigits = textBoxAccountMoney.Text; - if (!Int64.TryParse(onlyDigits, NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign, CultureInfo.CurrentCulture, out long valueBefore)) - { + if (!Int64.TryParse(onlyDigits, NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign, CultureInfo.CurrentCulture, out long valueBefore)) { valueBefore = 0; } @@ -372,15 +331,12 @@ private void textBoxMoneyAccount_TextChanged(object sender, EventArgs e) int cSpaceDiff = 0, txtDiff = txtBefore.Length - txtAfter.Length; - if (txtDiff <= 0) - { + if (txtDiff <= 0) { if (cSpace1 >= cSpace2) cSpaceDiff = cSpace1 - cSpace2; else cSpaceDiff = cSpace2 - cSpace1; - } - else - { + } else { if (cSpace1 <= cSpace2) cSpaceDiff = cSpace1 - cSpace2; else @@ -388,17 +344,14 @@ private void textBoxMoneyAccount_TextChanged(object sender, EventArgs e) } textBoxAccountMoney.SelectionStart = selectionStart + cSpaceDiff; - } - else - { + } else { textBoxAccountMoney.Text = "0"; } } //Visited cities //Fill - public void FillVisitedCities(int _vindex) - { + public void FillVisitedCities(int _vindex) { listBoxVisitedCities.BeginUpdate(); listBoxVisitedCities.Items.Clear(); @@ -406,8 +359,7 @@ public void FillVisitedCities(int _vindex) return; int vicited = 0; - foreach (City vc in from x in CitiesList where !x.Disabled select x) - { + foreach (City vc in from x in CitiesList where !x.Disabled select x) { if (vc.Visited) vicited++; @@ -425,14 +377,12 @@ public void FillVisitedCities(int _vindex) private int VisitedCitiesItemMargin = 3; private const float VisitedCitiesPictureHeight = 32; - private void listBoxVisitedCities_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void listBoxVisitedCities_MeasureItem(object sender, MeasureItemEventArgs e) { // Get the ListBox and the item. e.ItemHeight = (int)(VisitedCitiesPictureHeight + 2 * VisitedCitiesItemMargin); } - private void listBoxVisitedCities_DrawItem(object sender, DrawItemEventArgs e) - { + private void listBoxVisitedCities_DrawItem(object sender, DrawItemEventArgs e) { // Get the ListBox and the item. ListBox lst = sender as ListBox; @@ -498,8 +448,7 @@ private void listBoxVisitedCities_DrawItem(object sender, DrawItemEventArgs e) //=== Country - if (!string.IsNullOrEmpty(countryName)) - { + if (!string.IsNullOrEmpty(countryName)) { txt = "[ "; if (CountriesDataList.ContainsKey(countryName)) @@ -508,9 +457,7 @@ private void listBoxVisitedCities_DrawItem(object sender, DrawItemEventArgs e) txt += countryName.First(); txt += " ]"; - } - else - { + } else { txt = "[ - - ]"; } @@ -531,19 +478,14 @@ private void listBoxVisitedCities_DrawItem(object sender, DrawItemEventArgs e) e.DrawFocusRectangle(); } //Buttons - private void buttonCitiesVisit_Click(object sender, EventArgs e) - { - if (listBoxVisitedCities.SelectedItems.Count == 0) - { - foreach (City city in listBoxVisitedCities.Items) - { + private void buttonCitiesVisit_Click(object sender, EventArgs e) { + if (listBoxVisitedCities.SelectedItems.Count == 0) { + foreach (City city in listBoxVisitedCities.Items) { if (!city.Visited) city.Visited = true; } - } - else - foreach (City city in listBoxVisitedCities.SelectedItems) - { + } else + foreach (City city in listBoxVisitedCities.SelectedItems) { if (!city.Visited) city.Visited = true; } @@ -552,19 +494,14 @@ private void buttonCitiesVisit_Click(object sender, EventArgs e) FillVisitedCities(listBoxVisitedCities.TopIndex); } - private void buttonCitiesUnVisit_Click(object sender, EventArgs e) - { - if (listBoxVisitedCities.SelectedItems.Count == 0) - { - foreach (City city in listBoxVisitedCities.Items) - { + private void buttonCitiesUnVisit_Click(object sender, EventArgs e) { + if (listBoxVisitedCities.SelectedItems.Count == 0) { + foreach (City city in listBoxVisitedCities.Items) { if (city.Visited) city.Visited = false; } - } - else - foreach (City city in listBoxVisitedCities.SelectedItems) - { + } else + foreach (City city in listBoxVisitedCities.SelectedItems) { if (city.Visited) city.Visited = false; } @@ -574,8 +511,7 @@ private void buttonCitiesUnVisit_Click(object sender, EventArgs e) //Garages //Fill - public void FillGaragesList(int _vindex) - { + public void FillGaragesList(int _vindex) { listBoxGarages.BeginUpdate(); listBoxGarages.Items.Clear(); @@ -583,8 +519,7 @@ public void FillGaragesList(int _vindex) return; int grgs = 0; - foreach (Garages garage in from x in GaragesList where !x.IgnoreStatus select x) - { + foreach (Garages garage in from x in GaragesList where !x.IgnoreStatus select x) { listBoxGarages.Items.Add(garage); if (garage.GarageStatus != 0) @@ -602,14 +537,12 @@ public void FillGaragesList(int _vindex) private int GarageItemMargin = 3; private const float GaragePictureHeight = 32; - private void listBoxGarages_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void listBoxGarages_MeasureItem(object sender, MeasureItemEventArgs e) { // Get the ListBox and the item. e.ItemHeight = (int)(GaragePictureHeight + 2 * GarageItemMargin); } - private void listBoxGarages_DrawItem(object sender, DrawItemEventArgs e) - { + private void listBoxGarages_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index == -1) return; @@ -684,8 +617,7 @@ private void listBoxGarages_DrawItem(object sender, DrawItemEventArgs e) //=== Country - if (!string.IsNullOrEmpty(countryName)) - { + if (!string.IsNullOrEmpty(countryName)) { txt = "[ "; if (CountriesDataList.ContainsKey(countryName)) @@ -695,9 +627,7 @@ private void listBoxGarages_DrawItem(object sender, DrawItemEventArgs e) txt += " ]"; - } - else - { + } else { txt = "[ - - ]"; } @@ -732,8 +662,7 @@ private void listBoxGarages_DrawItem(object sender, DrawItemEventArgs e) //=== Vehicles & Drivers - if (grg.GarageStatus != 0) - { + if (grg.GarageStatus != 0) { int curVeh = 0, curDr = 0; foreach (string temp in grg.Vehicles) @@ -771,15 +700,13 @@ private void listBoxGarages_DrawItem(object sender, DrawItemEventArgs e) } //Buttons - private void buttonUserCompanyGaragesManage_Click(object sender, EventArgs e) - { + private void buttonUserCompanyGaragesManage_Click(object sender, EventArgs e) { PrepareGarages(); FormGaragesSoldContent testDialog = new FormGaragesSoldContent(); DialogResult dr = testDialog.ShowDialog(this); - if (dr == DialogResult.OK) - { + if (dr == DialogResult.OK) { FillGaragesList(listBoxGarages.TopIndex); translateTruckComboBox(); @@ -787,8 +714,7 @@ private void buttonUserCompanyGaragesManage_Click(object sender, EventArgs e) } } - private void buttonGaragesBuy_Click(object sender, EventArgs e) - { + private void buttonGaragesBuy_Click(object sender, EventArgs e) { List tmp; if (listBoxGarages.SelectedItems.Count == 0) @@ -796,8 +722,7 @@ private void buttonGaragesBuy_Click(object sender, EventArgs e) else tmp = listBoxGarages.SelectedItems.Cast().ToList(); - foreach (Garages garage in tmp) - { + foreach (Garages garage in tmp) { if (garage.GarageStatus == 0) garage.GarageStatus = 2; } @@ -808,8 +733,7 @@ private void buttonGaragesBuy_Click(object sender, EventArgs e) FillHQcities(); } - private void buttonGaragesUpgrade_Click(object sender, EventArgs e) - { + private void buttonGaragesUpgrade_Click(object sender, EventArgs e) { List tmp; if (listBoxGarages.SelectedItems.Count == 0) @@ -817,8 +741,7 @@ private void buttonGaragesUpgrade_Click(object sender, EventArgs e) else tmp = listBoxGarages.SelectedItems.Cast().ToList(); - foreach (Garages garage in tmp) - { + foreach (Garages garage in tmp) { if (garage.GarageStatus == 2) garage.GarageStatus = 3; else if (garage.GarageStatus == 6) @@ -830,8 +753,7 @@ private void buttonGaragesUpgrade_Click(object sender, EventArgs e) FillGaragesList(listBoxGarages.TopIndex); } - private void buttonGaragesDowngrade_Click(object sender, EventArgs e) - { + private void buttonGaragesDowngrade_Click(object sender, EventArgs e) { List tmp; if (listBoxGarages.SelectedItems.Count == 0) @@ -839,8 +761,7 @@ private void buttonGaragesDowngrade_Click(object sender, EventArgs e) else tmp = listBoxGarages.SelectedItems.Cast().ToList(); - foreach (Garages garage in tmp) - { + foreach (Garages garage in tmp) { if (garage.GarageStatus == 3) garage.GarageStatus = 2; else if (garage.GarageName == comboBoxUserCompanyHQcity.SelectedValue.ToString()) @@ -855,8 +776,7 @@ private void buttonGaragesDowngrade_Click(object sender, EventArgs e) translateTruckComboBox(); } - private void buttonGaragesSell_Click(object sender, EventArgs e) - { + private void buttonGaragesSell_Click(object sender, EventArgs e) { List tmp; if (listBoxGarages.SelectedItems.Count == 0) @@ -864,8 +784,7 @@ private void buttonGaragesSell_Click(object sender, EventArgs e) else tmp = listBoxGarages.SelectedItems.Cast().ToList(); - foreach (Garages garage in tmp) - { + foreach (Garages garage in tmp) { if (garage.GarageName == SiiNunitData.Player.hq_city) garage.GarageStatus = 6; else @@ -881,43 +800,35 @@ private void buttonGaragesSell_Click(object sender, EventArgs e) translateTruckComboBox(); } - private void buttonUserCompanyGaragesSelectAll_Click(object sender, EventArgs e) - { + private void buttonUserCompanyGaragesSelectAll_Click(object sender, EventArgs e) { ChangeSelectionUserCompanyListboxes(listBoxGarages, true); } - private void buttonUserCompanyGaragesUnSelectAll_Click(object sender, EventArgs e) - { + private void buttonUserCompanyGaragesUnSelectAll_Click(object sender, EventArgs e) { ChangeSelectionUserCompanyListboxes(listBoxGarages, false); } - private void buttonUserCompanyCitiesSelectAll_Click(object sender, EventArgs e) - { + private void buttonUserCompanyCitiesSelectAll_Click(object sender, EventArgs e) { ChangeSelectionUserCompanyListboxes(listBoxVisitedCities, true); } - private void buttonUserCompanyCitiesUnSelectAll_Click(object sender, EventArgs e) - { + private void buttonUserCompanyCitiesUnSelectAll_Click(object sender, EventArgs e) { ChangeSelectionUserCompanyListboxes(listBoxVisitedCities, false); } - private void buttonUserCompanyDriversSelectAll_Click(object sender, EventArgs e) - { + private void buttonUserCompanyDriversSelectAll_Click(object sender, EventArgs e) { ChangeSelectionUserCompanyListboxes(listBoxUserCompanyDrivers, true); } - private void buttonUserCompanyDriversUnSelectAll_Click(object sender, EventArgs e) - { + private void buttonUserCompanyDriversUnSelectAll_Click(object sender, EventArgs e) { ChangeSelectionUserCompanyListboxes(listBoxUserCompanyDrivers, false); } - private void ChangeSelectionUserCompanyListboxes(ListBox _target, bool _state) - { + private void ChangeSelectionUserCompanyListboxes(ListBox _target, bool _state) { int idx = _target.TopIndex; _target.BeginUpdate(); - for (int i = 0; i < _target.Items.Count; i++) - { + for (int i = 0; i < _target.Items.Count; i++) { _target.SetSelected(i, _state); } @@ -928,23 +839,19 @@ private void ChangeSelectionUserCompanyListboxes(ListBox _target, bool _state) // Drivers // Populate - private void PopulateDriversList() - { + private void PopulateDriversList() { List driversList = new List(); // Staff - foreach (string driver in SiiNunitData.Player.drivers) - { + foreach (string driver in SiiNunitData.Player.drivers) { Driver driverInList = new Driver(); driverInList.driverNameless = driver; string drvrType = SiiNunitData.SiiNitems[driver].GetType().Name; - switch(drvrType) - { - case "Driver_Player": - { + switch (drvrType) { + case "Driver_Player": { driverInList.state = Driver.driverState.Player; driverInList.adr = SiiNunitData.Economy.adr; @@ -956,8 +863,7 @@ private void PopulateDriversList() break; } - case "Driver_AI": - { + case "Driver_AI": { driverInList.state = Driver.driverState.Driver; Save.Items.Driver_AI dr = SiiNunitData.SiiNitems[driver]; @@ -976,8 +882,7 @@ private void PopulateDriversList() driversList.Add(driverInList); } - foreach (string driver in SiiNunitData.Player.dismissed_drivers) - { + foreach (string driver in SiiNunitData.Player.dismissed_drivers) { Driver driverInList = new Driver(); driverInList.driverNameless = driver; @@ -1001,8 +906,7 @@ private void PopulateDriversList() driverPoolList = driverPoolList.Select(s => new { fullStr = s, splitStr = s.Split('.') }) .OrderBy(x => int.Parse(x.splitStr[1])).Select(x => x.fullStr).ToList(); - foreach (string driver in driverPoolList) - { + foreach (string driver in driverPoolList) { Driver driverInList = new Driver(); driverInList.driverNameless = driver; @@ -1034,14 +938,12 @@ private void PopulateDriversList() } // Draw - private void listBoxUserCompanyDrivers_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void listBoxUserCompanyDrivers_MeasureItem(object sender, MeasureItemEventArgs e) { // Get the ListBox and the item. e.ItemHeight = (int)(GaragePictureHeight + 2 * GarageItemMargin); } - private void listBoxUserCompanyDrivers_DrawItem(object sender, DrawItemEventArgs e) - { + private void listBoxUserCompanyDrivers_DrawItem(object sender, DrawItemEventArgs e) { // Get the ListBox and the item. ListBox lst = sender as ListBox; @@ -1074,10 +976,8 @@ private void listBoxUserCompanyDrivers_DrawItem(object sender, DrawItemEventArgs // Icon - switch(driver.state) - { - case Driver.driverState.Player: - { + switch (driver.state) { + case Driver.driverState.Player: { itemIcon = CitiesImg[3]; driverName += "=> "; @@ -1085,14 +985,12 @@ private void listBoxUserCompanyDrivers_DrawItem(object sender, DrawItemEventArgs break; } - case Driver.driverState.Driver: - { + case Driver.driverState.Driver: { itemIcon = CitiesImg[1]; break; } - case Driver.driverState.DismissedDriver: - { + case Driver.driverState.DismissedDriver: { itemIcon = CitiesImg[2]; driverName += "[X] "; @@ -1100,8 +998,7 @@ private void listBoxUserCompanyDrivers_DrawItem(object sender, DrawItemEventArgs break; } - case Driver.driverState.FreeDriver: - { + case Driver.driverState.FreeDriver: { itemIcon = CitiesImg[0]; break; } @@ -1144,10 +1041,8 @@ private void listBoxUserCompanyDrivers_DrawItem(object sender, DrawItemEventArgs drawSkillIcons(driver.long_dist); drawSkillIcons((byte)numberOfSetBits(driver.adr)); - void drawSkillIcons(byte _lvl) - { - if (_lvl != 0) - { + void drawSkillIcons(byte _lvl) { + if (_lvl != 0) { itemIcon = SkillImgS[idx]; source_rect = new RectangleF(0, 0, itemIcon.Width, itemIcon.Height); @@ -1181,8 +1076,7 @@ void drawSkillIcons(byte _lvl) idx--; } - int numberOfSetBits(byte v) - { + int numberOfSetBits(byte v) { int i = 0; // store the total here i = (v & 0x55555555) + ((v >> 1) & 0x55555555); @@ -1198,17 +1092,13 @@ int numberOfSetBits(byte v) e.DrawFocusRectangle(); } - private void listBoxUserCompanyDrivers_MouseDown(object sender, MouseEventArgs e) - { + private void listBoxUserCompanyDrivers_MouseDown(object sender, MouseEventArgs e) { - if (e.Button == MouseButtons.Right) - { - if (listBoxUserCompanyDrivers.Items.Count != 0) - { + if (e.Button == MouseButtons.Right) { + if (listBoxUserCompanyDrivers.Items.Count != 0) { Rectangle rect = listBoxUserCompanyDrivers.GetItemRectangle(listBoxUserCompanyDrivers.Items.Count - 1); - if (e.Y < rect.Bottom) - { + if (e.Y < rect.Bottom) { contextMenuStripMainStateChange("CompanyDriversList"); contextMenuStripMain.Show(listBoxUserCompanyDrivers, e.Location); @@ -1217,25 +1107,21 @@ private void listBoxUserCompanyDrivers_MouseDown(object sender, MouseEventArgs e Driver selectedItem = (Driver)listBoxUserCompanyDrivers.Items[index]; - switch (selectedItem.state) - { - case Driver.driverState.Player: - { + switch (selectedItem.state) { + case Driver.driverState.Player: { contextMenuStripCompanyDriversHire.Enabled = false; contextMenuStripCompanyDriversFire.Enabled = false; break; } - case Driver.driverState.Driver: - { + case Driver.driverState.Driver: { contextMenuStripCompanyDriversHire.Enabled = false; contextMenuStripCompanyDriversFire.Enabled = true; break; } case Driver.driverState.DismissedDriver: - case Driver.driverState.FreeDriver: - { + case Driver.driverState.FreeDriver: { contextMenuStripCompanyDriversHire.Enabled = true; contextMenuStripCompanyDriversFire.Enabled = false; break; @@ -1248,14 +1134,11 @@ private void listBoxUserCompanyDrivers_MouseDown(object sender, MouseEventArgs e } } - if (e.Button == MouseButtons.Left) - { - if (listBoxUserCompanyDrivers.Items.Count != 0) - { + if (e.Button == MouseButtons.Left) { + if (listBoxUserCompanyDrivers.Items.Count != 0) { Rectangle rect = listBoxUserCompanyDrivers.GetItemRectangle(listBoxUserCompanyDrivers.Items.Count - 1); - if (e.Y > rect.Bottom) - { + if (e.Y > rect.Bottom) { } } @@ -1264,8 +1147,7 @@ private void listBoxUserCompanyDrivers_MouseDown(object sender, MouseEventArgs e // Events - private void CompanyDriverHireEvent() - { + private void CompanyDriverHireEvent() { List tmpList; ListBox sourceLB = listBoxUserCompanyDrivers; @@ -1275,12 +1157,9 @@ private void CompanyDriverHireEvent() else tmpList = sourceLB.SelectedItems.Cast().ToList(); - foreach (Driver item in tmpList) - { - if (item.state == Driver.driverState.FreeDriver || item.state == Driver.driverState.DismissedDriver) - { - if (!extraDrivers.Contains(item.driverNameless)) - { + foreach (Driver item in tmpList) { + if (item.state == Driver.driverState.FreeDriver || item.state == Driver.driverState.DismissedDriver) { + if (!extraDrivers.Contains(item.driverNameless)) { extraDrivers.Add(item.driverNameless); extraVehicles.Add(null); } @@ -1303,8 +1182,7 @@ private void CompanyDriverHireEvent() UpdateDriverListTotals(sourceLB); } - private void CompanyDriverFireEvent() - { + private void CompanyDriverFireEvent() { List tmpList; ListBox sourceLB = listBoxUserCompanyDrivers; @@ -1314,12 +1192,9 @@ private void CompanyDriverFireEvent() else tmpList = sourceLB.SelectedItems.Cast().ToList(); - foreach (Driver item in tmpList) - { - if (item.state == Driver.driverState.Driver) - { - if (extraDrivers.Contains(item.driverNameless)) - { + foreach (Driver item in tmpList) { + if (item.state == Driver.driverState.Driver) { + if (extraDrivers.Contains(item.driverNameless)) { int idx = extraDrivers.IndexOf(item.driverNameless); extraDrivers.RemoveAt(idx); @@ -1328,8 +1203,7 @@ private void CompanyDriverFireEvent() Garages tmpGarage = GaragesList.Where(x => x.Drivers.Contains(item.driverNameless)).SingleOrDefault(); - if (tmpGarage != null) - { + if (tmpGarage != null) { List tmpDrvrs = tmpGarage.Drivers; int tmpIdx = tmpDrvrs.IndexOf(item.driverNameless); @@ -1343,8 +1217,7 @@ private void CompanyDriverFireEvent() // Check if job is active - if (driverJobInfo.cargo == "null") - { + if (driverJobInfo.cargo == "null") { int drvrIdx = SiiNunitData.Player.drivers.IndexOf(item.driverNameless); SiiNunitData.Player.drivers.RemoveAt(drvrIdx); @@ -1354,9 +1227,7 @@ private void CompanyDriverFireEvent() SiiNunitData.Economy.driver_pool.Add(item.driverNameless); item.state = Driver.driverState.FreeDriver; - } - else - { + } else { SiiNunitData.Player.dismissed_drivers.Add(item.driverNameless); item.state = Driver.driverState.DismissedDriver; @@ -1367,8 +1238,7 @@ private void CompanyDriverFireEvent() UpdateDriverListTotals(sourceLB); } - private void UpdateDriverListTotals(ListBox sourceLB) - { + private void UpdateDriverListTotals(ListBox sourceLB) { List tmpList = sourceLB.Items.Cast().ToList(); int currentStaff = tmpList.Count(x => x.state < Driver.driverState.FreeDriver); @@ -1383,28 +1253,23 @@ private void UpdateDriverListTotals(ListBox sourceLB) FillGaragesList(listBoxGarages.TopIndex); } - private void buttonUserCompanyDriversHire_Click(object sender, EventArgs e) - { + private void buttonUserCompanyDriversHire_Click(object sender, EventArgs e) { CompanyDriverHireEvent(); } - private void buttonUserCompanyDriversFire_Click(object sender, EventArgs e) - { + private void buttonUserCompanyDriversFire_Click(object sender, EventArgs e) { CompanyDriverFireEvent(); } - private void contextMenuStripCompanyDriversEdit_Click(object sender, EventArgs e) - { + private void contextMenuStripCompanyDriversEdit_Click(object sender, EventArgs e) { Driver selectedItem = (Driver)listBoxUserCompanyDrivers.SelectedItem; if (selectedItem.state == Driver.driverState.Player) tabControlMain.SelectedIndex = 0; - else - { + else { FormAIDriverEditor driverEditor = new FormAIDriverEditor(selectedItem); - if (driverEditor.ShowDialog(this) == DialogResult.OK) - { + if (driverEditor.ShowDialog(this) == DialogResult.OK) { // Update listbox Driver tmpDriver = driverEditor.driverData; @@ -1427,13 +1292,11 @@ private void contextMenuStripCompanyDriversEdit_Click(object sender, EventArgs e } } - private void contextMenuStripCompanyDriversHire_Click(object sender, EventArgs e) - { + private void contextMenuStripCompanyDriversHire_Click(object sender, EventArgs e) { CompanyDriverHireEvent(); } - private void contextMenuStripCompanyDriversFire_Click(object sender, EventArgs e) - { + private void contextMenuStripCompanyDriversFire_Click(object sender, EventArgs e) { CompanyDriverFireEvent(); } diff --git a/TS SE Tool/Forms/MainTabs/FormMethodsFreightMarketTab.cs.cs b/TS SE Tool/Forms/MainTabs/FormMethodsFreightMarketTab.cs.cs index 5b98a450..14c458ad 100644 --- a/TS SE Tool/Forms/MainTabs/FormMethodsFreightMarketTab.cs.cs +++ b/TS SE Tool/Forms/MainTabs/FormMethodsFreightMarketTab.cs.cs @@ -23,39 +23,33 @@ limitations under the License. using System.Linq; using System.Windows.Forms; using System.Threading; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool -{ - public partial class FormMain - { +namespace TS_SE_Tool { + public partial class FormMain { //Freight market tab - private void FillFormFreightMarketControls() - { + private void FillFormFreightMarketControls() { FillcomboBoxCargoList(); FillcomboBoxCountries(); FillcomboBoxCompanies(); FillcomboBoxUrgencyList(); FillcomboBoxSourceCity(); } - + //Job list private int JobsItemMargin = 3; private const float JobsPictureHeight = 32, JobsTextHeigh = 23, JobsItemHeight = 64; - private void listBoxAddedJobs_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void listBoxAddedJobs_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = (int)(JobsItemHeight + 2 * JobsItemMargin); } - private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) - { - try - { + private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) { + try { // Get the ListBox and the item. ListBox lst = sender as ListBox; - if (lst.Items.Count > 0) - { + if (lst.Items.Count > 0) { JobAdded Job = (JobAdded)lst.Items[e.Index]; StringFormat format = new StringFormat(); @@ -78,10 +72,10 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) //=== //Get company icons - Image SourceCompIcon = freightMarketGetCompanyIcon(Job.SourceCompany, brushRowStyle), + Image SourceCompIcon = freightMarketGetCompanyIcon(Job.SourceCompany, brushRowStyle), DestinationCompIcon = freightMarketGetCompanyIcon(Job.DestinationCompany, brushRowStyle); - float scale = JobsPictureHeight / SourceCompIcon.Height, + float scale = JobsPictureHeight / SourceCompIcon.Height, companyIconTrueWidth = scale * SourceCompIcon.Width; // Area in which to put the text. @@ -99,7 +93,7 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) source_rect = new RectangleF(0, 0, DestinationCompIcon.Width, DestinationCompIcon.Height); dest_rect.X = e.Bounds.Right - JobsItemMargin - companyIconTrueWidth; e.Graphics.DrawImage(DestinationCompIcon, dest_rect, source_rect, GraphicsUnit.Pixel); - + //=== // Get Cargo Type Icons List CargoTypeIcons = freightMarketGetCargoTypeIcons(Job); @@ -107,8 +101,7 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) int xmult = 0; // Draw Cargo type Images - foreach (Image cargoType in CargoTypeIcons) - { + foreach (Image cargoType in CargoTypeIcons) { source_rect = new RectangleF(0, 0, cargoType.Width, cargoType.Height); dest_rect = new RectangleF((e.Bounds.Right - e.Bounds.Left - cargoType.Width * CargoTypeIcons.Count) / 2 + cargoType.Width * xmult, e.Bounds.Top + JobsItemMargin, cargoType.Width, cargoType.Height); @@ -141,15 +134,15 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) txtToWrite = Job.Cargo; // name - if (CargoLngDict.TryGetValue(Job.Cargo, out string CargoName)) - if (CargoName != null && CargoName != "") + if (CargoLngDict.TryGetValue(Job.Cargo, out string CargoName)) + if (CargoName != null && CargoName != "") txtToWrite = CargoName; // weight ExtCargo tempExtCargo = ExtCargoList.Find(i => i.CargoName == Job.Cargo); int cargoMass = 0; - if (tempExtCargo != null) + if (tempExtCargo != null) cargoMass = (int)(tempExtCargo.Mass * Job.UnitsCount); if (cargoMass > 0) @@ -168,17 +161,16 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) //=== // Distance - if (Job.Distance == 11111) - txtToWrite = Math.Floor(5 * DistanceMultiplier).ToString() + "* "; - else - txtToWrite = Math.Floor(Job.Distance * DistanceMultiplier).ToString() + " "; + if (Job.Distance == 11111) + txtToWrite = Math.Floor(5 * DistanceMultiplier).ToString() + "* "; + else + txtToWrite = Math.Floor(Job.Distance * DistanceMultiplier).ToString() + " "; txtToWrite += ProgSettingsV.DistanceMes; //=== // Ferry - if (Job.Ferrytime > 0) - { + if (Job.Ferrytime > 0) { txtToWrite += " (Ferry "; // Time @@ -189,15 +181,15 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) // Currency string currencyText = ""; - long newValue = (long)Math.Floor(Job.Ferryprice * CurrencyDictConversion[Globals.CurrencyName]); + long newValue = (long)Math.Floor(Job.Ferryprice * SelectedGame.Currencies.Get(Globals.CurrencyName).ConversionRate); - if (CurrencyDictFormat[Globals.CurrencyName][0] != "") - currencyText += CurrencyDictFormat[Globals.CurrencyName][0] + "-"; + if (!string.IsNullOrWhiteSpace(SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[0])) + currencyText += SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[0] + "-"; - currencyText += CurrencyDictFormat[Globals.CurrencyName][1] + String.Format(CultureInfo.CurrentCulture, "{0:N0}", newValue) + - ",-" + CurrencyDictFormat[Globals.CurrencyName][2]; - - txtToWrite += currencyText + ")"; + currencyText += SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[1] + String.Format(CultureInfo.CurrentCulture, "{0:N0}", newValue) + + ",-" + SelectedGame.Currencies.Get(Globals.CurrencyName).FormatSymbols[2]; + + txtToWrite += currencyText + ")"; } // Find the area in which to put the text. @@ -210,33 +202,28 @@ private void listBoxAddedJobs_DrawItem(object sender, DrawItemEventArgs e) // Draw the focus rectangle if appropriate. e.DrawFocusRectangle(); } - } - catch (Exception ex) - { + } catch (Exception ex) { MessageBox.Show(ex.Message, ex.Source); } } - internal Image freightMarketGetCompanyIcon(string _companyName, Brush _brush) - { - string filepath = @"img\" + GameType + @"\companies\" + _companyName + ".dds"; + internal Image freightMarketGetCompanyIcon(string _companyName, Brush _brush) { + string filepath = @"img\" + SelectedGame.Type + @"\companies\" + _companyName + ".dds"; if (File.Exists(filepath)) return Utilities.Graphics_TSSET.ddsImgLoader(filepath, 100, 32).images[0]; - else - { - string currentDirName = Directory.GetCurrentDirectory() + @"\img\" + GameType + @"\companies"; + else { + string currentDirName = Directory.GetCurrentDirectory() + @"\img\" + SelectedGame.Type + @"\companies"; string searchpattern = _companyName.Split(new char[] { '_' })[0] + "*.dds"; string[] files = Directory.GetFiles(currentDirName, searchpattern); if (files.Length > 0) return Utilities.Graphics_TSSET.ddsImgLoader(files[0], 100, 32).images[0]; - else - return freightMarketDrawCompanyIconAsText(_companyName, 100, 32, _brush, 12); + else + return freightMarketDrawCompanyIconAsText(_companyName, 100, 32, _brush, 12); } } - internal Bitmap freightMarketDrawCompanyIconAsText(string _companyName, int _width, int _height, Brush _brush, int _fontsize) - { + internal Bitmap freightMarketDrawCompanyIconAsText(string _companyName, int _width, int _height, Brush _brush, int _fontsize) { int offsetX = 5, offsetY = 5; Bitmap bmp = new Bitmap(_width, _height); @@ -262,9 +249,8 @@ internal Bitmap freightMarketDrawCompanyIconAsText(string _companyName, int _wid return bmp; } - internal void freightMarketJobListDrawCityName(DrawItemEventArgs e, string _cityName, RectangleF _layout_rect, StringFormat _format, Brush _brush, bool _left) - { - string textToWrite = "", + internal void freightMarketJobListDrawCityName(DrawItemEventArgs e, string _cityName, RectangleF _layout_rect, StringFormat _format, Brush _brush, bool _left) { + string textToWrite = "", countryName = CitiesList.Find(xc => xc.CityName == _cityName).Country; int cityNameWidth = 0, countryNameWidth = 0; @@ -273,13 +259,12 @@ internal void freightMarketJobListDrawCityName(DrawItemEventArgs e, string _city Font BoldFont = new Font(this.Font, FontStyle.Bold); //Country name translated - if (countryName != "") - { + if (countryName != "") { textToWrite = "("; - if (CountriesDataList.ContainsKey(countryName)) - textToWrite += CountriesDataList[countryName].ShortName; - else + if (CountriesDataList.ContainsKey(countryName)) + textToWrite += CountriesDataList[countryName].ShortName; + else textToWrite += countryName.First(); textToWrite += ")"; @@ -317,8 +302,7 @@ internal void freightMarketJobListDrawCityName(DrawItemEventArgs e, string _city e.Graphics.DrawString(textToWrite, this.Font, _brush, cityLayout, _format); } - internal List freightMarketGetCargoTypeIcons(JobAdded _job ) - { + internal List freightMarketGetCargoTypeIcons(JobAdded _job) { List cargoTypeImgList = new List(); bool externalHeavy = false; @@ -326,34 +310,28 @@ internal List freightMarketGetCargoTypeIcons(JobAdded _job ) bool externalValuable = false; int externalTrueADR = 0; - try - { + try { ExtCargo tempExtCargo = ExtCargoList.Find(x => x.CargoName == _job.Cargo); - if (tempExtCargo != null) - { + if (tempExtCargo != null) { int cargoMass = (int)(tempExtCargo.Mass * _job.UnitsCount); if (cargoMass > 26000) externalHeavy = true; externalTrueADR = tempExtCargo.ADRclass; - switch (externalTrueADR) - { - case 6: - { + switch (externalTrueADR) { + case 6: { externalTrueADR = 5; break; } - case 8: - { + case 8: { externalTrueADR = 6; break; } } - if (externalTrueADR > 0) - { + if (externalTrueADR > 0) { Bitmap bmp = new Bitmap(32, 32); Graphics graph = Graphics.FromImage(bmp); graph.DrawImage(ADRImgS[externalTrueADR - 1], 2, 2, 28, 28); @@ -364,20 +342,18 @@ internal List freightMarketGetCargoTypeIcons(JobAdded _job ) externalFragile = tempExtCargo.Fragility; externalValuable = tempExtCargo.Valuable; - if (externalFragile == 0 || externalFragile >= (decimal)0.7) - cargoTypeImgList.Add(CargoType2Img[0]); + if (externalFragile == 0 || externalFragile >= (decimal)0.7) + cargoTypeImgList.Add(CargoType2Img[0]); - if (externalValuable) - cargoTypeImgList.Add(CargoType2Img[1]); + if (externalValuable) + cargoTypeImgList.Add(CargoType2Img[1]); } - } - catch - { } + } catch { } if (_job.Type == 1 || externalHeavy) cargoTypeImgList.Add(CargoTypeImg[1]); - - if (_job.Type == 2) + + if (_job.Type == 2) cargoTypeImgList.Add(CargoTypeImg[2]); cargoTypeImgList.Add(UrgencyImg[_job.Urgency]); @@ -386,8 +362,7 @@ internal List freightMarketGetCargoTypeIcons(JobAdded _job ) } //Main countries - public void FillcomboBoxCountries() - { + public void FillcomboBoxCountries() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("Country", typeof(string)); combDT.Columns.Add(dc); @@ -397,17 +372,13 @@ public void FillcomboBoxCountries() string value = null; - foreach (string tempitem in CountriesList) - { + foreach (string tempitem in CountriesList) { value = null; CountriesLngDict.TryGetValue(tempitem, out value); - if (value != null && value != "") - { + if (value != null && value != "") { combDT.Rows.Add(tempitem, value); - } - else - { + } else { string CapName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(tempitem); combDT.Rows.Add(tempitem, CapName); } @@ -421,12 +392,9 @@ public void FillcomboBoxCountries() CountriesLngDict.TryGetValue("+all", out value); - if (value != null && value != "") - { + if (value != null && value != "") { row1[1] = value; - } - else - { + } else { row1[1] = "All"; } @@ -434,20 +402,16 @@ public void FillcomboBoxCountries() List cities = CitiesList.FindAll(x => !x.Disabled && x.Country == ""); - if (cities.Count > 0) - { + if (cities.Count > 0) { //Unsorted item row1 = dt2.NewRow(); row1[0] = "+unsorted"; CountriesLngDict.TryGetValue("+unsorted", out value); - if (value != null && value != "") - { + if (value != null && value != "") { row1[1] = value; - } - else - { + } else { row1[1] = "Unsorted"; } @@ -461,25 +425,21 @@ public void FillcomboBoxCountries() comboBoxFreightMarketCountries.SelectedValue = "+all"; } - private void comboBoxCountries_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxCountries_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxFreightMarketCountries.SelectedIndex != -1) triggerDestinationCitiesUpdate(); } //Main companies - public void FillcomboBoxCompanies() - { + public void FillcomboBoxCompanies() { //start filtering List tempCompList = new List(); Dictionary sourceCompList = new Dictionary(); - foreach (City city in CitiesList.FindAll(x => !x.Disabled)) - { + foreach (City city in CitiesList.FindAll(x => !x.Disabled)) { List source = city.ReturnCompanies(); - foreach (Company company in from x in source where !x.Excluded select x) - { + foreach (Company company in from x in source where !x.Excluded select x) { if (!sourceCompList.ContainsKey(company.CompanyName)) sourceCompList.Add(company.CompanyName, company.CompanyNameTranslated); } @@ -493,8 +453,7 @@ public void FillcomboBoxCompanies() dc = new DataColumn("CompanyName", typeof(string)); combDT.Columns.Add(dc); - foreach (KeyValuePair tempitem in sourceCompList) - { + foreach (KeyValuePair tempitem in sourceCompList) { combDT.Rows.Add(tempitem.Key, tempitem.Value); } @@ -518,15 +477,13 @@ public void FillcomboBoxCompanies() //end filling } - private void comboBoxCompanies_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxCompanies_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxFreightMarketCompanies.SelectedIndex != -1) triggerDestinationCitiesUpdate(); } - + //Source city - public void FillcomboBoxSourceCity() - { + public void FillcomboBoxSourceCity() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("City", typeof(string)); combDT.Columns.Add(dc); @@ -542,8 +499,7 @@ public void FillcomboBoxSourceCity() //start filling //fill source and destination cities - foreach (City tempcity in from x in CitiesList where !x.Disabled select x) - { + foreach (City tempcity in from x in CitiesList where !x.Disabled select x) { combDT.Rows.Add(tempcity.CityName, tempcity.CityNameTranslated); } combDT.DefaultView.Sort = "CityName ASC"; @@ -560,8 +516,7 @@ public void FillcomboBoxSourceCity() //end } - private void comboBoxSourceCity_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxSourceCity_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxFreightMarketSourceCity.SelectedValue == null) return; @@ -588,65 +543,51 @@ private void comboBoxSourceCity_SelectedIndexChanged(object sender, EventArgs e) comboBoxFreightMarketSourceCompany.DataSource = combDT; - if (ProgSettingsV.ProposeRandom && (comboBoxFreightMarketSourceCompany.Items.Count > 0)) - { + if (ProgSettingsV.ProposeRandom && (comboBoxFreightMarketSourceCompany.Items.Count > 0)) { comboBoxFreightMarketSourceCompany.SelectedIndex = RandomValue.Next(comboBoxFreightMarketSourceCompany.Items.Count); } } - + //Source company - private void comboBoxSourceCompany_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxSourceCompany_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxFreightMarketSourceCompany.SelectedIndex != -1) - if (ProgSettingsV.ProposeRandom) - { + if (ProgSettingsV.ProposeRandom) { comboBoxFreightMarketCargoList.SelectedIndex = RandomValue.Next(comboBoxFreightMarketCargoList.Items.Count); } } - + //Destination city - private void comboBoxDestinationCity_SelectedIndexChanged(object sender, EventArgs e) - { - if (comboBoxFreightMarketDestinationCity.SelectedIndex >= 0) - { + private void comboBoxDestinationCity_SelectedIndexChanged(object sender, EventArgs e) { + if (comboBoxFreightMarketDestinationCity.SelectedIndex >= 0) { comboBoxFreightMarketDestinationCompany.SelectedIndex = -1; comboBoxFreightMarketDestinationCompany.Text = ""; triggerDestinationCompaniesUpdate(); - if (comboBoxFreightMarketCompanies.SelectedValue.ToString() != "+all") - { + if (comboBoxFreightMarketCompanies.SelectedValue.ToString() != "+all") { comboBoxFreightMarketDestinationCompany.SelectedValue = comboBoxFreightMarketCompanies.SelectedValue; - } - else if (ProgSettingsV.ProposeRandom && (comboBoxFreightMarketDestinationCompany.Items.Count > 0)) - { - if ((comboBoxFreightMarketDestinationCompany.Items.Count != 1) && (comboBoxFreightMarketSourceCity.SelectedValue == comboBoxFreightMarketDestinationCity.SelectedValue)) - { + } else if (ProgSettingsV.ProposeRandom && (comboBoxFreightMarketDestinationCompany.Items.Count > 0)) { + if ((comboBoxFreightMarketDestinationCompany.Items.Count != 1) && (comboBoxFreightMarketSourceCity.SelectedValue == comboBoxFreightMarketDestinationCity.SelectedValue)) { int rnd = 0; - while (true) - { + while (true) { rnd = RandomValue.Next(comboBoxFreightMarketDestinationCompany.Items.Count); - if (comboBoxFreightMarketSourceCompany.SelectedIndex != rnd) - { + if (comboBoxFreightMarketSourceCompany.SelectedIndex != rnd) { comboBoxFreightMarketDestinationCompany.SelectedIndex = rnd; break; } } - } - else + } else comboBoxFreightMarketDestinationCompany.SelectedIndex = RandomValue.Next(comboBoxFreightMarketDestinationCompany.Items.Count); } } } - private void triggerDestinationCitiesUpdate() - { + private void triggerDestinationCitiesUpdate() { if (comboBoxFreightMarketCountries.SelectedIndex != -1 && comboBoxFreightMarketCompanies.SelectedIndex != -1) SetupDestinationCities(!(comboBoxFreightMarketCountries.SelectedValue.ToString() == "+all"), !(comboBoxFreightMarketCompanies.SelectedValue.ToString() == "+all")); } - private void SetupDestinationCities(bool _country_selected, bool _company_selected) - { + private void SetupDestinationCities(bool _country_selected, bool _company_selected) { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("City", typeof(string)); combDT.Columns.Add(dc); @@ -659,52 +600,38 @@ private void SetupDestinationCities(bool _country_selected, bool _company_select if (_country_selected)// && !checkBoxFreightMarketFilterDestination.Checked) { - if (comboBoxFreightMarketCountries.SelectedValue.ToString() == "+unsorted") - { + if (comboBoxFreightMarketCountries.SelectedValue.ToString() == "+unsorted") { cities = cities.FindAll(x => x.Country == ""); - } - else + } else cities = cities.FindAll(x => x.Country == comboBoxFreightMarketCountries.SelectedValue.ToString()); } - if (cities.Count > 0) - { + if (cities.Count > 0) { comboBoxFreightMarketDestinationCity.Enabled = false; comboBoxFreightMarketDestinationCompany.Enabled = false; - foreach (City city in cities) - { + foreach (City city in cities) { List companyList = city.ReturnCompanies(); - if (!_company_selected) - { - } - else - if (_company_selected && checkBoxFreightMarketFilterDestination.Checked) - { + if (!_company_selected) { + } else + if (_company_selected && checkBoxFreightMarketFilterDestination.Checked) { companyList = companyList.FindAll(x => (x.CompanyName == comboBoxFreightMarketCompanies.SelectedValue.ToString()) && !x.Excluded); - } - else - if (!(_company_selected || !checkBoxFreightMarketFilterDestination.Checked)) - { + } else + if (!(_company_selected || !checkBoxFreightMarketFilterDestination.Checked)) { companyList = companyList.FindAll(x => !x.Excluded); - } - else - if (_company_selected && !checkBoxFreightMarketFilterDestination.Checked) - { + } else + if (_company_selected && !checkBoxFreightMarketFilterDestination.Checked) { companyList = companyList.FindAll(x => x.CompanyName == comboBoxFreightMarketCompanies.SelectedValue.ToString()); } - if (companyList.Count > 0) - { + if (companyList.Count > 0) { combDT.Rows.Add(city.CityName, city.CityNameTranslated); comboBoxFreightMarketDestinationCity.Enabled = true; comboBoxFreightMarketDestinationCompany.Enabled = true; } } - } - else - { + } else { comboBoxFreightMarketDestinationCity.Text = ""; comboBoxFreightMarketDestinationCity.Enabled = false; comboBoxFreightMarketDestinationCompany.Text = ""; @@ -725,16 +652,13 @@ private void SetupDestinationCities(bool _country_selected, bool _company_select comboBoxFreightMarketDestinationCity.SelectedIndexChanged += comboBoxDestinationCity_SelectedIndexChanged; //end filling - if (comboBoxFreightMarketDestinationCity.Items.Count == 0) - { + if (comboBoxFreightMarketDestinationCity.Items.Count == 0) { comboBoxFreightMarketDestinationCity.SelectedIndex = -1; comboBoxFreightMarketDestinationCity.Text = ""; comboBoxFreightMarketDestinationCompany.Text = ""; UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "message_no_matching_cities"); - } - else - { + } else { if (prevValue == null || FindByValue(comboBoxFreightMarketDestinationCity, prevValue) == -1) comboBoxFreightMarketDestinationCity.SelectedIndex = GetRandomCBindex(comboBoxFreightMarketDestinationCity.SelectedIndex, comboBoxFreightMarketDestinationCity.Items.Count); else @@ -744,20 +668,17 @@ private void SetupDestinationCities(bool _country_selected, bool _company_select } } - + //Destination companies - private void triggerDestinationCompaniesUpdate() - { + private void triggerDestinationCompaniesUpdate() { SetupDestinationCompanies(!(comboBoxFreightMarketCompanies.SelectedValue.ToString() == "+all")); } - private void SetupDestinationCompanies(bool _company_selected) - { + private void SetupDestinationCompanies(bool _company_selected) { List CityCompanies = CitiesList.Find(x => x.CityName == comboBoxFreightMarketDestinationCity.SelectedValue.ToString()).ReturnCompanies(); List RealCompanies = CityCompanies.FindAll(x => !x.Excluded); - if (_company_selected && checkBoxFreightMarketFilterDestination.Checked) - { + if (_company_selected && checkBoxFreightMarketFilterDestination.Checked) { RealCompanies = RealCompanies.FindAll(x => (x.CompanyName == comboBoxFreightMarketCompanies.SelectedValue.ToString())); } @@ -768,8 +689,7 @@ private void SetupDestinationCompanies(bool _company_selected) dc = new DataColumn("CompanyName", typeof(string)); combDT.Columns.Add(dc); - foreach (Company company in RealCompanies) - { + foreach (Company company in RealCompanies) { combDT.Rows.Add(company.CompanyName, company.CompanyNameTranslated); } @@ -780,18 +700,15 @@ private void SetupDestinationCompanies(bool _company_selected) comboBoxFreightMarketDestinationCompany.DataSource = combDT; } - private void comboBoxDestinationCompany_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxDestinationCompany_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxFreightMarketDestinationCompany.SelectedIndex != -1) - if (ProgSettingsV.ProposeRandom) - { + if (ProgSettingsV.ProposeRandom) { comboBoxFreightMarketCargoList.SelectedIndex = RandomValue.Next(comboBoxFreightMarketCargoList.Items.Count); } } - + //Cargo list - public void FillcomboBoxCargoList() - { + public void FillcomboBoxCargoList() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("Cargo", typeof(string)); combDT.Columns.Add(dc); @@ -799,24 +716,17 @@ public void FillcomboBoxCargoList() dc = new DataColumn("CargoName", typeof(string)); combDT.Columns.Add(dc); - foreach (Cargo Item in CargoesList) - { + foreach (Cargo Item in CargoesList) { string strName = Item.CargoName; string сapName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(strName.Replace('_', ' ')); - if (CargoLngDict.TryGetValue(Item.CargoName, out string trName)) - { - if (trName != null && trName != "") - { + if (CargoLngDict.TryGetValue(Item.CargoName, out string trName)) { + if (trName != null && trName != "") { combDT.Rows.Add(strName, trName); - } - else - { + } else { combDT.Rows.Add(strName, сapName + " -nt"); } - } - else - { + } else { combDT.Rows.Add(strName, сapName + " -new"); } } @@ -828,13 +738,11 @@ public void FillcomboBoxCargoList() comboBoxFreightMarketCargoList.DataSource = combDT; } - private void comboBoxFreightMarketCargoList_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void comboBoxFreightMarketCargoList_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 26; } - private void comboBoxFreightMarketCargoList_DrawItem(object sender, DrawItemEventArgs e) - { + private void comboBoxFreightMarketCargoList_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) return; @@ -872,34 +780,28 @@ private void comboBoxFreightMarketCargoList_DrawItem(object sender, DrawItemEven int indexTypeImgs = 0; bool extheavy = false; - try - { + try { ExtCargo tempExtCargo = ExtCargoList.Find(z => z.CargoName == CargoName); - if (tempExtCargo != null) - { + if (tempExtCargo != null) { decimal fragile = tempExtCargo.Fragility; bool valuable = tempExtCargo.Valuable; bool overweight = tempExtCargo.Overweight; int ADRclass = tempExtCargo.ADRclass; int trueADR = ADRclass; - switch (ADRclass) - { - case 6: - { + switch (ADRclass) { + case 6: { trueADR = 5; break; } - case 8: - { + case 8: { trueADR = 6; break; } } - if (trueADR > 0) - { + if (trueADR > 0) { Bitmap bmp = new Bitmap(32, 32); Graphics graph = Graphics.FromImage(bmp); graph.DrawImage(ADRImgS[trueADR - 1], 2, 2, 28, 28); @@ -908,30 +810,24 @@ private void comboBoxFreightMarketCargoList_DrawItem(object sender, DrawItemEven indexTypeImgs++; } - if (fragile == 0 || fragile >= (decimal)0.7) - { + if (fragile == 0 || fragile >= (decimal)0.7) { TypeImgs[indexTypeImgs] = CargoType2Img[0]; indexTypeImgs++; } - if (valuable) - { + if (valuable) { TypeImgs[indexTypeImgs] = CargoType2Img[1]; indexTypeImgs++; } - if (overweight) - { + if (overweight) { extheavy = true; } } - } - catch - { + } catch { } - if (extheavy) - { + if (extheavy) { TypeImgs[indexTypeImgs] = CargoTypeImg[1]; indexTypeImgs++; } @@ -944,19 +840,15 @@ private void comboBoxFreightMarketCargoList_DrawItem(object sender, DrawItemEven */ int xmult = 0, images = 0; - foreach (Image temp in TypeImgs) - { - if (temp == null) - { + foreach (Image temp in TypeImgs) { + if (temp == null) { break; } images++; } - for (int i = 0; i < images; i++) - { - if (TypeImgs[i] == null) - { + for (int i = 0; i < images; i++) { + if (TypeImgs[i] == null) { break; } @@ -980,40 +872,30 @@ private void comboBoxFreightMarketCargoList_DrawItem(object sender, DrawItemEven e.DrawFocusRectangle(); } - private void comboBoxCargoList_SelectedIndexChanged(object sender, EventArgs e) - { - if (ProgSettingsV.ProposeRandom && comboBoxFreightMarketUrgency.Items.Count > 0) - { + private void comboBoxCargoList_SelectedIndexChanged(object sender, EventArgs e) { + if (ProgSettingsV.ProposeRandom && comboBoxFreightMarketUrgency.Items.Count > 0) { comboBoxFreightMarketUrgency.SelectedIndex = RandomValue.Next(comboBoxFreightMarketUrgency.Items.Count); } ComboBox temp = sender as ComboBox; if (temp.SelectedIndex > -1) FillcomboBoxTrailerDefList(); } - + //Urgency - public void FillcomboBoxUrgencyList() - { + public void FillcomboBoxUrgencyList() { DataTable combDT = new DataTable(); combDT.Columns.Add("ID"); combDT.Columns.Add("UrgencyDisplayName"); - foreach (int tempitem in UrgencyArray) - { + foreach (int tempitem in UrgencyArray) { string str = tempitem.ToString(); - if (UrgencyLngDict.TryGetValue(str, out string value)) - { - if (value != null && value != "") - { + if (UrgencyLngDict.TryGetValue(str, out string value)) { + if (value != null && value != "") { combDT.Rows.Add(str, value); - } - else - { + } else { combDT.Rows.Add(str, str); } - } - else - { + } else { combDT.Rows.Add(str, str); } } @@ -1023,13 +905,11 @@ public void FillcomboBoxUrgencyList() comboBoxFreightMarketUrgency.DataSource = combDT; } - private void comboBoxFreightMarketUrgency_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void comboBoxFreightMarketUrgency_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 26; } - private void comboBoxFreightMarketUrgency_DrawItem(object sender, DrawItemEventArgs e) - { + private void comboBoxFreightMarketUrgency_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) return; @@ -1072,10 +952,9 @@ private void comboBoxFreightMarketUrgency_DrawItem(object sender, DrawItemEventA // Draw the focus rectangle if the mouse hovers over an item. e.DrawFocusRectangle(); } - + //Trailer definition - public void FillcomboBoxTrailerDefList() - { + public void FillcomboBoxTrailerDefList() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("Definition", typeof(string)); combDT.Columns.Add(dc); @@ -1091,31 +970,25 @@ public void FillcomboBoxTrailerDefList() Cargo TempCargo = CargoesList.Find(x => x.CargoName == comboBoxFreightMarketCargoList.SelectedValue.ToString().Split(new char[] { ',' })[0]); - foreach (TrailerDefinition tempitem in TempCargo.TrailerDefList) - { + foreach (TrailerDefinition tempitem in TempCargo.TrailerDefList) { string translatedCargoName = null; CargoLngDict.TryGetValue(tempitem.DefName, out translatedCargoName); string CapName = ""; - if (translatedCargoName != null && translatedCargoName != "") - { + if (translatedCargoName != null && translatedCargoName != "") { CapName = translatedCargoName; - } - else - { + } else { CapName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(tempitem.DefName); string[] CapNameArray = CapName.Split(new char[] { '.' }); CapName = ""; - for (int i = 1; i < CapNameArray.Length; i++) - { + for (int i = 1; i < CapNameArray.Length; i++) { CapName += CapNameArray[i] + " "; } } - foreach (CargoLoadVariants cargoVar in tempitem.CargoLoadVariants) - { + foreach (CargoLoadVariants cargoVar in tempitem.CargoLoadVariants) { combDT.Rows.Add(tempitem.DefName, CapName + "(" + cargoVar.UnitsCount + "u)", tempitem.CargoType, cargoVar.UnitsCount); } } @@ -1129,20 +1002,17 @@ public void FillcomboBoxTrailerDefList() comboBoxFreightMarketTrailerDef.SelectedIndex = RandomValue.Next(comboBoxFreightMarketTrailerDef.Items.Count); } - private void comboBoxFreightMarketTrailerDef_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxFreightMarketTrailerDef_SelectedIndexChanged(object sender, EventArgs e) { ComboBox temp = sender as ComboBox; if (temp.SelectedIndex > -1) FillcomboBoxTrailerVariantList(); } - private void comboBoxFreightMarketTrailerDef_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void comboBoxFreightMarketTrailerDef_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 26; } - private void comboBoxFreightMarketTrailerDef_DrawItem(object sender, DrawItemEventArgs e) - { + private void comboBoxFreightMarketTrailerDef_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) return; @@ -1178,39 +1048,31 @@ private void comboBoxFreightMarketTrailerDef_DrawItem(object sender, DrawItemEve int indexTypeImgs = 0; bool extheavy = false; - try - { + try { ExtCargo tmp = ExtCargoList.Find(xx => xx.CargoName == CargoName); - if (tmp != null) - { + if (tmp != null) { decimal TCW = tmp.Mass * DefUnitsCount; if (TCW > 26000) extheavy = true; } - } - catch - { } + } catch { } - if (extheavy || CargoType == "1") - { + if (extheavy || CargoType == "1") { TypeImgs[indexTypeImgs] = CargoTypeImg[1]; indexTypeImgs++; } - if (CargoType == "2") - { + if (CargoType == "2") { TypeImgs[indexTypeImgs] = CargoTypeImg[2]; indexTypeImgs++; } int xmult = 0, images = 0; - foreach (Image temp in TypeImgs) - { - if (temp == null) - { + foreach (Image temp in TypeImgs) { + if (temp == null) { break; } images++; @@ -1221,10 +1083,8 @@ private void comboBoxFreightMarketTrailerDef_DrawItem(object sender, DrawItemEve float width = comboBoxFreightMarketTrailerDef.Width - 26 * images - rightOffset; // Draw Type picture - for (int i = 0; i < images; i++) - { - if (TypeImgs[i] == null) - { + for (int i = 0; i < images; i++) { + if (TypeImgs[i] == null) { break; } @@ -1246,17 +1106,14 @@ private void comboBoxFreightMarketTrailerDef_DrawItem(object sender, DrawItemEve // Measure string. SizeF stringSize = e.Graphics.MeasureString(txt, textfnt); - if (stringSize.Width >= width) - { - while (true) - { + if (stringSize.Width >= width) { + while (true) { fntsize = fntsize - 0.25f; textfnt = new Font(fontName, fntsize); stringSize = e.Graphics.MeasureString(txt, textfnt); - if (stringSize.Width <= width) - { + if (stringSize.Width <= width) { textfnt = new Font(fontName, fntsize); break; } @@ -1274,10 +1131,9 @@ private void comboBoxFreightMarketTrailerDef_DrawItem(object sender, DrawItemEve // Draw the focus rectangle if the mouse hovers over an item. e.DrawFocusRectangle(); } - + //Trailer variant - public void FillcomboBoxTrailerVariantList() - { + public void FillcomboBoxTrailerVariantList() { DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("Variant", typeof(string)); combDT.Columns.Add(dc); @@ -1287,18 +1143,14 @@ public void FillcomboBoxTrailerVariantList() List TrailerVariants = TrailerDefinitionVariants[comboBoxFreightMarketTrailerDef.SelectedValue.ToString()]; - foreach (string tempitem in TrailerVariants) - { + foreach (string tempitem in TrailerVariants) { string value = null; //CargoLngDict.TryGetValue(tempitem, out value); - if (value != null && value != "") - { + if (value != null && value != "") { combDT.Rows.Add(tempitem, value); - } - else - { + } else { string CapName = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(tempitem); combDT.Rows.Add(tempitem, CapName); } @@ -1313,13 +1165,11 @@ public void FillcomboBoxTrailerVariantList() comboBoxFreightMarketTrailerVariant.SelectedIndex = RandomValue.Next(comboBoxFreightMarketTrailerVariant.Items.Count); } - private void comboBoxFreightMarketTrailerVariant_MeasureItem(object sender, MeasureItemEventArgs e) - { + private void comboBoxFreightMarketTrailerVariant_MeasureItem(object sender, MeasureItemEventArgs e) { e.ItemHeight = 26; } - private void comboBoxFreightMarketTrailerVariant_DrawItem(object sender, DrawItemEventArgs e) - { + private void comboBoxFreightMarketTrailerVariant_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) return; @@ -1354,16 +1204,13 @@ private void comboBoxFreightMarketTrailerVariant_DrawItem(object sender, DrawIte // Measure string. SizeF stringSize = e.Graphics.MeasureString(txt, textfnt); - if (stringSize.Width > width) - { - while(true) - { + if (stringSize.Width > width) { + while (true) { fntsize = fntsize - 0.25f; textfnt = new Font(fontName, fntsize); stringSize = e.Graphics.MeasureString(txt, textfnt); - if (stringSize.Width <= width) - { + if (stringSize.Width <= width) { textfnt = new Font(fontName, fntsize); break; } @@ -1379,17 +1226,15 @@ private void comboBoxFreightMarketTrailerVariant_DrawItem(object sender, DrawIte // Draw the focus rectangle if the mouse hovers over an item. e.DrawFocusRectangle(); } - + //Buttons - private void buttonAddJob_Click(object sender, EventArgs e) - { + private void buttonAddJob_Click(object sender, EventArgs e) { AddCargo(false); buttonFreightMarketClearJobList.Enabled = true; } - private void buttonEditJob_Click(object sender, EventArgs e) - { + private void buttonEditJob_Click(object sender, EventArgs e) { AddCargo(true); buttonFreightMarketCancelJobEdit.Visible = false; @@ -1401,8 +1246,7 @@ private void buttonEditJob_Click(object sender, EventArgs e) buttonFreightMarketAddJob.Click += buttonAddJob_Click; } - private void buttonFreightMarketCancelJobEdit_Click(object sender, EventArgs e) - { + private void buttonFreightMarketCancelJobEdit_Click(object sender, EventArgs e) { listBoxFreightMarketAddedJobs.Enabled = true; buttonFreightMarketCancelJobEdit.Visible = false; buttonFreightMarketCancelJobEdit.Enabled = false; @@ -1416,13 +1260,11 @@ private void buttonFreightMarketCancelJobEdit_Click(object sender, EventArgs e) comboBoxFreightMarketSourceCompany.SelectedValue = ((JobAdded)listBoxFreightMarketAddedJobs.Items[listBoxFreightMarketAddedJobs.Items.Count - 1]).DestinationCompany; } - private void buttonClearJobList_Click(object sender, EventArgs e) - { + private void buttonClearJobList_Click(object sender, EventArgs e) { ClearJobData(); } - private void ClearJobData() - { + private void ClearJobData() { unCertainRouteLength = ""; JobsAmountAdded = 0; @@ -1433,25 +1275,19 @@ private void ClearJobData() RefreshFreightMarketDistance(); } - private void checkBoxRandomDest_CheckedChanged(object sender, EventArgs e) - { + private void checkBoxRandomDest_CheckedChanged(object sender, EventArgs e) { ProgSettingsV.ProposeRandom = checkBoxFreightMarketRandomDest.Checked; } - private void buttonFreightMarketRandomizeCargo_Click(object sender, EventArgs e) - { + private void buttonFreightMarketRandomizeCargo_Click(object sender, EventArgs e) { comboBoxFreightMarketCargoList.SelectedIndex = RandomValue.Next(comboBoxFreightMarketCargoList.Items.Count); } - private void AddCargo(bool JobEditing) - { - if (comboBoxFreightMarketSourceCity.SelectedIndex < 0 || comboBoxFreightMarketSourceCompany.SelectedIndex < 0 || comboBoxFreightMarketDestinationCity.SelectedIndex < 0 || comboBoxFreightMarketDestinationCompany.SelectedIndex < 0 || comboBoxFreightMarketCargoList.SelectedIndex < 0 || comboBoxFreightMarketUrgency.SelectedIndex < 0 || comboBoxFreightMarketTrailerDef.SelectedIndex < 0 || comboBoxFreightMarketTrailerVariant.SelectedIndex < 0) - { + private void AddCargo(bool JobEditing) { + if (comboBoxFreightMarketSourceCity.SelectedIndex < 0 || comboBoxFreightMarketSourceCompany.SelectedIndex < 0 || comboBoxFreightMarketDestinationCity.SelectedIndex < 0 || comboBoxFreightMarketDestinationCompany.SelectedIndex < 0 || comboBoxFreightMarketCargoList.SelectedIndex < 0 || comboBoxFreightMarketUrgency.SelectedIndex < 0 || comboBoxFreightMarketTrailerDef.SelectedIndex < 0 || comboBoxFreightMarketTrailerVariant.SelectedIndex < 0) { Utilities.IO_Utilities.LogWriter("Missing selection of Source, Destination or Cargo settings"); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_job_parameters_not_filled"); - } - else - { + } else { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Clear); #region SetupVariables @@ -1478,8 +1314,7 @@ private void AddCargo(bool JobEditing) string FerryPrice = route[6]; //Setting proper ferry time - if (FerryTime == "-1") - { + if (FerryTime == "-1") { FerryTime = "0"; } @@ -1499,8 +1334,7 @@ private void AddCargo(bool JobEditing) int TrueDistance = (int)(int.Parse(distance) * ProgSettingsV.TimeMultiplier); bool _realDistance = true; - if (distance == "11111") - { + if (distance == "11111") { TrueDistance = (int)(5 * ProgSettingsV.TimeMultiplier); _realDistance = false; @@ -1515,8 +1349,7 @@ private void AddCargo(bool JobEditing) UnitsCount, TrueDistance, int.Parse(FerryTime), int.Parse(FerryPrice), ExpirationTime, TruckName, TrailerVariant, TrailerDefinition, _realDistance); //Settign start point for loopback route - if (JobsAmountAdded == 0) - { + if (JobsAmountAdded == 0) { LoopStartCity = SourceCity; LoopStartCompany = SourceCompany; } @@ -1524,8 +1357,7 @@ private void AddCargo(bool JobEditing) //Add Job data to program storage string companyNameJob = "company.volatile." + SourceCompany + "." + SourceCity; - if (!JobEditing) - { + if (!JobEditing) { //Adding new Job //Tracking total amount of jobs added JobsAmountAdded++; @@ -1544,25 +1376,17 @@ private void AddCargo(bool JobEditing) else looptest = JobsAmountAdded + 1; - if (ProgSettingsV.LoopEvery != 0 && (looptest % ProgSettingsV.LoopEvery) == 0) - { - try - { + if (ProgSettingsV.LoopEvery != 0 && (looptest % ProgSettingsV.LoopEvery) == 0) { + try { comboBoxFreightMarketDestinationCity.SelectedValue = LoopStartCity; comboBoxFreightMarketDestinationCompany.SelectedValue = LoopStartCompany; - } - catch - { + } catch { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_complete_jobs_loop"); } - } - else - { + } else { triggerDestinationCitiesUpdate(); } - } - else - { + } else { //Editin Job AddedJobsDictionary[companyNameJob].Remove(FreightMarketJob); @@ -1591,16 +1415,12 @@ private void AddCargo(bool JobEditing) } //contextMenuStrip Freight Market JobList - private void listBoxFreightMarketAddedJobs_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Right) - { - if (listBoxFreightMarketAddedJobs.Items.Count != 0) - { + private void listBoxFreightMarketAddedJobs_MouseDown(object sender, MouseEventArgs e) { + if (e.Button == MouseButtons.Right) { + if (listBoxFreightMarketAddedJobs.Items.Count != 0) { Rectangle rect = listBoxFreightMarketAddedJobs.GetItemRectangle(listBoxFreightMarketAddedJobs.Items.Count - 1); - if (e.Y < rect.Bottom) - { + if (e.Y < rect.Bottom) { contextMenuStripMainStateChange("FreightMarketCargoList"); contextMenuStripMain.Show(listBoxFreightMarketAddedJobs, e.Location); @@ -1610,32 +1430,26 @@ private void listBoxFreightMarketAddedJobs_MouseDown(object sender, MouseEventAr } } - if (e.Button == MouseButtons.Left) - { - if (listBoxFreightMarketAddedJobs.Items.Count != 0) - { + if (e.Button == MouseButtons.Left) { + if (listBoxFreightMarketAddedJobs.Items.Count != 0) { Rectangle rect = listBoxFreightMarketAddedJobs.GetItemRectangle(listBoxFreightMarketAddedJobs.Items.Count - 1); - if (e.Y > rect.Bottom) - { + if (e.Y > rect.Bottom) { } } } } - private void contextMenuStripFreightMarketJobListEdit_Click(object sender, EventArgs e) - { + private void contextMenuStripFreightMarketJobListEdit_Click(object sender, EventArgs e) { FM_JobList_Edit(); } - private void contextMenuStripFreightMarketJobListDelete_Click(object sender, EventArgs e) - { + private void contextMenuStripFreightMarketJobListDelete_Click(object sender, EventArgs e) { FM_JobList_Delete(); } - private void FM_JobList_Delete() - { + private void FM_JobList_Delete() { JobAdded SelectedJob = (JobAdded)listBoxFreightMarketAddedJobs.SelectedItem; string companyNameJob = "company.volatile." + SelectedJob.SourceCompany + "." + SelectedJob.SourceCity; @@ -1654,8 +1468,7 @@ private void FM_JobList_Delete() RefreshFreightMarketDistance(); } - private void FM_JobList_Edit() - { + private void FM_JobList_Edit() { listBoxFreightMarketAddedJobs.Enabled = false; buttonFreightMarketAddJob.Width = 238; buttonFreightMarketCancelJobEdit.Visible = true; @@ -1684,14 +1497,11 @@ private void FM_JobList_Edit() RefreshFreightMarketDistance(); } - private void RefreshFreightMarketDistance() - { - if (listBoxFreightMarketAddedJobs.Items.Count > 0) - { + private void RefreshFreightMarketDistance() { + if (listBoxFreightMarketAddedJobs.Items.Count > 0) { int JobsTotalDistance = 0; - foreach (JobAdded tmpItem in listBoxFreightMarketAddedJobs.Items) - { + foreach (JobAdded tmpItem in listBoxFreightMarketAddedJobs.Items) { JobsTotalDistance += tmpItem.Distance; if (!tmpItem.realDistance) @@ -1699,19 +1509,14 @@ private void RefreshFreightMarketDistance() } labelFreightMarketDistanceNumbers.Text = Math.Floor(JobsTotalDistance * DistanceMultiplier).ToString() + unCertainRouteLength + " " + ProgSettingsV.DistanceMes; - } - else - { + } else { labelFreightMarketDistanceNumbers.Text = " - "; buttonFreightMarketClearJobList.Enabled = false; } - if (unCertainRouteLength != "") - { + if (unCertainRouteLength != "") { labelFreightMarketDistanceNumbers.ForeColor = Color.Red; - } - else - { + } else { labelFreightMarketDistanceNumbers.ForeColor = Color.Black; } } diff --git a/TS SE Tool/Forms/MainTabs/FormMethodsModsTab.cs b/TS SE Tool/Forms/MainTabs/FormMethodsModsTab.cs new file mode 100644 index 00000000..4e3b5ef2 --- /dev/null +++ b/TS SE Tool/Forms/MainTabs/FormMethodsModsTab.cs @@ -0,0 +1,164 @@ +/* + Copyright 2016-2022 LIPtoH + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Collections.Generic; +using TS_SE_Tool.Utilities; +using System.ComponentModel; +using System.Linq; +using System.Reflection; + +namespace TS_SE_Tool { + public partial class FormMain { + public static BindingList ProfileMods = new BindingList(); + #region ProfileTab + private void FillModList() { + //Text = $"Manage Plugins for {MainForm.SelectedGame.Type}"; + tableMods.Columns.Clear(); + tableMods.Rows.Clear(); + tableMods.DataSource = ProfileMods; + tableMods.AllowUserToAddRows = true; + tableMods.AllowUserToDeleteRows = true; + tableMods.AllowUserToOrderColumns = true; + tableMods.MultiSelect = true; + tableMods.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + tableMods.CellContentClick += tableMods_CellContentClick; + tableMods.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + //tableMods.RowPostPaint += TableMods_RowPostPaint; + //tableMods.RowHeadersVisible = true; + + //tableMods.AutoGenerateColumns = false; + //DataGridViewTextBoxColumn rowNumberColumn = new DataGridViewTextBoxColumn(); + //rowNumberColumn.HeaderText = "#"; + //rowNumberColumn.ReadOnly = true; + //rowNumberColumn.DisplayIndex = 0; + //rowNumberColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; + //var columns = GenerateDataGridViewColumns(tableMods, typeof(ProfileMod)); + //tableMods.Columns.Add(rowNumberColumn); + //tableMods.Columns.AddRange(columns); + PopulateMods(); + + foreach (DataGridViewColumn column in tableMods.Columns) { + PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(ProfileMods.FirstOrDefault()); + PropertyDescriptor property = properties.Find(column.DataPropertyName, false); + var attribute = property.Attributes[typeof(AutoSizeColumnMode)] as AutoSizeColumnMode; + if (attribute != null) column.AutoSizeMode = attribute.Mode; + } + } + + #region RowSorting + private Rectangle dragBoxFromMouseDown; + private int rowIndexFromMouseDown; + private int rowIndexOfItemUnderMouseToDrop; + private void tableMods_MouseDown(object sender, MouseEventArgs e) { + rowIndexFromMouseDown = tableMods.HitTest(e.X, e.Y).RowIndex; + if (rowIndexFromMouseDown != -1) { + Size dragSize = SystemInformation.DragSize; + dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize); + } else { + dragBoxFromMouseDown = Rectangle.Empty; + } + } + private void tableMods_MouseMove(object sender, MouseEventArgs e) { + if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { + if (dragBoxFromMouseDown != Rectangle.Empty && !dragBoxFromMouseDown.Contains(e.X, e.Y)) { + DragDropEffects dropEffect = tableMods.DoDragDrop(tableMods.Rows[rowIndexFromMouseDown], DragDropEffects.Move); + } + } + } + private void tableMods_DragOver(object sender, DragEventArgs e) { + e.Effect = DragDropEffects.Move; + } + private void tableMods_DragDrop(object sender, DragEventArgs e) { + Point clientPoint = tableMods.PointToClient(new Point(e.X, e.Y)); + rowIndexOfItemUnderMouseToDrop = tableMods.HitTest(clientPoint.X, clientPoint.Y).RowIndex; + + if (e.Effect == DragDropEffects.Move) { + DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow; + tableMods.Rows.RemoveAt(rowIndexFromMouseDown); + tableMods.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove); + } + } + #endregion RowSorting + + private DataGridViewColumn[] GenerateDataGridViewColumns(DataGridView dgv, Type type) { + var ret = new DataGridViewColumn[] { }; + PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); + foreach (PropertyInfo prop in props) { + DataGridViewColumn column = new DataGridViewColumn(); + column.DataPropertyName = prop.Name; + column.HeaderText = prop.Name; + column.ValueType = prop.PropertyType; + if (prop.PropertyType == typeof(bool)) { + column.CellTemplate = new DataGridViewCheckBoxCell(); + } + ret.Append(column); + } + return ret; + } + + private void TableMods_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { + var grid = sender as DataGridView; + var rowIdx = (e.RowIndex + 1).ToString(); + + var centerFormat = new StringFormat() { + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center + }; + + var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height); + e.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat); + } + + private void PopulateMods() { + ProfileMods.Clear(); + for (int i = 0; i < MainSaveFileProfileData.ActiveMods.Count; i++) { // foreach (var mod in MainSaveFileProfileData.ActiveMods) { + ProfileMods.Add(new ProfileMod(MainSaveFileProfileData.ActiveMods[i], i)); + } + } + + private List GetModsFromSelected() { + var list = new List(); + foreach (DataGridViewRow row in tableMods.SelectedRows) { + list.Add(row.DataBoundItem as ProfileMod); + } + return list; + } + + private void tableMods_CellContentClick(object sender, DataGridViewCellEventArgs e) { + tableMods.CommitEdit(DataGridViewDataErrorContexts.Commit); + } + + private void tableMods_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) { + //var grid = sender as DataGridView; + //if (sender is null || grid is null || e.RowIndex < 0 || e.RowIndex >= grid.Rows.Count) return; + //var strip = new ContextMenuStrip(); + //strip.Items.Add(new ToolStripSeparator()); + //strip.Items.Add(new ToolStripButton("Show Debug Info", null, (object sender, EventArgs args) => { MessageBox.Show(GetModsFromSelected().ToJson(true)); })); + //e.ContextMenuStrip = strip; + } + + private void profileModsRemove_Click(object sender, EventArgs e) { + throw new NotImplementedException("lol"); + } + + private void profileModsDebug_Click(object sender, EventArgs e) { + MessageBox.Show(GetModsFromSelected().ToJson(true)); + } + #endregion ProfileTab + } +} \ No newline at end of file diff --git a/TS SE Tool/Forms/MainTabs/FormMethodsTrailerTab.cs.cs b/TS SE Tool/Forms/MainTabs/FormMethodsTrailerTab.cs.cs index 45d8d050..e3949465 100644 --- a/TS SE Tool/Forms/MainTabs/FormMethodsTrailerTab.cs.cs +++ b/TS SE Tool/Forms/MainTabs/FormMethodsTrailerTab.cs.cs @@ -28,19 +28,15 @@ limitations under the License. using System.Threading; using TS_SE_Tool.Save; -namespace TS_SE_Tool -{ - public partial class FormMain - { +namespace TS_SE_Tool { + public partial class FormMain { //User Trailer tab - private void CreateTrailerPanelControls() - { + private void CreateTrailerPanelControls() { CreateTrailerPanelMainButtons(); CreateTrailerPanelPartsControls(); } - private void CreateTrailerPanelMainButtons() - { + private void CreateTrailerPanelMainButtons() { int pHeight = RepairImg.Height, pOffset = 5, tOffset = comboBoxUserTrailerCompanyTrailers.Location.Y; int topbutoffset = comboBoxUserTrailerCompanyTrailers.Location.X + comboBoxUserTrailerCompanyTrailers.Width + pOffset; @@ -70,16 +66,14 @@ private void CreateTrailerPanelMainButtons() buttonInfo.Dock = DockStyle.Fill; } - private void CreateTrailerPanelPartsControls() - { + private void CreateTrailerPanelPartsControls() { int pSkillsNameHeight = 32, pSkillsNameWidth = 32; string[] toolskillimgtooltip = new string[] { "Cargo", "Body", "Chassis", "Wheels" }; Label partLabel, partnameLabel; Panel pbPanel; - for (int i = 0; i < 4; i++) - { + for (int i = 0; i < 4; i++) { //Create table layout TableLayoutPanel tbllPanel = new TableLayoutPanel(); tableLayoutPanelTrailerDetails.Controls.Add(tbllPanel, 0, i); @@ -206,17 +200,15 @@ private void CreateTrailerPanelPartsControls() tableLayoutPanelTrailerLP.Controls.Add(LPpanel, 3, 0); } - - public void buttonTrailerLicensePlateEdit_Click(object sender, EventArgs e) - { + + public void buttonTrailerLicensePlateEdit_Click(object sender, EventArgs e) { UserTrailerDictionary.TryGetValue(comboBoxUserTrailerCompanyTrailers.SelectedValue.ToString(), out UserCompanyTrailerData SelectedUserCompanyTrailer); string LicensePlateText = SelectedUserCompanyTrailer.TrailerMainData.license_plate.Value; FormLicensePlateEdit frm = new FormLicensePlateEdit(LicensePlateText); frm.StartPosition = FormStartPosition.CenterParent; - if (frm.ShowDialog() == DialogResult.OK) - { + if (frm.ShowDialog() == DialogResult.OK) { //Find label control Label lpText = groupBoxUserTrailerTrailerDetails.Controls.Find("labelLicensePlateTrailer", true).FirstOrDefault() as Label; @@ -226,8 +218,7 @@ public void buttonTrailerLicensePlateEdit_Click(object sender, EventArgs e) } } - private void FillUserCompanyTrailerList() - { + private void FillUserCompanyTrailerList() { if (UserTrailerDictionary is null) return; @@ -273,8 +264,7 @@ private void FillUserCompanyTrailerList() combDT.Rows.Add("null"); // -- NONE -- // - foreach (KeyValuePair UserTrailer in UserTrailerDictionary) - { + foreach (KeyValuePair UserTrailer in UserTrailerDictionary) { if (String.IsNullOrEmpty(UserTrailer.Key)) continue; @@ -284,15 +274,13 @@ private void FillUserCompanyTrailerList() if (UserTrailer.Value.TrailerMainData == null) continue; - if (UserTrailer.Value.Main) - { + if (UserTrailer.Value.Main) { string trailerNameless = UserTrailer.Key; //link string tmpTrailerName = "", tmpGarageName = "", tmpDriverName = ""; - byte tmpTrailerType = 0, tmpTruckState = 1; + byte tmpTrailerType = 0, tmpTruckState = 1; //Quick job or Bought - if (UserTrailer.Value.Users) - { + if (UserTrailer.Value.Users) { tmpTrailerType = 1; tmpTruckState = 2; @@ -310,10 +298,8 @@ private void FillUserCompanyTrailerList() string trailerdef = tmpTrailerData.trailer_definition; - if (UserTrailerDefDictionary.Count > 0) - { - if (UserTrailerDefDictionary.ContainsKey(trailerdef)) - { + if (UserTrailerDefDictionary.Count > 0) { + if (UserTrailerDefDictionary.ContainsKey(trailerdef)) { string[] trailerDefExtra = { stringBT, stringAC, stringCT }; string trailername = ""; int lCounter = 0; @@ -324,10 +310,8 @@ private void FillUserCompanyTrailerList() addToString(CurTrailerDef.axles.ToString()); addToString(CurTrailerDef.chain_type.ToString()); - void addToString(string _input) - { - if (!string.IsNullOrEmpty(_input)) - { + void addToString(string _input) { + if (!string.IsNullOrEmpty(_input)) { if (!string.IsNullOrEmpty(trailername)) trailername += " | "; @@ -338,35 +322,25 @@ void addToString(string _input) } tmpTrailerName = trailername; - } - else - { + } else { tmpTrailerName = String.Join(" ", trailerdef.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Where(x => x != "trailer_def")); } - } - else - { + } else { tmpTrailerName = trailerdef; } //Driver tmpDriverName = UserDriverDictionary.Where(x => x.Value.AssignedTrailer == trailerNameless)?.SingleOrDefault().Key ?? "null"; - if (!String.IsNullOrEmpty(tmpDriverName) && tmpDriverName != "null") - { - if (SiiNunitData.Player.drivers[0] == tmpDriverName) - { + if (!String.IsNullOrEmpty(tmpDriverName) && tmpDriverName != "null") { + if (SiiNunitData.Player.drivers[0] == tmpDriverName) { tmpDriverName = "> " + Utilities.TextUtilities.FromHexToString(Globals.SelectedProfile); - } - else - { - if (DriverNames.TryGetValue(tmpDriverName, out string _resultvalue)) - { - if (!string.IsNullOrEmpty(_resultvalue)) - { + } else { + if (DriverNames.TryGetValue(tmpDriverName, out string _resultvalue)) { + if (!string.IsNullOrEmpty(_resultvalue)) { tmpDriverName = _resultvalue.TrimStart(new char[] { '+' }); } - } + } } } @@ -381,20 +355,16 @@ void addToString(string _input) comboBoxUserTrailerCompanyTrailers.DisplayMember = "DisplayMember"; comboBoxUserTrailerCompanyTrailers.DataSource = combDT; - if (combDT.Rows.Count > 1) - { + if (combDT.Rows.Count > 1) { comboBoxUserTrailerCompanyTrailers.Enabled = true; - } - else - { + } else { comboBoxUserTrailerCompanyTrailers.Enabled = false; } comboBoxUserTrailerCompanyTrailers.SelectedValue = SiiNunitData.Player.assigned_trailer; } // - private void UpdateTrailerPanelDetails() - { + private void UpdateTrailerPanelDetails() { for (byte i = 0; i < 4; i++) UpdateTrailerPanelProgressBar(i); @@ -403,8 +373,7 @@ private void UpdateTrailerPanelDetails() UpdateTrailerPanelLicensePlate(); } - private void UpdateTrailerPanelProgressBar(byte _number) - { + private void UpdateTrailerPanelProgressBar(byte _number) { string trailerNameless = comboBoxUserTrailerCompanyTrailers.SelectedValue.ToString(); UserTrailerDictionary.TryGetValue(trailerNameless, out UserCompanyTrailerData SelectedUserCompanyTrailer); @@ -421,29 +390,25 @@ private void UpdateTrailerPanelProgressBar(byte _number) //Repair button Button repairButton = groupBoxUserTrailerTrailerDetails.Controls.Find("buttonTrailerElRepair" + _number, true).FirstOrDefault() as Button; - if (progressBarPanel != null) - { + if (progressBarPanel != null) { float _wear = 0, _unfixableWear = 0, _permanentWear = 0; string partType = ""; // Get part type - try - { - switch (_number) - { + try { + switch (_number) { case 0: partType = "cargo"; _wear = SelectedUserCompanyTrailer.TrailerMainData.cargo_damage; - break; - + break; + case 1: partType = "body"; _wear = SelectedUserCompanyTrailer.TrailerMainData.trailer_body_wear; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { _unfixableWear = SelectedUserCompanyTrailer.TrailerMainData.trailer_body_wear_unfixable; } @@ -453,8 +418,7 @@ private void UpdateTrailerPanelProgressBar(byte _number) partType = "chassis"; _wear = SelectedUserCompanyTrailer.TrailerMainData.chassis_wear; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { _unfixableWear = SelectedUserCompanyTrailer.TrailerMainData.chassis_wear_unfixable; } @@ -465,18 +429,15 @@ private void UpdateTrailerPanelProgressBar(byte _number) if (SelectedUserCompanyTrailer.TrailerMainData.wheels_wear.Count > 0) _wear = SelectedUserCompanyTrailer.TrailerMainData.wheels_wear.Sum() / SelectedUserCompanyTrailer.TrailerMainData.wheels_wear.Count; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { if (SelectedUserCompanyTrailer.TrailerMainData.wheels_wear_unfixable.Count > 0) - _unfixableWear = SelectedUserCompanyTrailer.TrailerMainData.wheels_wear_unfixable.Sum() / + _unfixableWear = SelectedUserCompanyTrailer.TrailerMainData.wheels_wear_unfixable.Sum() / SelectedUserCompanyTrailer.TrailerMainData.wheels_wear_unfixable.Count; } break; } - } - catch - { + } catch { repairButton.Enabled = false; return; } @@ -489,20 +450,16 @@ private void UpdateTrailerPanelProgressBar(byte _number) // Part name - if (partLabel != null) - { + if (partLabel != null) { string pnlText = SetTrailerPartLabelText(trailerNameless, SelectedUserCompanyTrailer.TrailerMainData, partType); - if (pnlText == null) - { + if (pnlText == null) { repairButton.Enabled = false; progressBarPanel.BackgroundImage = null; partLabel.Text = ""; return; - } - else - { + } else { partLabel.Text = pnlText; toolTipMain.SetToolTip(partLabel, pnlText); } @@ -524,13 +481,12 @@ private void UpdateTrailerPanelProgressBar(byte _number) SolidBrush ppen = new SolidBrush(Graphics_TSSET.GetProgressbarColor(totalWear)); - int x = 0, y = 0, + int x = 0, y = 0, pnlWidth = (int)(progressBarPanel.Width * (1 - (totalWear))); Bitmap progress = new Bitmap(progressBarPanel.Width, progressBarPanel.Height); - using (Graphics g = Graphics.FromImage(progress)) - { + using (Graphics g = Graphics.FromImage(progress)) { g.SmoothingMode = SmoothingMode.HighQuality; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; @@ -538,8 +494,7 @@ private void UpdateTrailerPanelProgressBar(byte _number) int pnlWidthFixable = (int)(progressBarPanel.Width * _wear); - using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[0], WrapMode.Tile)) - { + using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[0], WrapMode.Tile)) { SolidBrush wearPen = new SolidBrush(Color.Yellow); g.FillRectangle(wearPen, pnlWidth, 0, pnlWidthFixable, progressBarPanel.Height); @@ -547,14 +502,12 @@ private void UpdateTrailerPanelProgressBar(byte _number) g.FillRectangle(brush, pnlWidth, 0, pnlWidthFixable, progressBarPanel.Height); } - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { //1.49 int pnlWidthUnfixable = (int)(progressBarPanel.Width * _unfixableWear); - using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[1], WrapMode.Tile)) - { + using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[1], WrapMode.Tile)) { SolidBrush wearPen = new SolidBrush(Color.Orange); g.FillRectangle(wearPen, pnlWidth + pnlWidthFixable, 0, pnlWidthUnfixable, progressBarPanel.Height); @@ -565,8 +518,7 @@ private void UpdateTrailerPanelProgressBar(byte _number) int pnlWidthPermanent = (int)(progressBarPanel.Width * _permanentWear); - using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[2], WrapMode.Tile)) - { + using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[2], WrapMode.Tile)) { SolidBrush wearPen = new SolidBrush(Color.Red); g.FillRectangle(wearPen, pnlWidth + pnlWidthFixable + pnlWidthUnfixable, 0, pnlWidthPermanent, progressBarPanel.Height); @@ -615,80 +567,61 @@ private void UpdateTrailerPanelProgressBar(byte _number) } } - private string SetTrailerPartLabelText(string _trailerNameless, Save.Items.Trailer _trailerMainData, string _partType) - { + private string SetTrailerPartLabelText(string _trailerNameless, Save.Items.Trailer _trailerMainData, string _partType) { string pnlText = ""; bool accExist = true; - if (_partType == "cargo") - { + if (_partType == "cargo") { //player_job - if (SiiNunitData.Player.assigned_trailer == _trailerNameless) - { - if (SiiNunitData.Player_Job != null) - { + if (SiiNunitData.Player.assigned_trailer == _trailerNameless) { + if (SiiNunitData.Player_Job != null) { string tmpCargo = SiiNunitData.Player_Job.cargo.Split(new char[] { '.' }).Last(); - if (CargoLngDict.TryGetValue(tmpCargo, out string value)) - { + if (CargoLngDict.TryGetValue(tmpCargo, out string value)) { if (!string.IsNullOrEmpty(value)) pnlText = value; else pnlText = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(value); } - } - else - { + } else { accExist = false; } - } - else - { + } else { //drivers job var tmp = UserDriverDictionary.Select(tx => tx.Value).Where(tX => tX.AssignedTrailer == _trailerNameless).ToList(); - if (tmp != null && tmp.Count > 0) - { + if (tmp != null && tmp.Count > 0) { string tmpCargo = tmp[0].DriverJob.Cargo; - if (CargoLngDict.TryGetValue(tmpCargo, out string value)) - { + if (CargoLngDict.TryGetValue(tmpCargo, out string value)) { if (!string.IsNullOrEmpty(value)) pnlText = value; else pnlText = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(value); } - } - else - { + } else { accExist = false; } } - } - else - { - foreach (string accLink in _trailerMainData.accessories) - { + } else { + foreach (string accLink in _trailerMainData.accessories) { if (!SiiNunitData.SiiNitems.ContainsKey(accLink)) continue; dynamic accessoryDyn = SiiNunitData.SiiNitems[accLink]; Type accType = accessoryDyn.GetType(); - if (accType.Name == "Vehicle_Accessory" && _partType != "tire") - { + if (accType.Name == "Vehicle_Accessory" && _partType != "tire") { Save.Items.Vehicle_Accessory accessoryThis = (Save.Items.Vehicle_Accessory)accessoryDyn; - if (accessoryThis.accType == _partType) - { + if (accessoryThis.accType == _partType) { Save.DataFormat.SCS_String tmp = accessoryThis.data_path; pnlText = tmp.Value.Split(new char[] { '/' }).Last().Split(new char[] { '.' }).First(); continue; } - if (pnlText == "" && accessoryThis.accType == "basepart") - { + if (pnlText == "" && accessoryThis.accType == "basepart") { Save.DataFormat.SCS_String tmp = accessoryThis.data_path; var datapathArray = tmp.Value.Split(new char[] { '/' }); @@ -701,12 +634,10 @@ private string SetTrailerPartLabelText(string _trailerNameless, Save.Items.Trail } } - if (accType.Name == "Vehicle_Wheel_Accessory" && _partType == "tire") - { + if (accType.Name == "Vehicle_Wheel_Accessory" && _partType == "tire") { Save.Items.Vehicle_Wheel_Accessory accessoryThis = (Save.Items.Vehicle_Wheel_Accessory)accessoryDyn; - if (accessoryThis.accType == "tire") - { + if (accessoryThis.accType == "tire") { if (pnlText.Length != 0) pnlText += " | "; @@ -719,8 +650,8 @@ private string SetTrailerPartLabelText(string _trailerNameless, Save.Items.Trail } } - if (!accExist) - return null; + if (!accExist) + return null; if (pnlText == "") pnlText = "none"; @@ -728,24 +659,18 @@ private string SetTrailerPartLabelText(string _trailerNameless, Save.Items.Trail return pnlText; } - private void CheckTrailerRepair() - { + private void CheckTrailerRepair() { bool repairEnabled = false; Button repairTrailer = tableLayoutPanelUserTrailerControls.Controls.Find("buttonTrailerRepair", true).FirstOrDefault() as Button; - for (byte i = 0; i < 4; i++) - { - try - { + for (byte i = 0; i < 4; i++) { + try { Button tmp = groupBoxUserTrailerTrailerDetails.Controls.Find("buttonTrailerElRepair" + i, true).FirstOrDefault() as Button; - if (tmp.Enabled) - { + if (tmp.Enabled) { repairEnabled = true; break; } - } - catch - { + } catch { continue; } } @@ -753,8 +678,7 @@ private void CheckTrailerRepair() repairTrailer.Enabled = repairEnabled; } - private void UpdateTrailerPanelLicensePlate() - { + private void UpdateTrailerPanelLicensePlate() { UserTrailerDictionary.TryGetValue(comboBoxUserTrailerCompanyTrailers.SelectedValue.ToString(), out UserCompanyTrailerData SelectedUserCompanyTrailer); string LicensePlate = SelectedUserCompanyTrailer.TrailerMainData.license_plate.Value; @@ -764,8 +688,7 @@ private void UpdateTrailerPanelLicensePlate() //Find label control Label lpText = groupBoxUserTrailerTrailerDetails.Controls.Find("labelLicensePlateTrailer", true).FirstOrDefault() as Label; - if (lpText != null) - { + if (lpText != null) { lpText.Text = thisLP.LicensePlateTXT + " | "; CountriesLngDict.TryGetValue(thisLP.SourceLPCountry, out string value); @@ -780,16 +703,14 @@ private void UpdateTrailerPanelLicensePlate() Panel lpPanel = groupBoxUserTrailerTrailerDetails.Controls.Find("TrailerLicensePlateIMG", true).FirstOrDefault() as Panel; if (lpPanel != null) - lpPanel.BackgroundImage = Graphics_TSSET.ResizeImage(thisLP.LicensePlateIMG, LicensePlateWidth[GameType], 32); + lpPanel.BackgroundImage = Graphics_TSSET.ResizeImage(thisLP.LicensePlateIMG, SelectedGame.LicensePlateWidth, 32); } //Events - private void comboBoxCompanyTrailers_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxCompanyTrailers_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cmbbx = sender as ComboBox; - if (cmbbx.SelectedIndex != -1 && cmbbx.SelectedValue.ToString() != "null") - { + if (cmbbx.SelectedIndex != -1 && cmbbx.SelectedValue.ToString() != "null") { ToggleTrailerPartsCondition(true); groupBoxUserTrailerTrailerDetails.Enabled = true; @@ -799,9 +720,7 @@ private void comboBoxCompanyTrailers_SelectedIndexChanged(object sender, EventAr tableLayoutPanelUserTrailerControls.Enabled = true; UpdateTrailerPanelDetails(); - } - else - { + } else { ToggleTrailerPartsCondition(false); groupBoxUserTrailerTrailerDetails.Enabled = false; @@ -813,21 +732,17 @@ private void comboBoxCompanyTrailers_SelectedIndexChanged(object sender, EventAr tableLayoutPanelUserTrailerControls.Enabled = false; } } - - private void groupBoxUserTrailerTrailerDetails_EnabledChanged(object sender, EventArgs e) - { + + private void groupBoxUserTrailerTrailerDetails_EnabledChanged(object sender, EventArgs e) { ToggleVisualTrailerDetails(groupBoxUserTrailerTrailerDetails.Enabled); } - private void tableLayoutPanelUserTrailerControls_EnabledChanged(object sender, EventArgs e) - { + private void tableLayoutPanelUserTrailerControls_EnabledChanged(object sender, EventArgs e) { ToggleVisualTrailerControls(tableLayoutPanelUserTrailerControls.Enabled); } - private void ToggleVisualTrailerDetails(bool _state) - { - for (int i = 0; i < 4; i++) - { + private void ToggleVisualTrailerDetails(bool _state) { + for (int i = 0; i < 4; i++) { Control tmpButtonRepair = tabControlMain.TabPages["tabPageTrailer"].Controls.Find("buttonTrailerElRepair" + i.ToString(), true).FirstOrDefault(); if (tmpButtonRepair == null) @@ -842,21 +757,16 @@ private void ToggleVisualTrailerDetails(bool _state) } } - private void ToggleVisualTrailerControls(bool _state) - { + private void ToggleVisualTrailerControls(bool _state) { Control tmpControl; string[] buttons = { "buttonTrailerRepair", "buttonTrailerInfo", "buttonTrailerLicensePlateEdit" }; Image[] images = { RepairImg, CustomizeImg, CustomizeImg }; - for (int i = 0; i < buttons.Count(); i++) - { - try - { + for (int i = 0; i < buttons.Count(); i++) { + try { tmpControl = tabControlMain.TabPages["tabPageTrailer"].Controls.Find(buttons[i], true)[0]; - } - catch - { + } catch { continue; } @@ -866,13 +776,10 @@ private void ToggleVisualTrailerControls(bool _state) tmpControl.BackgroundImage = Graphics_TSSET.ConvertBitmapToGrayscale(images[i]); } } - - private void ToggleTrailerPartsCondition(bool _state) - { - if (!_state) - { - for (int i = 0; i < 4; i++) - { + + private void ToggleTrailerPartsCondition(bool _state) { + if (!_state) { + for (int i = 0; i < 4; i++) { Label pnLabel = groupBoxUserTrailerTrailerDetails.Controls.Find("labelTrailerPartDataName" + i.ToString(), true).FirstOrDefault() as Label; if (pnLabel != null) @@ -896,11 +803,8 @@ private void ToggleTrailerPartsCondition(bool _state) if (LPPanel != null) LPPanel.BackgroundImage = null; - } - else - { - for (int i = 0; i < 4; i++) - { + } else { + for (int i = 0; i < 4; i++) { Button repairButton = groupBoxUserTrailerTrailerDetails.Controls.Find("buttonTrailerElRepair" + i, true).FirstOrDefault() as Button; if (repairButton != null && repairButton.Enabled) @@ -908,20 +812,18 @@ private void ToggleTrailerPartsCondition(bool _state) } } } - + // Buttons - + // Main - public void buttonTrailerRepair_Click(object sender, EventArgs e) - { + public void buttonTrailerRepair_Click(object sender, EventArgs e) { string trailerNameless = "", slaveTrailerNameless = ""; Save.Items.Trailer selectedTrailerData; trailerNameless = comboBoxUserTrailerCompanyTrailers.SelectedValue.ToString(); slaveTrailerNameless = trailerNameless; - do - { + do { selectedTrailerData = SiiNunitData.SiiNitems[slaveTrailerNameless]; selectedTrailerData.cargo_damage = 0; @@ -950,18 +852,15 @@ public void buttonTrailerRepair_Click(object sender, EventArgs e) } // - private void buttonUserTrailerSelectCurrent_Click(object sender, EventArgs e) - { + private void buttonUserTrailerSelectCurrent_Click(object sender, EventArgs e) { comboBoxUserTrailerCompanyTrailers.SelectedValue = SiiNunitData.Player.assigned_trailer; } - private void buttonUserTrailerSwitchCurrent_Click(object sender, EventArgs e) - { + private void buttonUserTrailerSwitchCurrent_Click(object sender, EventArgs e) { SiiNunitData.Player.assigned_trailer = comboBoxUserTrailerCompanyTrailers.SelectedValue.ToString(); } //Details - public void buttonTrailerElRepair_Click(object sender, EventArgs e) - { + public void buttonTrailerElRepair_Click(object sender, EventArgs e) { Button curbtn = sender as Button; //Get button index @@ -977,12 +876,10 @@ public void buttonTrailerElRepair_Click(object sender, EventArgs e) trailerNameless = comboBoxUserTrailerCompanyTrailers.SelectedValue.ToString(); slaveTrailerNameless = trailerNameless; - do - { + do { selectedTrailerData = SiiNunitData.SiiNitems[slaveTrailerNameless]; - switch (buttonIndex) - { + switch (buttonIndex) { case 0: selectedTrailerData.cargo_damage = 0; break; @@ -1016,8 +913,7 @@ public void buttonTrailerElRepair_Click(object sender, EventArgs e) CheckTrailerRepair(); } - public void buttonTrailerElRepair_EnabledChanged(object sender, EventArgs e) - { + public void buttonTrailerElRepair_EnabledChanged(object sender, EventArgs e) { Button tmpButton = sender as Button; if (tmpButton.Enabled) diff --git a/TS SE Tool/Forms/MainTabs/FormMethodsTruckTab.cs b/TS SE Tool/Forms/MainTabs/FormMethodsTruckTab.cs index 6bd7abc5..dea0e580 100644 --- a/TS SE Tool/Forms/MainTabs/FormMethodsTruckTab.cs +++ b/TS SE Tool/Forms/MainTabs/FormMethodsTruckTab.cs @@ -28,19 +28,15 @@ limitations under the License. using S16.Drawing; using TS_SE_Tool.Save; -namespace TS_SE_Tool -{ - public partial class FormMain - { +namespace TS_SE_Tool { + public partial class FormMain { //User Trucks tab - private void CreateTruckPanelControls() - { + private void CreateTruckPanelControls() { CreateTruckPanelMainButtons(); CreateTruckPanelPartsControls(); } - private void CreateTruckPanelMainButtons() - { + private void CreateTruckPanelMainButtons() { int pHeight = RepairImg.Height, pOffset = 5, tOffset = comboBoxUserTruckCompanyTrucks.Location.Y; int topbutoffset = comboBoxUserTruckCompanyTrucks.Location.X + comboBoxUserTruckCompanyTrucks.Width + pOffset; @@ -83,16 +79,14 @@ private void CreateTruckPanelMainButtons() buttonF.Dock = DockStyle.Fill; } - private void CreateTruckPanelPartsControls() - { + private void CreateTruckPanelPartsControls() { int pSkillsNameHeight = 32, pSkillsNameWidth = 32; string[] toolskillimgtooltip = new string[] { "Engine", "Transmission", "Chassis", "Cabin", "Wheels" }; Label partLabel, partnameLabel; Panel pbPanel; - for (int i = 0; i < 5; i++) - { + for (int i = 0; i < 5; i++) { //Create table layout TableLayoutPanel tbllPanel = new TableLayoutPanel(); tableLayoutPanelTruckDetails.Controls.Add(tbllPanel, 0, i); @@ -222,7 +216,7 @@ private void CreateTruckPanelPartsControls() buttonLPEdit.Margin = new Padding(3, 0, 3, 0); buttonLPEdit.Enabled = true; buttonLPEdit.Dock = DockStyle.Fill; - buttonLPEdit.Click += new EventHandler(buttonTruckLicensePlateEdit_Click); + buttonLPEdit.Click += new EventHandler(buttonTruckLicensePlateEdit_Click); tableLayoutPanelTruckLP.Controls.Add(buttonLPEdit, 2, 0); @@ -237,16 +231,14 @@ private void CreateTruckPanelPartsControls() tableLayoutPanelTruckLP.Controls.Add(LPpanel, 3, 0); } - public void buttonTruckLicensePlateEdit_Click(object sender, EventArgs e) - { + public void buttonTruckLicensePlateEdit_Click(object sender, EventArgs e) { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); string LicensePlateText = SelectedUserCompanyTruck.TruckMainData.license_plate.Value; FormLicensePlateEdit frm = new FormLicensePlateEdit(LicensePlateText); frm.StartPosition = FormStartPosition.CenterParent; - if (frm.ShowDialog() == DialogResult.OK) - { + if (frm.ShowDialog() == DialogResult.OK) { //Find label control Label lpText = groupBoxUserTruckTruckDetails.Controls.Find("labelLicensePlate", true).FirstOrDefault() as Label; @@ -256,8 +248,7 @@ public void buttonTruckLicensePlateEdit_Click(object sender, EventArgs e) } } - private void FillUserCompanyTrucksList() - { + private void FillUserCompanyTrucksList() { if (UserTruckDictionary == null) return; @@ -301,8 +292,7 @@ private void FillUserCompanyTrucksList() //=== //Iterate through User trucks - foreach (KeyValuePair UserTruck in UserTruckDictionary) - { + foreach (KeyValuePair UserTruck in UserTruckDictionary) { if (String.IsNullOrEmpty(UserTruck.Key)) continue; @@ -316,14 +306,13 @@ private void FillUserCompanyTrucksList() continue; //Setup values - string truckName = "undetected", + string truckName = "undetected", truckNameless = UserTruck.Key; //link string tmpTruckName = "", tmpGarageName = "", tmpDriverName = ""; byte tmpTruckType = 0, tmpTruckState = 1; //Quick job or Bought - if (UserTruck.Value.Users) - { + if (UserTruck.Value.Users) { tmpTruckType = 1; tmpTruckState = 2; @@ -333,26 +322,19 @@ private void FillUserCompanyTrucksList() } //Brand - foreach (string accLink in UserTruck.Value.TruckMainData.accessories) - { + foreach (string accLink in UserTruck.Value.TruckMainData.accessories) { if (!String.IsNullOrEmpty(accLink)) - if (SiiNunitData.SiiNitems[accLink].GetType().Name == "Vehicle_Accessory") - { - var tmpAcc = (Save.Items.Vehicle_Accessory) SiiNunitData.SiiNitems[accLink]; - - if (tmpAcc.accType == "basepart") - { - if (!String.IsNullOrEmpty(tmpAcc.data_path)) - { - try - { + if (SiiNunitData.SiiNitems[accLink].GetType().Name == "Vehicle_Accessory") { + var tmpAcc = (Save.Items.Vehicle_Accessory)SiiNunitData.SiiNitems[accLink]; + + if (tmpAcc.accType == "basepart") { + if (!String.IsNullOrEmpty(tmpAcc.data_path)) { + try { var tmpParts = tmpAcc.data_path.Split(new char[] { '"' }, StringSplitOptions.RemoveEmptyEntries)[0] .Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); truckName = tmpParts[tmpParts.Length - 2]; - } - catch - { } + } catch { } } break; @@ -360,23 +342,16 @@ private void FillUserCompanyTrucksList() } } - if (TruckBrandsLngDict.TryGetValue(truckName, out string truckNameValue)) - { - if (!String.IsNullOrEmpty(truckNameValue)) - { + if (TruckBrandsLngDict.TryGetValue(truckName, out string truckNameValue)) { + if (!String.IsNullOrEmpty(truckNameValue)) { tmpTruckName = truckNameValue; - } - else - { + } else { tmpTruckName = truckName; } - } - else - { + } else { var tmpParts = truckName.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries); - foreach (string word in tmpParts) - { + foreach (string word in tmpParts) { tmpTruckName += Utilities.TextUtilities.CapitalizeWord(word) + " "; } @@ -386,27 +361,18 @@ private void FillUserCompanyTrucksList() //Driver Garages tmpGrg = GaragesList.Where(tX => tX.Vehicles.Contains(truckNameless))?.SingleOrDefault() ?? null; - if (tmpGrg != null) - { + if (tmpGrg != null) { tmpDriverName = tmpGrg.Drivers[tmpGrg.Vehicles.IndexOf(truckNameless)]; - } - else - { + } else { tmpDriverName = UserDriverDictionary.Where(tX => tX.Value.AssignedTruck == truckNameless)?.SingleOrDefault().Key ?? "null"; } - if (!String.IsNullOrEmpty(tmpDriverName) && tmpDriverName != "null") - { - if (SiiNunitData.Player.drivers[0] == tmpDriverName || tmpTruckType == 0) - { + if (!String.IsNullOrEmpty(tmpDriverName) && tmpDriverName != "null") { + if (SiiNunitData.Player.drivers[0] == tmpDriverName || tmpTruckType == 0) { tmpDriverName = "> " + Utilities.TextUtilities.FromHexToString(Globals.SelectedProfile); - } - else - { - if (DriverNames.TryGetValue(tmpDriverName, out string _resultvalue)) - { - if (!String.IsNullOrEmpty(_resultvalue)) - { + } else { + if (DriverNames.TryGetValue(tmpDriverName, out string _resultvalue)) { + if (!String.IsNullOrEmpty(_resultvalue)) { tmpDriverName = _resultvalue.TrimStart(new char[] { '+' }); } } @@ -419,8 +385,7 @@ private void FillUserCompanyTrucksList() bool noTrucks = false; - if (combDT.Rows.Count == 0) - { + if (combDT.Rows.Count == 0) { combDT.Rows.Add("null"); // -- NONE -- noTrucks = true; } @@ -440,8 +405,7 @@ private void FillUserCompanyTrucksList() } // - private void UpdateTruckPanelDetails() - { + private void UpdateTruckPanelDetails() { for (byte i = 0; i < 5; i++) UpdateTruckPanelProgressBar(i); @@ -451,8 +415,7 @@ private void UpdateTruckPanelDetails() UpdateTruckPanelLicensePlate(); } - private void UpdateTruckPanelProgressBar(byte _number) - { + private void UpdateTruckPanelProgressBar(byte _number) { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); if (SelectedUserCompanyTruck == null) @@ -469,8 +432,7 @@ private void UpdateTruckPanelProgressBar(byte _number) //Repair button Button repairButton = groupBoxUserTruckTruckDetails.Controls.Find("buttonTruckElRepair" + _number, true).FirstOrDefault() as Button; - if (pbPanel != null) - { + if (pbPanel != null) { float _wear = 0, _unfixableWear = 0, _permanentWear = 0; @@ -478,16 +440,13 @@ private void UpdateTruckPanelProgressBar(byte _number) // Part wear - try - { - switch (_number) - { + try { + switch (_number) { case 0: partType = "engine"; _wear = SelectedUserCompanyTruck.TruckMainData.engine_wear; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { _unfixableWear = SelectedUserCompanyTruck.TruckMainData.engine_wear_unfixable; } @@ -497,8 +456,7 @@ private void UpdateTruckPanelProgressBar(byte _number) partType = "transmission"; _wear = SelectedUserCompanyTruck.TruckMainData.transmission_wear; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { _unfixableWear = SelectedUserCompanyTruck.TruckMainData.transmission_wear_unfixable; } @@ -508,8 +466,7 @@ private void UpdateTruckPanelProgressBar(byte _number) partType = "chassis"; _wear = SelectedUserCompanyTruck.TruckMainData.chassis_wear; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { _unfixableWear = SelectedUserCompanyTruck.TruckMainData.chassis_wear_unfixable; } @@ -519,8 +476,7 @@ private void UpdateTruckPanelProgressBar(byte _number) partType = "cabin"; _wear = SelectedUserCompanyTruck.TruckMainData.cabin_wear; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { _unfixableWear = SelectedUserCompanyTruck.TruckMainData.cabin_wear_unfixable; } @@ -531,17 +487,14 @@ private void UpdateTruckPanelProgressBar(byte _number) if (SelectedUserCompanyTruck.TruckMainData.wheels_wear.Count > 0) _wear = SelectedUserCompanyTruck.TruckMainData.wheels_wear.Sum() / SelectedUserCompanyTruck.TruckMainData.wheels_wear.Count; - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { if (SelectedUserCompanyTruck.TruckMainData.wheels_wear_unfixable.Count > 0) _unfixableWear = SelectedUserCompanyTruck.TruckMainData.wheels_wear_unfixable.Sum() / SelectedUserCompanyTruck.TruckMainData.wheels_wear_unfixable.Count; } break; } - } - catch - { + } catch { repairButton.Enabled = false; return; } @@ -554,33 +507,26 @@ private void UpdateTruckPanelProgressBar(byte _number) // Part name - if (pnLabel != null) - { + if (pnLabel != null) { pnLabel.Text = ""; string pnlText = ""; - foreach (string accLink in SelectedUserCompanyTruck.TruckMainData.accessories) - { + foreach (string accLink in SelectedUserCompanyTruck.TruckMainData.accessories) { dynamic accessoryDyn = SiiNunitData.SiiNitems[accLink]; Type accType = accessoryDyn.GetType(); - if (accType.Name == "Vehicle_Accessory" && partType != "tire") - { + if (accType.Name == "Vehicle_Accessory" && partType != "tire") { Save.Items.Vehicle_Accessory tmp = (Save.Items.Vehicle_Accessory)SiiNunitData.SiiNitems[accLink]; - if (tmp.accType == partType) - { + if (tmp.accType == partType) { pnlText = tmp.data_path.Split(new char[] { '"' })[1].Split(new char[] { '/' }).Last().Split(new char[] { '.' })[0]; break; } - } - else if (accType.Name == "Vehicle_Wheel_Accessory" && partType == "tire") - { + } else if (accType.Name == "Vehicle_Wheel_Accessory" && partType == "tire") { Save.Items.Vehicle_Wheel_Accessory tmp = (Save.Items.Vehicle_Wheel_Accessory)accessoryDyn; - if (tmp.accType == "tire") - { + if (tmp.accType == "tire") { if (pnlText.Length != 0) pnlText += " | "; @@ -605,13 +551,12 @@ private void UpdateTruckPanelProgressBar(byte _number) float totalWear = _wear + _unfixableWear + _permanentWear; - int x = 0, y = 0, + int x = 0, y = 0, pnlWidth = (int)(pbPanel.Width * (1 - (totalWear))); Bitmap progressBar = new Bitmap(pbPanel.Width, pbPanel.Height); - using (Graphics g = Graphics.FromImage(progressBar)) - { + using (Graphics g = Graphics.FromImage(progressBar)) { g.SmoothingMode = SmoothingMode.HighQuality; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; @@ -620,8 +565,7 @@ private void UpdateTruckPanelProgressBar(byte _number) int pnlWidthFixable = (int)(pbPanel.Width * _wear); - using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[0], WrapMode.Tile)) - { + using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[0], WrapMode.Tile)) { SolidBrush wearPen = new SolidBrush(Color.Yellow); g.FillRectangle(wearPen, pnlWidth, 0, pnlWidthFixable, pbPanel.Height); @@ -629,14 +573,12 @@ private void UpdateTruckPanelProgressBar(byte _number) g.FillRectangle(brush, pnlWidth, 0, pnlWidthFixable, pbPanel.Height); } - if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) - { + if (MainSaveFileInfoData.Version > (byte)saveVTV.v148) { //1.49 int pnlWidthUnfixable = (int)(pbPanel.Width * _unfixableWear); - using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[1], WrapMode.Tile)) - { + using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[1], WrapMode.Tile)) { SolidBrush wearPen = new SolidBrush(Color.Orange); g.FillRectangle(wearPen, pnlWidth + pnlWidthFixable, 0, pnlWidthUnfixable, pbPanel.Height); @@ -647,8 +589,7 @@ private void UpdateTruckPanelProgressBar(byte _number) int pnlWidthPermanent = (int)(pbPanel.Width * _permanentWear); - using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[2], WrapMode.Tile)) - { + using (TextureBrush brush = new TextureBrush(VehicleIntegrityPBImg[2], WrapMode.Tile)) { SolidBrush wearPen = new SolidBrush(Color.Red); g.FillRectangle(wearPen, pnlWidth + pnlWidthFixable + pnlWidthUnfixable, 0, pnlWidthPermanent, pbPanel.Height); @@ -669,7 +610,7 @@ private void UpdateTruckPanelProgressBar(byte _number) // Percent background SolidBrush pbPen = new SolidBrush(Color.FromArgb(200, Color.White)); - g.FillRectangle(pbPen, (pbPanel.ClientRectangle.Width - textSize.Width) / 2, + g.FillRectangle(pbPen, (pbPanel.ClientRectangle.Width - textSize.Width) / 2, (pbPanel.ClientRectangle.Height - textSize.Height) / 2, textSize.Width, textSize.Height); // @@ -698,24 +639,18 @@ private void UpdateTruckPanelProgressBar(byte _number) } } - private void CheckTruckRepair() - { + private void CheckTruckRepair() { bool repairEnabled = false; Button repairTruck = tableLayoutPanelUserTruckControls.Controls.Find("buttonTruckRepair", true).FirstOrDefault() as Button; - for (byte i = 0; i < 5; i++) - { - try - { + for (byte i = 0; i < 5; i++) { + try { Button tmp = groupBoxUserTruckTruckDetails.Controls.Find("buttonTruckElRepair" + i, true).FirstOrDefault() as Button; - if (tmp.Enabled) - { + if (tmp.Enabled) { repairEnabled = true; break; } - } - catch - { + } catch { continue; } } @@ -723,8 +658,7 @@ private void CheckTruckRepair() repairTruck.Enabled = repairEnabled; } - private void UpdateTruckPanelFuel() - { + private void UpdateTruckPanelFuel() { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); string pnlnamefuel = "progressbarTruckFuel"; @@ -732,8 +666,7 @@ private void UpdateTruckPanelFuel() Button refuelTruck = tableLayoutPanelUserTruckControls.Controls.Find("buttonTruckReFuel", true).FirstOrDefault() as Button; - if (pnlfuel != null) - { + if (pnlfuel != null) { float _fuel = SelectedUserCompanyTruck.TruckMainData.fuel_relative; if (_fuel == 1) @@ -742,13 +675,12 @@ private void UpdateTruckPanelFuel() refuelTruck.Enabled = true; SolidBrush ppen = new SolidBrush(Graphics_TSSET.GetProgressbarColor(1 - _fuel)); - int pnlheight = (int)(pnlfuel.Height * _fuel), + int pnlheight = (int)(pnlfuel.Height * _fuel), x = 0, y = pnlfuel.Height - pnlheight; Bitmap progress = new Bitmap(pnlfuel.Width, pnlfuel.Height); - using (Graphics g = Graphics.FromImage(progress)) - { + using (Graphics g = Graphics.FromImage(progress)) { g.SmoothingMode = SmoothingMode.AntiAlias; g.FillRectangle(ppen, x, y, pnlfuel.Width, pnlheight); @@ -787,9 +719,8 @@ private void UpdateTruckPanelFuel() pnlfuel.BackgroundImage = progress; } } - - private void UpdateTruckPanelLicensePlate() - { + + private void UpdateTruckPanelLicensePlate() { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); string LicensePlate = SelectedUserCompanyTruck.TruckMainData.license_plate.Value; @@ -799,30 +730,27 @@ private void UpdateTruckPanelLicensePlate() //Find label control Label lpText = groupBoxUserTruckTruckDetails.Controls.Find("labelLicensePlate", true).FirstOrDefault() as Label; - if (lpText != null) - { + if (lpText != null) { lpText.Text = thisLP.LicensePlateTXT + " | "; string value = null; CountriesLngDict.TryGetValue(thisLP.SourceLPCountry, out value); - if (value != null && value != "") + if (value != null && value != "") lpText.Text += value; - else + else lpText.Text += CultureInfo.InvariantCulture.TextInfo.ToTitleCase(thisLP.SourceLPCountry); } // Panel lpPanel = groupBoxUserTruckTruckDetails.Controls.Find("TruckLicensePlateIMG", true).FirstOrDefault() as Panel; - if (lpPanel != null) - { - lpPanel.BackgroundImage = Graphics_TSSET.ResizeImage(thisLP.LicensePlateIMG, LicensePlateWidth[GameType], 32); //ETS - 128x32 or ATS - 128x64 | 64x32 + if (lpPanel != null) { + lpPanel.BackgroundImage = Graphics_TSSET.ResizeImage(thisLP.LicensePlateIMG, SelectedGame.LicensePlateWidth, 32); //ETS - 128x32 or ATS - 128x64 | 64x32 } } //Events - private void comboBoxCompanyTrucks_SelectedIndexChanged(object sender, EventArgs e) - { + private void comboBoxCompanyTrucks_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cmbbx = sender as ComboBox; if (cmbbx.SelectedValue != null && cmbbx.SelectedValue.ToString() != "null") //cmbbx.SelectedIndex != -1 && @@ -836,9 +764,7 @@ private void comboBoxCompanyTrucks_SelectedIndexChanged(object sender, EventArgs tableLayoutPanelUserTruckControls.Enabled = true; UpdateTruckPanelDetails(); - } - else - { + } else { ToggleTruckPartsCondition(false); groupBoxUserTruckTruckDetails.Enabled = false; @@ -849,52 +775,43 @@ private void comboBoxCompanyTrucks_SelectedIndexChanged(object sender, EventArgs } } - private void groupBoxUserTruckTruckDetails_EnabledChanged(object sender, EventArgs e) - { + private void groupBoxUserTruckTruckDetails_EnabledChanged(object sender, EventArgs e) { ToggleVisualTruckDetails(groupBoxUserTruckTruckDetails.Enabled); } - private void tableLayoutPanelUserTruckControls_EnabledChanged(object sender, EventArgs e) - { + private void tableLayoutPanelUserTruckControls_EnabledChanged(object sender, EventArgs e) { ToggleVisualTruckControls(tableLayoutPanelUserTruckControls.Enabled); } - private void ToggleVisualTruckDetails(bool _state) - { - for (int i = 0; i < 5; i++) - { + private void ToggleVisualTruckDetails(bool _state) { + for (int i = 0; i < 5; i++) { Control tmpButtonRepair = tabControlMain.TabPages["tabPageTruck"].Controls.Find("buttonTruckElRepair" + i.ToString(), true).FirstOrDefault(); if (tmpButtonRepair == null) continue; tmpButtonRepair.Enabled = _state; - + if (_state) tmpButtonRepair.BackgroundImage = RepairImg; else - tmpButtonRepair.BackgroundImage = Graphics_TSSET.ConvertBitmapToGrayscale(RepairImg); + tmpButtonRepair.BackgroundImage = Graphics_TSSET.ConvertBitmapToGrayscale(RepairImg); } } - private void ToggleVisualTruckControls(bool _state) - { + private void ToggleVisualTruckControls(bool _state) { Control tmpControl; string[] buttons = { "buttonTruckReFuel", "buttonTruckRepair", "buttonTruckVehicleEditor", "buttonTruckLicensePlateEdit" }; Image[] images = { RefuelImg, RepairImg, CustomizeImg, CustomizeImg }; - for (int i = 0; i < buttons.Count(); i++) - { - try - { + for (int i = 0; i < buttons.Count(); i++) { + try { tmpControl = tabControlMain.TabPages["tabPageTruck"].Controls.Find(buttons[i], true)[0]; - } - catch - { + } catch { continue; } - + if (_state && tmpControl.Enabled) tmpControl.BackgroundImage = images[i]; else @@ -902,14 +819,11 @@ private void ToggleVisualTruckControls(bool _state) } } - private void ToggleTruckPartsCondition(bool _state) - { - if (!_state) - { + private void ToggleTruckPartsCondition(bool _state) { + if (!_state) { string lblname, pnlname; - for (int i = 0; i < 5; i++) - { + for (int i = 0; i < 5; i++) { lblname = "labelTruckPartDataName" + i.ToString(); Label pnLabel = groupBoxUserTruckTruckDetails.Controls.Find(lblname, true).FirstOrDefault() as Label; @@ -919,14 +833,14 @@ private void ToggleTruckPartsCondition(bool _state) pnlname = "progressbarTruckPart" + i.ToString(); Panel pbPanel = groupBoxUserTruckTruckDetails.Controls.Find(pnlname, true).FirstOrDefault() as Panel; - if (pbPanel != null) - pbPanel.BackgroundImage = null; + if (pbPanel != null) + pbPanel.BackgroundImage = null; } - string pnlFname = "progressbarTruckFuel"; + string pnlFname = "progressbarTruckFuel"; Panel pnlF = groupBoxUserTruckTruckDetails.Controls.Find(pnlFname, true).FirstOrDefault() as Panel; - if (pnlF != null) + if (pnlF != null) pnlF.BackgroundImage = null; string lblLCname = "labelLicensePlate"; @@ -943,8 +857,7 @@ private void ToggleTruckPartsCondition(bool _state) } } //Buttons - public void buttonTruckReFuel_Click(object sender, EventArgs e) - { + public void buttonTruckReFuel_Click(object sender, EventArgs e) { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); if (SelectedUserCompanyTruck == null) @@ -955,8 +868,7 @@ public void buttonTruckReFuel_Click(object sender, EventArgs e) UpdateTruckPanelFuel(); } - public void buttonTruckRepair_Click(object sender, EventArgs e) - { + public void buttonTruckRepair_Click(object sender, EventArgs e) { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); if (SelectedUserCompanyTruck == null) @@ -983,8 +895,7 @@ public void buttonTruckRepair_Click(object sender, EventArgs e) CheckTruckRepair(); } // - public void buttonElRepair_Click(object sender, EventArgs e) - { + public void buttonElRepair_Click(object sender, EventArgs e) { Button curbtn = sender as Button; byte bi = Convert.ToByte(curbtn.Name.Substring(19)); @@ -993,8 +904,7 @@ public void buttonElRepair_Click(object sender, EventArgs e) if (SelectedUserCompanyTruck == null) return; - switch (bi) - { + switch (bi) { case 0: SelectedUserCompanyTruck.TruckMainData.engine_wear = 0; SelectedUserCompanyTruck.TruckMainData.engine_wear_unfixable = 0; @@ -1022,8 +932,7 @@ public void buttonElRepair_Click(object sender, EventArgs e) CheckTruckRepair(); } // - public void buttonElRepair_EnabledChanged(object sender, EventArgs e) - { + public void buttonElRepair_EnabledChanged(object sender, EventArgs e) { Button tmp = sender as Button; if (tmp.Enabled) @@ -1032,8 +941,7 @@ public void buttonElRepair_EnabledChanged(object sender, EventArgs e) tmp.BackgroundImage = Graphics_TSSET.ConvertBitmapToGrayscale(RepairImg); } - public void buttonRefuel_EnabledChanged(object sender, EventArgs e) - { + public void buttonRefuel_EnabledChanged(object sender, EventArgs e) { Button tmp = sender as Button; if (tmp.Enabled) @@ -1042,38 +950,32 @@ public void buttonRefuel_EnabledChanged(object sender, EventArgs e) tmp.BackgroundImage = Graphics_TSSET.ConvertBitmapToGrayscale(RefuelImg); } // - private void buttonUserTruckSelectCurrent_Click(object sender, EventArgs e) - { + private void buttonUserTruckSelectCurrent_Click(object sender, EventArgs e) { comboBoxUserTruckCompanyTrucks.SelectedValue = SiiNunitData.Player.assigned_truck; } - private void buttonUserTruckSwitchCurrent_Click(object sender, EventArgs e) - { + private void buttonUserTruckSwitchCurrent_Click(object sender, EventArgs e) { var SelectedItem = ((DataRowView)comboBoxUserTruckCompanyTrucks.SelectedItem).Row; SiiNunitData.Player.assigned_truck = SelectedItem[0].ToString(); // Truck link - if (SiiNunitData.Player_Job != null) - { + if (SiiNunitData.Player_Job != null) { if ((string)SelectedItem[1] == "Q") // check Truck type { SiiNunitData.NamelessIgnoreList.Remove(SiiNunitData.Player.assigned_truck); SiiNunitData.Player_Job.company_truck = SiiNunitData.Player.assigned_truck; - } - else - { + } else { if (SiiNunitData.Player_Job.company_truck != "null") SiiNunitData.NamelessIgnoreList.Add(SiiNunitData.Player_Job.company_truck); SiiNunitData.Player_Job.company_truck = "null"; } - + } } - private void buttonUserTruckVehicleEditor_Click(object sender, EventArgs e) - { + private void buttonUserTruckVehicleEditor_Click(object sender, EventArgs e) { UserTruckDictionary.TryGetValue(comboBoxUserTruckCompanyTrucks.SelectedValue.ToString(), out UserCompanyTruckData SelectedUserCompanyTruck); if (SelectedUserCompanyTruck == null) @@ -1081,8 +983,7 @@ private void buttonUserTruckVehicleEditor_Click(object sender, EventArgs e) Dictionary partsDict = new Dictionary(); - foreach (string acc in SelectedUserCompanyTruck.TruckMainData.accessories) - { + foreach (string acc in SelectedUserCompanyTruck.TruckMainData.accessories) { partsDict.Add(acc, SiiNunitData.SiiNitems[acc]); } @@ -1090,34 +991,30 @@ private void buttonUserTruckVehicleEditor_Click(object sender, EventArgs e) frm.StartPosition = FormStartPosition.CenterParent; DialogResult dr = frm.ShowDialog(this); - if (dr == DialogResult.OK) - { + if (dr == DialogResult.OK) { List newAccList = new List(); - foreach (KeyValuePair item in frm.Accessories) - { + foreach (KeyValuePair item in frm.Accessories) { newAccList.Add(item.Key); } //Remove acc link List removeAcc = new List(); - removeAcc = SelectedUserCompanyTruck.TruckMainData.accessories.Except(newAccList).ToList(); + removeAcc = SelectedUserCompanyTruck.TruckMainData.accessories.Except(newAccList).ToList(); SiiNunitData.NamelessIgnoreList.AddRange(removeAcc); - foreach(string acc in removeAcc) - { + foreach (string acc in removeAcc) { SelectedUserCompanyTruck.TruckMainData.accessories.Remove(acc); - } + } //Add Acc List addAcc = new List(); addAcc = newAccList.Except(SelectedUserCompanyTruck.TruckMainData.accessories).ToList(); - foreach (string acc in addAcc) - { + foreach (string acc in addAcc) { SiiNunitData.SiiNitems.Add(acc, frm.Accessories[acc]); } @@ -1128,15 +1025,13 @@ private void buttonUserTruckVehicleEditor_Click(object sender, EventArgs e) } // //Share buttons - private void buttonTruckPaintCopy_Click(object sender, EventArgs e) - { + private void buttonTruckPaintCopy_Click(object sender, EventArgs e) { string tempPaint = "TruckPaint\r\n"; List paintstr = new List(); //List paintstr = UserTruckDictionary[comboBoxUserTruckCompanyTrucks.SelectedValue.ToString()].Parts.Find(xp => xp.PartType == "paintjob").PartData; - foreach (string temp in paintstr) - { + foreach (string temp in paintstr) { tempPaint += temp + "\r\n"; } @@ -1145,30 +1040,23 @@ private void buttonTruckPaintCopy_Click(object sender, EventArgs e) MessageBox.Show("Paint data has been copied."); } - private void buttonTruckPaintPaste_Click(object sender, EventArgs e) - { - try - { + private void buttonTruckPaintPaste_Click(object sender, EventArgs e) { + try { string inputData = Utilities.ZipDataUtilities.unzipText(Clipboard.GetText()); string[] Lines = inputData.Split(new string[] { "\r\n" }, StringSplitOptions.None); - if (Lines[0] == "TruckPaint") - { + if (Lines[0] == "TruckPaint") { List paintstr = new List(); - for (int i = 1; i < Lines.Length; i++) - { + for (int i = 1; i < Lines.Length; i++) { paintstr.Add(Lines[i]); } //UserTruckDictionary[comboBoxUserTruckCompanyTrucks.SelectedValue.ToString()].Parts.Find(xp => xp.PartType == "paintjob").PartData = paintstr; MessageBox.Show("Paint data has been inserted."); - } - else + } else MessageBox.Show("Wrong data. Expected Paint data but\r\n" + Lines[0] + "\r\nwas found."); - } - catch - { + } catch { MessageBox.Show("Something gone wrong with decoding."); } } diff --git a/TS SE Tool/Forms/ProfileEditor/FormProfileEditorRenameClone.cs b/TS SE Tool/Forms/ProfileEditor/FormProfileEditorRenameClone.cs index 26e3d4e5..f5d03a32 100644 --- a/TS SE Tool/Forms/ProfileEditor/FormProfileEditorRenameClone.cs +++ b/TS SE Tool/Forms/ProfileEditor/FormProfileEditorRenameClone.cs @@ -26,10 +26,8 @@ limitations under the License. using System.IO.Compression; using System.Threading; -namespace TS_SE_Tool -{ - public partial class FormProfileEditorRenameClone : Form - { +namespace TS_SE_Tool { + public partial class FormProfileEditorRenameClone : Form { public string ReturnNewName { get; set; } public List ReturnClonedNames { get; set; } = new List(); public bool ReturnRenamedSuccessful { get; set; } = false; @@ -52,8 +50,7 @@ public partial class FormProfileEditorRenameClone : Form private List existingProfiles = new List(); - public FormProfileEditorRenameClone(string _mode) - { + public FormProfileEditorRenameClone(string _mode) { InitializeComponent(); this.Icon = Properties.Resources.MainIco; @@ -62,8 +59,7 @@ public FormProfileEditorRenameClone(string _mode) SetupForm(); } - private void SetupForm() - { + private void SetupForm() { PrepareForm(); TranslateForm(); @@ -74,22 +70,18 @@ private void SetupForm() } // - private void TranslateForm() - { + private void TranslateForm() { MainForm.HelpTranslateFormMethod(this); string controlsNewNames = ""; - switch (FormMode) - { - case "rename": - { + switch (FormMode) { + case "rename": { controlsNewNames = "Renaming"; break; } - case "clone": - { + case "clone": { controlsNewNames = "Cloning"; break; @@ -101,12 +93,9 @@ private void TranslateForm() } // - private void PrepareForm() - { - switch (FormMode) - { - case "rename": - { + private void PrepareForm() { + switch (FormMode) { + case "rename": { textBoxNewName.MaxLength = NameLengthLimit; checkBoxMutiCloning.Visible = false; @@ -114,8 +103,7 @@ private void PrepareForm() break; } - case "clone": - { + case "clone": { checkBoxCreateBackup.Visible = false; checkBoxFullCloning.Location = checkBoxMutiCloning.Location; @@ -127,8 +115,7 @@ private void PrepareForm() } // - private void CorrectControlsPositions() - { + private void CorrectControlsPositions() { //Group box and label width tableLayoutPanelControls.ColumnStyles[0].Width = 6 + ((labelNewName.PreferredWidth > groupBoxOptions.PreferredSize.Width) ? labelNewName.PreferredWidth : groupBoxOptions.PreferredSize.Width); @@ -137,8 +124,7 @@ private void CorrectControlsPositions() // if (tcolwidth - 6 >= textBoxNewNameWidthMin) textBoxNewName.Width = tcolwidth; - else - { + else { this.Width += textBoxNewNameWidthMin - tcolwidth + 6; textBoxNewName.Width = textBoxNewNameWidthMin; } @@ -149,12 +135,10 @@ private void CorrectControlsPositions() } //Name textbox events - private void textBoxNewName_KeyDown(object sender, KeyEventArgs e) - { + private void textBoxNewName_KeyDown(object sender, KeyEventArgs e) { if (textBoxNewName.Text.Length == 0) return; - if (e.KeyCode == Keys.Return || e.KeyCode == Keys.Back || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Home || e.KeyCode == Keys.End || e.KeyCode == Keys.PageDown || e.KeyCode == Keys.PageUp || e.KeyCode == Keys.Delete) - { + if (e.KeyCode == Keys.Return || e.KeyCode == Keys.Back || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Home || e.KeyCode == Keys.End || e.KeyCode == Keys.PageDown || e.KeyCode == Keys.PageUp || e.KeyCode == Keys.Delete) { e.Handled = false; aboveLimitLength = false; return; @@ -172,47 +156,39 @@ private void textBoxNewName_KeyDown(object sender, KeyEventArgs e) aboveLimitLength = (temp.Length < NameLengthLimit) ? false : true; } - private void textBoxNewName_KeyUp(object sender, KeyEventArgs e) - { + private void textBoxNewName_KeyUp(object sender, KeyEventArgs e) { indicateCharLimit(); } - private void textBoxNewName_KeyPress(object sender, KeyPressEventArgs e) - { + private void textBoxNewName_KeyPress(object sender, KeyPressEventArgs e) { //Filter char[] forbidenChars = { '\\', '|' }; char tmpChar = e.KeyChar; - if (forbidenChars.Contains(tmpChar)) - { + if (forbidenChars.Contains(tmpChar)) { e.Handled = true; } //charLimit(); // Check for the flag being set in the KeyDown event - if (aboveLimitLength == true) - { + if (aboveLimitLength == true) { // Stop the character from being entered into the control e.Handled = true; } } - private void textBoxNewName_TextChanged(object sender, EventArgs e) - { + private void textBoxNewName_TextChanged(object sender, EventArgs e) { bool apply = true; //Trim on paste - if (textBoxNewName.Multiline) - { + if (textBoxNewName.Multiline) { int linecount = textBoxNewName.Lines.Length; var tmpLines = textBoxNewName.Lines; - for (int i = 0; i < linecount; i++) - { - if (textBoxNewName.Lines[i].Length > NameLengthLimit) - { + for (int i = 0; i < linecount; i++) { + if (textBoxNewName.Lines[i].Length > NameLengthLimit) { tmpLines[i] = textBoxNewName.Lines[i].Substring(0, NameLengthLimit); } @@ -221,32 +197,23 @@ private void textBoxNewName_TextChanged(object sender, EventArgs e) string[] commonElements = textBoxNewName.Lines.Intersect(existingProfiles).ToArray(); - if (commonElements.Count() > 1) - { + if (commonElements.Count() > 1) { errorProvider.SetError(textBoxNewName, "Profiles already exist: " + Environment.NewLine + string.Join(Environment.NewLine, commonElements)); apply = false; - } - else if (commonElements.Count() > 0) - { + } else if (commonElements.Count() > 0) { errorProvider.SetError(textBoxNewName, "Profile [ " + commonElements[0] + " ] already exist"); apply = false; - } - else + } else errorProvider.SetError(textBoxNewName, ""); - } - else - { + } else { if (textBoxNewName.Text.Length > NameLengthLimit) textBoxNewName.Text = textBoxNewName.Text.Substring(0, NameLengthLimit); - if (existingProfiles.Contains(textBoxNewName.Text)) - { + if (existingProfiles.Contains(textBoxNewName.Text)) { errorProvider.SetError(textBoxNewName, "Profile [ " + textBoxNewName.Text + " ] already exist"); apply = false; - } - else - { + } else { errorProvider.SetError(textBoxNewName, ""); } } @@ -261,10 +228,8 @@ private void textBoxNewName_TextChanged(object sender, EventArgs e) } //Checkboxes - private void checkBoxMutiCloning_CheckedChanged(object sender, EventArgs e) - { - if (checkBoxMutiCloning.Checked) - { + private void checkBoxMutiCloning_CheckedChanged(object sender, EventArgs e) { + if (checkBoxMutiCloning.Checked) { textBoxNewName.Multiline = true; textBoxNewName.ScrollBars = ScrollBars.Vertical; @@ -277,9 +242,7 @@ private void checkBoxMutiCloning_CheckedChanged(object sender, EventArgs e) textBoxNewName.Height = tNewheight; else textBoxNewName.Height = tminHeight; - } - else - { + } else { textBoxNewName.Multiline = false; textBoxNewName.ScrollBars = ScrollBars.None; textBoxNewName.Text = (textBoxNewName.Lines.Count() != 0) ? textBoxNewName.Lines[0] : ""; @@ -289,22 +252,17 @@ private void checkBoxMutiCloning_CheckedChanged(object sender, EventArgs e) } //Buttons - private void buttonAccept_Click(object sender, EventArgs e) - { - switch (FormMode) - { - case "rename": - { + private void buttonAccept_Click(object sender, EventArgs e) { + switch (FormMode) { + case "rename": { string NewProfileName = textBoxNewName.Text.Trim(new char[] { ' ' }), NewFolderName = "", NewFolderPath = ""; byte progress = 0; - if (NewProfileName != InitialName && !existingProfiles.Contains(NewProfileName)) - { + if (NewProfileName != InitialName && !existingProfiles.Contains(NewProfileName)) { ReturnNewName = NewProfileName; - try - { + try { //New folder name NewFolderName = Utilities.TextUtilities.FromStringToHex(NewProfileName); NewFolderPath = InitialPath.Remove(InitialPath.LastIndexOf('\\') + 1) + NewFolderName; @@ -323,7 +281,7 @@ private void buttonAccept_Click(object sender, EventArgs e) string[] profileFile = tF.NewDecodeFile(NewFolderPath + "\\profile.sii"); progress = 4; - SaveFileProfileData ProfileData = new SaveFileProfileData(); + SaveFileProfileData ProfileData = new SaveFileProfileData(MainForm.SelectedGame); ProfileData.ProcessData(profileFile); progress = 5; @@ -332,8 +290,7 @@ private void buttonAccept_Click(object sender, EventArgs e) progress = 6; //Write file - using (StreamWriter SW = new StreamWriter(NewFolderPath + "\\profile.sii", false)) - { + using (StreamWriter SW = new StreamWriter(NewFolderPath + "\\profile.sii", false)) { ProfileData.WriteToStream(SW); } progress = 7; @@ -341,13 +298,10 @@ private void buttonAccept_Click(object sender, EventArgs e) //Iterate through save folders to edit preview.tobj DirectoryInfo[] dirInfoArray = new DirectoryInfo(NewFolderPath + "\\save").GetDirectories(); - foreach (DirectoryInfo subdir in dirInfoArray) - { + foreach (DirectoryInfo subdir in dirInfoArray) { FileInfo[] saveFolderFile = subdir.GetFiles(); - foreach (FileInfo fI in saveFolderFile) - { - if (fI.Name == "preview.tobj") - { + foreach (FileInfo fI in saveFolderFile) { + if (fI.Name == "preview.tobj") { //tobj string pathToTGA = "/home/profiles/" + NewFolderName + "/save/" + subdir.Name + "/preview.tga"; @@ -360,8 +314,7 @@ private void buttonAccept_Click(object sender, EventArgs e) progress = 8; //Make backup - if (checkBoxCreateBackup.Checked) - { + if (checkBoxCreateBackup.Checked) { if (File.Exists(InitialPath + ".zip")) File.Delete(InitialPath + ".zip"); @@ -375,11 +328,8 @@ private void buttonAccept_Click(object sender, EventArgs e) ReturnNewName = NewProfileName; ReturnRenamedSuccessful = true; - } - catch - { - switch (progress) - { + } catch { + switch (progress) { case 0: MessageBox.Show("Create new folder name failed"); break; @@ -412,7 +362,7 @@ private void buttonAccept_Click(object sender, EventArgs e) ZipFile.ExtractToDirectory(InitialPath + ".zip", InitialPath); File.Delete(InitialPath + ".zip"); break; - delete: + delete: MessageBox.Show("Deleting new Profile."); Directory.Delete(NewFolderPath); break; @@ -422,24 +372,19 @@ private void buttonAccept_Click(object sender, EventArgs e) break; } } - } - else - { + } else { DialogResult = DialogResult.Abort; Close(); } break; } - case "clone": - { - foreach (string newfile in textBoxNewName.Lines) - { + case "clone": { + foreach (string newfile in textBoxNewName.Lines) { string NewProfileName = "", NewFolderPath = ""; byte progress = 0; - try - { + try { //Check empty lines if (newfile.Length == 0 || newfile.Trim(new char[] { ' ' }).Length == 0) continue; @@ -479,8 +424,7 @@ private void buttonAccept_Click(object sender, EventArgs e) //CFG tmpFilelist = Directory.EnumerateFiles(InitialPath, "*.cfg", SearchOption.TopDirectoryOnly).ToArray(); - foreach (string file in tmpFilelist) - { + foreach (string file in tmpFilelist) { if (Path.GetFileName(file).Equals("config.cfg") || Path.GetFileName(file).Equals("config_local.cfg")) fileList.Add(file); } @@ -488,15 +432,13 @@ private void buttonAccept_Click(object sender, EventArgs e) //SII gearbox layout tmpFilelist = Directory.EnumerateFiles(InitialPath, "*.sii", SearchOption.TopDirectoryOnly).ToArray(); - foreach (string file in tmpFilelist) - { + foreach (string file in tmpFilelist) { if (Path.GetFileName(file).StartsWith("gearbox_layout_")) fileList.Add(file); } //Iterate files - foreach (string file in fileList) - { + foreach (string file in fileList) { string temppath = Path.Combine(NewFolderPath, Path.GetFileName(file)); //new file path with name FileInfo tFI = new FileInfo(file); //fileinfo @@ -508,7 +450,7 @@ private void buttonAccept_Click(object sender, EventArgs e) string[] profileFile = ParentForm.NewDecodeFile(NewFolderPath + "\\profile.sii"); progress = 4; - SaveFileProfileData ProfileData = new SaveFileProfileData(); + SaveFileProfileData ProfileData = new SaveFileProfileData(MainForm.SelectedGame); ProfileData.ProcessData(profileFile); progress = 5; @@ -518,8 +460,7 @@ private void buttonAccept_Click(object sender, EventArgs e) progress = 6; //Write file - using (StreamWriter SW = new StreamWriter(NewFolderPath + "\\profile.sii", false)) - { + using (StreamWriter SW = new StreamWriter(NewFolderPath + "\\profile.sii", false)) { ProfileData.WriteToStream(SW); } progress = 7; @@ -533,20 +474,16 @@ private void buttonAccept_Click(object sender, EventArgs e) //Copy saves string[] validFileNames = new string[] { "game.sii", "info.sii", "preview.tga", "preview.mat", "preview.tobj" }; - if (checkBoxFullCloning.Checked) - { + if (checkBoxFullCloning.Checked) { Utilities.IO_Utilities.DirectoryCopy(InitialPath + "\\save", NewSaveFolder, true, validFileNames); //Iterate through save folders to edit preview.tobj DirectoryInfo[] dirInfoArray = new DirectoryInfo(NewFolderPath + "\\save").GetDirectories(); - foreach (DirectoryInfo subdir in dirInfoArray) - { + foreach (DirectoryInfo subdir in dirInfoArray) { FileInfo[] saveFolderFile = subdir.GetFiles(); - foreach (FileInfo fI in saveFolderFile) - { - if (fI.Name == "preview.tobj") - { + foreach (FileInfo fI in saveFolderFile) { + if (fI.Name == "preview.tobj") { //tobj string pathToTGA = "/home/profiles/" + NewProfileNameHex + "/save/" + subdir.Name + "/preview.tga"; @@ -556,9 +493,7 @@ private void buttonAccept_Click(object sender, EventArgs e) } } } - } - else - { + } else { Utilities.IO_Utilities.DirectoryCopy(InitialPath + "\\save\\autosave", NewSaveFolder + "\\autosave", false, validFileNames); } @@ -569,16 +504,13 @@ private void buttonAccept_Click(object sender, EventArgs e) Utilities.IO_Utilities.DirectoryCopy(InitialPath + "\\album", NewFolderPath + "\\album", false); progress = 10; - + //Cloned folders existingProfiles.Add(NewProfileName); ReturnClonedNames.Add(NewProfileName); - } - catch - { + } catch { - switch (progress) - { + switch (progress) { case 0: MessageBox.Show("Create new folder name failed"); break; @@ -607,11 +539,11 @@ private void buttonAccept_Click(object sender, EventArgs e) MessageBox.Show("Directory with saves copy failed"); goto delete; case 9: - MessageBox.Show("Album Directory copy failed"); + MessageBox.Show("Album Directory copy failed"); break; default: MessageBox.Show("Unexpected error. Deleting new Profile."); - delete: + delete: Directory.Delete(NewFolderPath); break; } @@ -629,29 +561,22 @@ private void buttonAccept_Click(object sender, EventArgs e) Close(); } - private void buttonCancel_Click(object sender, EventArgs e) - { + private void buttonCancel_Click(object sender, EventArgs e) { this.Close(); } //Extra - private bool indicateCharLimit() - { + private bool indicateCharLimit() { int txtLength = 0; bool apply = true; - if (textBoxNewName.Multiline) - { - if (textBoxNewName.Lines.Length > 0) - { + if (textBoxNewName.Multiline) { + if (textBoxNewName.Lines.Length > 0) { int currentLine = textBoxNewName.GetLineFromCharIndex(textBoxNewName.SelectionStart); txtLength = textBoxNewName.Lines[currentLine].Length; - } - else + } else apply = false; - } - else - { + } else { txtLength = textBoxNewName.Text.Length; if (txtLength == 0) @@ -660,18 +585,13 @@ private bool indicateCharLimit() //=== - if (txtLength == 0) - { + if (txtLength == 0) { labelCharCountLimit.ForeColor = Color.Red; labelCharCountLimit.Font = new Font(labelCharCountLimit.Font, FontStyle.Bold); - } - else if (txtLength >= NameLengthLimit) - { + } else if (txtLength >= NameLengthLimit) { labelCharCountLimit.ForeColor = Color.Red; labelCharCountLimit.Font = new Font(labelCharCountLimit.Font, FontStyle.Bold); - } - else - { + } else { labelCharCountLimit.ForeColor = Color.DarkGreen; labelCharCountLimit.Font = new Font(labelCharCountLimit.Font, FontStyle.Regular); } @@ -681,12 +601,10 @@ private bool indicateCharLimit() return apply; } - private void calculateTextBoxNewNameSize() - { + private void calculateTextBoxNewNameSize() { int extraM = 25; - if (textBoxNewName.Multiline) - { + if (textBoxNewName.Multiline) { int tNewheight = textBoxNewName.Font.Height * (textBoxNewName.Lines.Count() + 1) + 7; int tminHeight = textBoxNewName.Font.Height * 3 + 7; @@ -702,8 +620,7 @@ private void calculateTextBoxNewNameSize() tbNewNameWidthMulty = 0; - foreach (string newfile in textBoxNewName.Lines) - { + foreach (string newfile in textBoxNewName.Lines) { if (newfile.Length == 0 || newfile.Trim(new char[] { ' ' }) == "") continue; @@ -718,9 +635,7 @@ private void calculateTextBoxNewNameSize() this.Width = FormWidthMin + tbNewNameWidthMulty - textBoxNewNameWidthMin + extraM + SystemInformation.VerticalScrollBarWidth; else this.Width = FormWidthMin + SystemInformation.VerticalScrollBarWidth; - } - else - { + } else { Graphics gr = CreateGraphics(); SizeF tSize = gr.MeasureString(textBoxNewName.Text, textBoxNewName.Font); tbNewNameWidth = (int)Math.Ceiling(Convert.ToDouble(tSize.Width)); @@ -733,16 +648,14 @@ private void calculateTextBoxNewNameSize() } - private void FormProfileEditorRenameClone_Load(object sender, EventArgs e) - { + private void FormProfileEditorRenameClone_Load(object sender, EventArgs e) { existingProfiles = Directory.GetDirectories(InitialPath.Remove(InitialPath.LastIndexOf('\\') + 1)).Select(d => new DirectoryInfo(d).Name).ToList(); existingProfiles = existingProfiles.Where(x => !x.Contains(' ')).ToList(); List tmp = new List(); - foreach (string name in existingProfiles) - { + foreach (string name in existingProfiles) { tmp.Add(Utilities.TextUtilities.FromHexToString(name)); } diff --git a/TS SE Tool/Forms/ProfileEditor/FormProfileEditorSettingsImportExport.cs b/TS SE Tool/Forms/ProfileEditor/FormProfileEditorSettingsImportExport.cs index 368c6bac..4f799f8d 100644 --- a/TS SE Tool/Forms/ProfileEditor/FormProfileEditorSettingsImportExport.cs +++ b/TS SE Tool/Forms/ProfileEditor/FormProfileEditorSettingsImportExport.cs @@ -24,11 +24,10 @@ limitations under the License. using System.Windows.Forms; using System.IO; using System.IO.Compression; +using TS_SE_Tool.Utilities; -namespace TS_SE_Tool -{ - public partial class FormProfileEditorSettingsImportExport : Form - { +namespace TS_SE_Tool { + public partial class FormProfileEditorSettingsImportExport : Form { internal new FormMain ParentForm; internal string ProfileType; FormMain MainForm = Application.OpenForms.OfType().Single(); @@ -36,7 +35,7 @@ public partial class FormProfileEditorSettingsImportExport : Form private string InitialName = ""; private string InitialPath = ""; - private string MyDocumentsSteamFolderPath = ""; + private DirectoryInfo MyDocumentsSteamFolderPath; private string MyDocumentsSteamProfilePath = ""; private string zipFilePath = ""; @@ -45,35 +44,31 @@ public partial class FormProfileEditorSettingsImportExport : Form private string controlsNewNames = ""; private Form4Mode FormMode; - internal enum Form4Mode - { + internal enum Form4Mode { Import, Export } - internal FormProfileEditorSettingsImportExport(Form4Mode _mode) - { + internal FormProfileEditorSettingsImportExport(Form4Mode _mode) { InitializeComponent(); this.Icon = Properties.Resources.MainIco; FormMode = _mode; } - private void FormProfileEditorSettingsImportExport_Load(object sender, EventArgs e) - { + private void FormProfileEditorSettingsImportExport_Load(object sender, EventArgs e) { PrepareData(); SetupForm(); TranslateForm(); } - private void PrepareData() - { + private void PrepareData() { //Profile name InitialPath = ParentForm.comboBoxProfiles.SelectedValue.ToString(); InitialName = Utilities.TextUtilities.FromHexToString(InitialPath.Split(new string[] { "\\" }, StringSplitOptions.None).Last()); - MyDocumentsSteamFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + ParentForm.dictionaryProfiles[ParentForm.GameType] + @"\steam_profiles\"; + MyDocumentsSteamFolderPath = ParentForm.SelectedGame.DocumentsDir.Combine("steam_profiles"); // Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + ParentForm.dictionaryProfiles[ParentForm.SelectedGame.Type] + @"\steam_profiles\"; LoadProfiles(); @@ -81,8 +76,7 @@ private void PrepareData() buttonCancel.Select(); } - private void LoadProfiles() - { + private void LoadProfiles() { //Profiles DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("profilePath", typeof(string)); @@ -91,8 +85,7 @@ private void LoadProfiles() dc = new DataColumn("profileName", typeof(string)); combDT.Columns.Add(dc); - foreach (string path in Globals.ProfilesHex) - { + foreach (string path in Globals.ProfilesHex) { if (path != ParentForm.comboBoxProfiles.SelectedValue.ToString()) combDT.Rows.Add(path, Utilities.TextUtilities.FromHexToString(path.Split(new string[] { "\\" }, StringSplitOptions.None).Last())); } @@ -105,14 +98,11 @@ private void LoadProfiles() listBoxProfileList.SelectedIndex = -1; } - private void SetupForm() - { + private void SetupForm() { tableLayoutPanelUseFile.ColumnStyles[0].Width = 0; - switch (FormMode) - { - case Form4Mode.Import: - { + switch (FormMode) { + case Form4Mode.Import: { controlsNewNames = "Importing"; prepareVisualsSettings(false); @@ -130,8 +120,7 @@ private void SetupForm() break; } - case Form4Mode.Export: - { + case Form4Mode.Export: { controlsNewNames = "Exporting"; prepareVisualsSettings(false); @@ -155,16 +144,14 @@ private void SetupForm() } } - private void prepareVisualsSettings(bool _status) - { + private void prepareVisualsSettings(bool _status) { checkBoxControls.Enabled = _status; checkBoxConfig.Enabled = _status; checkBoxConfigLocal.Enabled = _status; checkBoxShifterLayouts.Enabled = _status; } - private void TranslateForm() - { + private void TranslateForm() { MainForm.HelpTranslateFormMethod(this); MainForm.HelpTranslateControlDiffName(this, this.Name + controlsNewNames, InitialName); @@ -172,8 +159,7 @@ private void TranslateForm() MainForm.HelpTranslateControlDiffName(groupBoxSelectFile, groupBoxSelectFile.Name + controlsNewNames); } - private void resetCheckboxes() - { + private void resetCheckboxes() { checkBoxControls.Checked = false; checkBoxConfig.Checked = false; checkBoxConfigLocal.Checked = false; @@ -181,10 +167,8 @@ private void resetCheckboxes() } //Events - private void listBoxProfileListImport_SelectedIndexChanged(object sender, EventArgs e) - { - if (listBoxProfileList.SelectedIndex != -1) - { + private void listBoxProfileListImport_SelectedIndexChanged(object sender, EventArgs e) { + if (listBoxProfileList.SelectedIndex != -1) { prepareVisualsSettings(false); resetCheckboxes(); @@ -197,30 +181,23 @@ private void listBoxProfileListImport_SelectedIndexChanged(object sender, EventA } - private void listBoxProfileListExport_SelectedIndexChanged(object sender, EventArgs e) - { - if (listBoxProfileList.SelectedIndex != -1) - { + private void listBoxProfileListExport_SelectedIndexChanged(object sender, EventArgs e) { + if (listBoxProfileList.SelectedIndex != -1) { buttonApply.Enabled = true; checkBoxChooseFileOption.Checked = false; - } - else - { + } else { buttonApply.Enabled = false; } } - private void checkConfigsExist(string _path) - { + private void checkConfigsExist(string _path) { List folderFiles = Directory.GetFiles(_path).ToList(); - if (ProfileType == "steam") - { + if (ProfileType == "steam") { MyDocumentsSteamProfilePath = MyDocumentsSteamFolderPath + Path.GetFileName(_path); - if (Directory.Exists(MyDocumentsSteamProfilePath)) - { + if (Directory.Exists(MyDocumentsSteamProfilePath)) { folderFiles.AddRange(Directory.GetFiles(MyDocumentsSteamProfilePath)); } } @@ -228,45 +205,35 @@ private void checkConfigsExist(string _path) checkConfigFilesExist(folderFiles); } - private void checkConfigsExistZip(string _fileName) - { - try - { + private void checkConfigsExistZip(string _fileName) { + try { Stream zipReadingStream = File.OpenRead(_fileName); - if (zipReadingStream != null) - { + if (zipReadingStream != null) { ZipArchive zip = new ZipArchive(zipReadingStream); zipFiles = zip.Entries.Select(x => x.Name).ToList(); } - } - catch { } + } catch { } checkConfigFilesExist(zipFiles); } - private void checkConfigFilesExist(List _inputList) - { + private void checkConfigFilesExist(List _inputList) { List tmpShifterLayoutNames = new List(); - foreach (string tempEntry in _inputList) - { + foreach (string tempEntry in _inputList) { string tmpFileName = Path.GetFileName(tempEntry); - switch (tmpFileName) - { - case "config.cfg": - { + switch (tmpFileName) { + case "config.cfg": { checkBoxConfig.Enabled = true; break; } - case "config_local.cfg": - { + case "config_local.cfg": { checkBoxConfigLocal.Enabled = true; break; } - case "controls.sii": - { + case "controls.sii": { checkBoxControls.Enabled = true; break; } @@ -276,14 +243,12 @@ private void checkConfigFilesExist(List _inputList) getShifterLayouts(_inputList); } - private void checkBoxShifterLayouts_CheckedChanged(object sender, EventArgs e) - { + private void checkBoxShifterLayouts_CheckedChanged(object sender, EventArgs e) { listBoxSettingsExtra.Enabled = checkBoxShifterLayouts.Checked; listBoxSettingsExtra.ClearSelected(); } - private void LoadSourceProfileShifterLayouts() - { + private void LoadSourceProfileShifterLayouts() { //Layouts DataTable combDT = new DataTable(); DataColumn dc = new DataColumn("layoutsPath", typeof(string)); @@ -294,8 +259,7 @@ private void LoadSourceProfileShifterLayouts() string[] shifterLayouts = Directory.GetFiles(InitialPath, "gearbox_*.sii"); - foreach (string path in shifterLayouts) - { + foreach (string path in shifterLayouts) { combDT.Rows.Add(path, path.Split(new string[] { "\\" }, StringSplitOptions.None).Last()); } @@ -304,8 +268,7 @@ private void LoadSourceProfileShifterLayouts() listBoxSettingsExtra.DisplayMember = "layoutName"; } - private void getShifterLayouts(List _files) - { + private void getShifterLayouts(List _files) { string[] shifterLayouts = _files.Where(x => Path.GetFileName(x).StartsWith("gearbox_") && x.EndsWith(".sii")).ToArray(); if (shifterLayouts.Count() > 0) @@ -319,8 +282,7 @@ private void getShifterLayouts(List _files) dc = new DataColumn("layoutName", typeof(string)); combDT.Columns.Add(dc); - foreach (string path in shifterLayouts) - { + foreach (string path in shifterLayouts) { combDT.Rows.Add(path, path.Split(new string[] { "\\" }, StringSplitOptions.None).Last()); } @@ -332,19 +294,16 @@ private void getShifterLayouts(List _files) } //Extra buttons - private void buttonSelectFileImport_Click(object sender, EventArgs e) - { + private void buttonSelectFileImport_Click(object sender, EventArgs e) { selectZipFileForImport(); } - private void buttonSelectFileExport_Click(object sender, EventArgs e) - { + private void buttonSelectFileExport_Click(object sender, EventArgs e) { selectZipFileForExport(); } // - private void selectZipFileForImport() - { + private void selectZipFileForImport() { //Set the file dialog to filter for graphics files. OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "ZIP archives (*.zip)|*.zip"; @@ -354,8 +313,7 @@ private void selectZipFileForImport() openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); DialogResult dr = openFileDialog.ShowDialog(); - if (dr == DialogResult.OK) - { + if (dr == DialogResult.OK) { setVisualsBeforeFileSetlect(); // zipFilePath = openFileDialog.FileName; @@ -365,8 +323,7 @@ private void selectZipFileForImport() } } - private void selectZipFileForExport() - { + private void selectZipFileForExport() { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "ZIP archives (*.zip)|*.zip"; @@ -377,8 +334,7 @@ private void selectZipFileForExport() saveFileDialog.OverwritePrompt = true; saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); - if (saveFileDialog.ShowDialog() == DialogResult.OK) - { + if (saveFileDialog.ShowDialog() == DialogResult.OK) { //Visuals listBoxProfileList.SelectedIndex = -1; // @@ -391,10 +347,8 @@ private void selectZipFileForExport() } } - private void ChooseFileOptionImport_CheckedChanged(object sender, EventArgs e) - { - if (checkBoxChooseFileOption.Checked) - { + private void ChooseFileOptionImport_CheckedChanged(object sender, EventArgs e) { + if (checkBoxChooseFileOption.Checked) { setVisualsBeforeFileSetlect(); checkConfigsExistZip(zipFilePath); @@ -402,37 +356,29 @@ private void ChooseFileOptionImport_CheckedChanged(object sender, EventArgs e) setVisualsAfterFileSetlect(); buttonApply.Enabled = true; - } - else - { - if (listBoxProfileList.SelectedIndex == -1) - { + } else { + if (listBoxProfileList.SelectedIndex == -1) { setVisualsBeforeFileSetlect(); buttonApply.Enabled = false; } - + } } - private void ChooseFileOptionExport_CheckedChanged(object sender, EventArgs e) - { + private void ChooseFileOptionExport_CheckedChanged(object sender, EventArgs e) { //Visuals - if(checkBoxChooseFileOption.Checked) - { + if (checkBoxChooseFileOption.Checked) { listBoxProfileList.ClearSelected(); buttonApply.Enabled = true; - } - else - { + } else { if (listBoxProfileList.SelectedIndex == -1) buttonApply.Enabled = false; } } - private void setVisualsBeforeFileSetlect() - { + private void setVisualsBeforeFileSetlect() { //Visuals listBoxProfileList.ClearSelected(); @@ -442,8 +388,7 @@ private void setVisualsBeforeFileSetlect() resetCheckboxes(); } - private void setVisualsAfterFileSetlect() - { + private void setVisualsAfterFileSetlect() { //Visuals tableLayoutPanelUseFile.ColumnStyles[0].SizeType = SizeType.Percent; tableLayoutPanelUseFile.ColumnStyles[0].Width = 80; @@ -459,13 +404,11 @@ private void setVisualsAfterFileSetlect() } //Main buttons - private void buttonSaveImport_Click(object sender, EventArgs e) - { + private void buttonSaveImport_Click(object sender, EventArgs e) { //prepare file list List tmpFileList = new List(); - if (listBoxProfileList.SelectedIndex == -1 && checkBoxChooseFileOption.Checked) - { + if (listBoxProfileList.SelectedIndex == -1 && checkBoxChooseFileOption.Checked) { //ZIP if (checkBoxConfig.Checked) tmpFileList.Add(zipFiles.Find(x => x == "config.cfg")); @@ -477,44 +420,37 @@ private void buttonSaveImport_Click(object sender, EventArgs e) tmpFileList.Add(zipFiles.Find(x => x == "controls.sii")); if (checkBoxShifterLayouts.Checked) - foreach (object tmp in listBoxSettingsExtra.SelectedItems) - { + foreach (object tmp in listBoxSettingsExtra.SelectedItems) { string tmpPath = ((DataRowView)tmp).Row.ItemArray[0].ToString(); tmpFileList.Add(zipFiles.Find(x => x == tmpPath)); } //skip if selected 0 items if (tmpFileList.Count() == 0) - return; + return; - try - { + try { string tmpInitialPath = InitialPath; - if (ProfileType == "steam") - { + if (ProfileType == "steam") { tmpInitialPath = MyDocumentsSteamFolderPath + Path.GetFileName(InitialPath); } //Extract zip Utilities.ZipDataUtilities.extractListZipArchive(zipFilePath, tmpInitialPath, tmpFileList); - - if (ProfileType == "steam" && checkBoxConfig.Checked) - { + + if (ProfileType == "steam" && checkBoxConfig.Checked) { File.Move(tmpInitialPath + @"\config.cfg", InitialPath + @"\config.cfg"); } - + //Message MessageBox.Show("Files was imported.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - catch { } + } catch { } //Reset Zip toggle checkBoxChooseFileOption.Checked = false; - } - else if (listBoxProfileList.SelectedIndex != -1 && !checkBoxChooseFileOption.Checked) - { + } else if (listBoxProfileList.SelectedIndex != -1 && !checkBoxChooseFileOption.Checked) { //Folder string tmpSourcePath = ((DataRowView)listBoxProfileList.SelectedItem).Row.ItemArray[0].ToString(); string tmpInitialPath = tmpSourcePath; @@ -522,8 +458,7 @@ private void buttonSaveImport_Click(object sender, EventArgs e) if (checkBoxConfig.Checked) tmpFileList.Add(tmpInitialPath + "\\config.cfg"); - if (ProfileType == "steam") - { + if (ProfileType == "steam") { tmpInitialPath = MyDocumentsSteamProfilePath; } @@ -534,8 +469,7 @@ private void buttonSaveImport_Click(object sender, EventArgs e) tmpFileList.Add(tmpInitialPath + "\\controls.sii"); if (checkBoxShifterLayouts.Checked) - foreach (object tmp in listBoxSettingsExtra.SelectedItems) - { + foreach (object tmp in listBoxSettingsExtra.SelectedItems) { string tmpPath = ((DataRowView)tmp).Row.ItemArray[0].ToString(); tmpFileList.Add(tmpPath); } @@ -544,43 +478,32 @@ private void buttonSaveImport_Click(object sender, EventArgs e) if (tmpFileList.Count() == 0) return; - try - { + try { //Copy - if (ProfileType == "steam") - { - foreach (string file in tmpFileList) - { - if (Path.GetFileName(file) == "config.cfg") - { + if (ProfileType == "steam") { + foreach (string file in tmpFileList) { + if (Path.GetFileName(file) == "config.cfg") { File.Copy(file, InitialPath + "\\" + Path.GetFileName(file)); - } - else - { + } else { string tmpPath = MyDocumentsSteamFolderPath + Path.GetFileName(InitialPath) + "\\"; File.Copy(file, tmpPath + Path.GetFileName(file)); } } - } - else - foreach (string file in tmpFileList) - { + } else + foreach (string file in tmpFileList) { File.Copy(file, InitialPath + "\\" + Path.GetFileName(file)); } //Message MessageBox.Show("Files was exported.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - catch - { } + } catch { } //Reset Profiles list listBoxProfileList.ClearSelected(); } } - private void buttonSaveExport_Click(object sender, EventArgs e) - { + private void buttonSaveExport_Click(object sender, EventArgs e) { //prepare file list List tmpFileList = new List(); string tmpInitialPath = InitialPath; @@ -588,8 +511,7 @@ private void buttonSaveExport_Click(object sender, EventArgs e) if (checkBoxConfig.Checked) tmpFileList.Add(tmpInitialPath + "\\config.cfg"); - if (ProfileType == "steam") - { + if (ProfileType == "steam") { tmpInitialPath = MyDocumentsSteamProfilePath; } @@ -600,8 +522,7 @@ private void buttonSaveExport_Click(object sender, EventArgs e) tmpFileList.Add(tmpInitialPath + "\\controls.sii"); if (checkBoxShifterLayouts.Checked) - foreach (object tmp in listBoxSettingsExtra.SelectedItems) - { + foreach (object tmp in listBoxSettingsExtra.SelectedItems) { string tmpPathLayouts = ((DataRowView)tmp).Row.ItemArray[0].ToString(); tmpFileList.Add(tmpPathLayouts); } @@ -612,41 +533,34 @@ private void buttonSaveExport_Click(object sender, EventArgs e) if (listBoxProfileList.SelectedIndex == -1 && checkBoxChooseFileOption.Checked) //ZIP { - try - { + try { Utilities.ZipDataUtilities.makeZipArchive(zipFilePath, tmpFileList); DialogResult dr = MessageBox.Show("ZIP Archive Created.\r\nOpen destination folder?", "Success", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (dr == DialogResult.Yes) System.Diagnostics.Process.Start(Directory.GetParent(zipFilePath).FullName); - } - catch { } - } - else if (listBoxProfileList.SelectedIndex != -1 && !checkBoxChooseFileOption.Checked) //Profiles - { + } catch { } + } else if (listBoxProfileList.SelectedIndex != -1 && !checkBoxChooseFileOption.Checked) //Profiles + { List exportPath = new List(); //Paths - foreach (object tmp in listBoxProfileList.SelectedItems) - { + foreach (object tmp in listBoxProfileList.SelectedItems) { string tmpPath = ((DataRowView)tmp).Row.ItemArray[0].ToString(); exportPath.Add(tmpPath); } //Copy - try - { + try { foreach (string path in exportPath) - foreach (string file in tmpFileList) - { + foreach (string file in tmpFileList) { File.Copy(file, path + "\\" + Path.GetFileName(file)); } //Message MessageBox.Show("Files was exported.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - catch { } + } catch { } } //unselect @@ -655,13 +569,11 @@ private void buttonSaveExport_Click(object sender, EventArgs e) } - private void buttonCancel_Click(object sender, EventArgs e) - { + private void buttonCancel_Click(object sender, EventArgs e) { this.Close(); } - private void checkBoxChooseFileOption_Click(object sender, EventArgs e) - { + private void checkBoxChooseFileOption_Click(object sender, EventArgs e) { } } diff --git a/TS SE Tool/MethodsReadWrite.cs b/TS SE Tool/MethodsReadWrite.cs index d40c1096..c44d4072 100644 --- a/TS SE Tool/MethodsReadWrite.cs +++ b/TS SE Tool/MethodsReadWrite.cs @@ -32,82 +32,64 @@ limitations under the License. using System.Text.RegularExpressions; using TS_SE_Tool.Utilities; +using TS_SE_Tool.CustomClasses.Program; -namespace TS_SE_Tool -{ - public partial class FormMain : Form - { +namespace TS_SE_Tool { + public partial class FormMain : Form { private BackgroundWorker generalWorker; //Check if tsset folders exist - private void CheckTssetFoldersExist() - { + private void CheckTssetFoldersExist() { TssetFoldersExist = true; string[] folderPaths = new string[] { "libs", "img", "lang", "updater" }; - foreach (string path in folderPaths) - { - if (!Directory.Exists(path)) - { + foreach (string path in folderPaths) { + if (!Directory.Exists(path)) { TssetFoldersExist = false; break; } } } - private void LoadExtCountries() - { + private void LoadExtCountries() { string[] inputFile; - try - { + try { inputFile = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\lang\CityToCountry.csv"); - for (int i = 0; i < inputFile.Length; i++) - { + for (int i = 0; i < inputFile.Length; i++) { CountryDictionary.AddCountry(inputFile[i].Split(new char[] { ';' })[0], inputFile[i].Split(new char[] { ';' })[1]); } - } - catch - { + } catch { IO_Utilities.LogWriter("CityToCountry.csv file is missing in lang directory"); } - try - { + try { inputFile = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\lang\CountryProperties.csv"); - for (int i = 0; i < inputFile.Length; i++) - { + for (int i = 0; i < inputFile.Length; i++) { if (inputFile[i].StartsWith("#")) continue; string[] csvParts = inputFile[i].Split(new char[] { ';' }); - CountriesDataList.Add(csvParts[0], new Country(csvParts[0], csvParts[1], csvParts[2].Replace('.',','))); + CountriesDataList.Add(csvParts[0], new Country(csvParts[0], csvParts[1], csvParts[2].Replace('.', ','))); } - } - catch - { + } catch { IO_Utilities.LogWriter("CountryProperties.csv file is missing in lang directory"); } } - private void LoadExtCargoes() - { + private void LoadExtCargoes() { string[] strArray; - try - { + try { strArray = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\heavy_cargoes.csv"); - for (int i = 0; i < strArray.Length; i++) - { + for (int i = 0; i < strArray.Length; i++) { HeavyCargoList.Add(strArray[i]); } - } - catch - { + } catch { strArray = new string[] { "asph_miller", "cable_reel", "concr_beams", "dozer", "locomotive", "metal_center", "mobile_crane", "transformat", "case600", "cat627", "coil", "kalmar240", "kalmar240_s", "komatsu155", "terex3160", "transformer", "wirtgen250" @@ -117,37 +99,28 @@ private void LoadExtCargoes() IO_Utilities.LogWriter("Default heavy_cargoes.csv created"); - for (int i = 0; i < strArray.Length; i++) - { + for (int i = 0; i < strArray.Length; i++) { HeavyCargoList.Add(strArray[i]); } } } - - private void LngFileLoader(string _sourcefile, Dictionary _destDict, string _ci) - { + + private void LngFileLoader(string _sourcefile, Dictionary _destDict, string _ci) { _destDict.Clear(); bool defaultDuplicates = false; string defaultFile = Directory.GetCurrentDirectory() + @"\lang\Default\" + _sourcefile; - try - { + try { string[] tempFile = File.ReadAllLines(defaultFile); - for (int i = 0; i < tempFile.Length; i++) - { - if (tempFile[i] != "" && !tempFile[i].StartsWith("[")) - { + for (int i = 0; i < tempFile.Length; i++) { + if (tempFile[i] != "" && !tempFile[i].StartsWith("[")) { string[] tmp = new string[2]; - try - { + try { tmp = tempFile[i].Split(new char[] { ';' }, 2); - } - catch - { } + } catch { } - if (tmp[0] != "") - { + if (tmp[0] != "") { if (!_destDict.ContainsKey(tmp[0])) _destDict.Add(tmp[0], tmp[1]); else @@ -155,14 +128,11 @@ private void LngFileLoader(string _sourcefile, Dictionary _destDi } } } - } - catch - { + } catch { IO_Utilities.LogWriter(_sourcefile + " file is missing"); } - if (defaultDuplicates) - { + if (defaultDuplicates) { var txtToWrite = _destDict.Select(x => string.Join(";", new string[] { x.Key, x.Value })).ToList(); txtToWrite.Insert(0, "[Default]"); @@ -177,88 +147,68 @@ private void LngFileLoader(string _sourcefile, Dictionary _destDi if (!File.Exists(Directory.GetCurrentDirectory() + @"\lang\" + languageFile)) return; - try - { + try { string[] tempFile = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\lang\" + languageFile); - for (int i = 0; i < tempFile.Length; i++) - { - if (tempFile[i] != "" && !tempFile[i].StartsWith("[")) - { + for (int i = 0; i < tempFile.Length; i++) { + if (tempFile[i] != "" && !tempFile[i].StartsWith("[")) { string[] tmp = new string[2]; - try - { + try { tmp = tempFile[i].Split(new char[] { ';' }, 2); - } - catch - { } + } catch { } - if (tmp[0] != null && tmp[0] != "") - { + if (tmp[0] != null && tmp[0] != "") { if (_destDict.ContainsKey(tmp[0])) _destDict[tmp[0]] = tmp[1]; else _destDict.Add(tmp[0], tmp[1]); } - } + } } - } - catch - { + } catch { IO_Utilities.LogWriter(_sourcefile + " file is missing"); } } - private void LoadTruckBrandsLng() - { + private void LoadTruckBrandsLng() { TruckBrandsLngDict.Clear(); - try - { + try { string[] tempFile = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\lang\Default\truck_brands.txt"); - for (int i = 0; i < tempFile.Length; i++) - { + for (int i = 0; i < tempFile.Length; i++) { if (tempFile[i].StartsWith("#")) continue; string[] tmp = tempFile[i].Split(new char[] { ';' }); TruckBrandsLngDict.Add(tmp[0], tmp[1]); } - } - catch - { + } catch { IO_Utilities.LogWriter("truck_brands.txt file is missing"); } } - private void LoadDriverNamesLng() - { + private void LoadDriverNamesLng() { DriverNames.Clear(); - try - { - string[] tempFile = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\lang\Default\" + GameType + "\\driver_names.csv"); + try { + string[] tempFile = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\lang\Default\" + SelectedGame.Type + "\\driver_names.csv"); - for (int i = 0; i < tempFile.Length; i++) - { + for (int i = 0; i < tempFile.Length; i++) { string[] tmp = tempFile[i].Split(new char[] { ';' }); DriverNames.Add(tmp[0], tmp[1]); } - } - catch - { + } catch { IO_Utilities.LogWriter("truck_brands.txt file is missing"); } } - private void LoadExtImages() - { + private void LoadExtImages() { string[] imgNames, imgPaths; //=== UI images - imgNames = new string[] { "Language", "github", "SCS", "TMP", "PDF", "YouTube", + imgNames = new string[] { "Language", "github", "SCS", "TMP", "PDF", "YouTube", "ProgramSettings", "Settings", "Cross", "Info", "Download", "Question", "NetworkCloud", "Reload", "EditList", "Extract"}; @@ -274,13 +224,13 @@ private void LoadExtImages() ProgUIImgsDict.Add(imgNames[i], tmpArray[i]); imgNames = new string[] { "plus", "minus" }; - imgPaths = new string[] { @"img\UI\add.dds", @"img\UI\remove.dds"}; + imgPaths = new string[] { @"img\UI\add.dds", @"img\UI\remove.dds" }; tmpArray = Graphics_TSSET.ddsImgLoader(imgPaths, 32, 32).images; for (int i = 0; i < imgPaths.Length; i++) ProgUIImgsDict.Add(imgNames[i], tmpArray[i]); - + //=== Game Icons @@ -306,20 +256,19 @@ private void LoadExtImages() SkillImgS = Graphics_TSSET.ddsImgLoader(imgPaths, 64, 64).images; // ADR icons - imgPaths = new string[] { @"img\" + GameType + @"\adr_1.dds", @"img\" + GameType + @"\adr_2.dds", @"img\" + GameType + @"\adr_3.dds", - @"img\" + GameType + @"\adr_4.dds", @"img\" + GameType + @"\adr_6.dds", @"img\" + GameType + @"\adr_8.dds" }; + imgPaths = new string[] { @"img\" + SelectedGame.Type + @"\adr_1.dds", @"img\" + SelectedGame.Type + @"\adr_2.dds", @"img\" + SelectedGame.Type + @"\adr_3.dds", + @"img\" + SelectedGame.Type + @"\adr_4.dds", @"img\" + SelectedGame.Type + @"\adr_6.dds", @"img\" + SelectedGame.Type + @"\adr_8.dds" }; ADRImgS = Graphics_TSSET.ddsImgLoader(imgPaths, 46, 46, 9, 9, 32, 32).images; - imgPaths = new string[] { @"img\" + GameType + @"\adr_1_grey.dds", @"img\" + GameType + @"\adr_2_grey.dds", @"img\" + GameType + @"\adr_3_grey.dds", - @"img\" + GameType + @"\adr_4_grey.dds", @"img\" + GameType + @"\adr_6_grey.dds", @"img\" + GameType + @"\adr_8_grey.dds" }; + imgPaths = new string[] { @"img\" + SelectedGame.Type + @"\adr_1_grey.dds", @"img\" + SelectedGame.Type + @"\adr_2_grey.dds", @"img\" + SelectedGame.Type + @"\adr_3_grey.dds", + @"img\" + SelectedGame.Type + @"\adr_4_grey.dds", @"img\" + SelectedGame.Type + @"\adr_6_grey.dds", @"img\" + SelectedGame.Type + @"\adr_8_grey.dds" }; ADRImgSGrey = Graphics_TSSET.ddsImgLoader(imgPaths, 46, 46, 9, 9, 32, 32).images; // skill level select imgPaths = new string[] { @"img\UI\Profile\skill_bar_s.dds", @"img\UI\Profile\skill_bar_s2.dds", @"img\UI\Profile\skill_bar1.dds", @"img\UI\Profile\skill_bar2.dds", @"img\UI\Profile\skill_bar3.dds" }; int y = 9; - for (int i = 0; i < imgPaths.Count(); i++) - { + for (int i = 0; i < imgPaths.Count(); i++) { if (i == 2) y = 8; SkillImgSBG[i] = Graphics_TSSET.ddsImgLoader(new[] { imgPaths[i] }, 46, 46, 9, y).images[0]; @@ -345,13 +294,13 @@ private void LoadExtImages() //=== Truck & Trailer tab // truck parts - imgPaths = new string[] { @"img\" + GameType + @"\engine.dds", @"img\" + GameType + @"\transmission.dds", @"img\" + GameType + @"\chassis.dds", - @"img\" + GameType + @"\cabin.dds", @"img\" + GameType + @"\tyres.dds" }; + imgPaths = new string[] { @"img\" + SelectedGame.Type + @"\engine.dds", @"img\" + SelectedGame.Type + @"\transmission.dds", @"img\" + SelectedGame.Type + @"\chassis.dds", + @"img\" + SelectedGame.Type + @"\cabin.dds", @"img\" + SelectedGame.Type + @"\tyres.dds" }; TruckPartsImg = Graphics_TSSET.ddsImgLoader(imgPaths, 64, 64).images; // trailer parts - imgPaths = new string[] { @"img\" + GameType + @"\cargo.dds", @"img\" + GameType + @"\trailer_body.dds", - @"img\" + GameType + @"\trailer_chassis.dds", @"img\" + GameType + @"\tyres.dds" }; + imgPaths = new string[] { @"img\" + SelectedGame.Type + @"\cargo.dds", @"img\" + SelectedGame.Type + @"\trailer_body.dds", + @"img\" + SelectedGame.Type + @"\trailer_chassis.dds", @"img\" + SelectedGame.Type + @"\tyres.dds" }; TrailerPartsImg = Graphics_TSSET.ddsImgLoader(imgPaths, 64, 64).images; // integrity progress bar @@ -389,7 +338,7 @@ private void LoadExtImages() imgPaths = new string[] { @"img\UI\Trucks&Trailers\Accessories\truck_config.dds", @"img\UI\Trucks&Trailers\Accessories\upgrades.dds" }; tmpIMGlist.AddRange(Graphics_TSSET.ddsImgLoader(imgPaths, 40, 40, 0, 0, 32, 32).images); - imgPaths = new string[] { @"img\" + GameType + @"\tyres.dds" }; + imgPaths = new string[] { @"img\" + SelectedGame.Type + @"\tyres.dds" }; tmpIMGlist.AddRange(Graphics_TSSET.ddsImgLoader(imgPaths, 42, 42, 5, 5, 32, 32).images); imgPaths = new string[] { @"img\UI\Trucks&Trailers\Accessories\use_preset.dds" }; @@ -406,16 +355,13 @@ private void LoadExtImages() } //Save new language strings - private void SaveCompaniesLng() - { + private void SaveCompaniesLng() { CompaniesList = CompaniesList.Distinct().OrderBy(x => x).ToList(); List newEntries = new List(); - foreach (string tempitem in CompaniesList ) - { - if (!CompaniesLngDict.TryGetValue(tempitem, out string value)) - { + foreach (string tempitem in CompaniesList) { + if (!CompaniesLngDict.TryGetValue(tempitem, out string value)) { newEntries.Add(tempitem); } } @@ -423,16 +369,13 @@ private void SaveCompaniesLng() SaveLngFilesWriter(newEntries, "companies_translate"); } - private void SaveCitiesLng() - { + private void SaveCitiesLng() { CitiesList = CitiesList.Distinct().OrderBy(x => x.CityName).ToList(); List newEntries = new List(); - foreach (City tempitem in CitiesList) - { - if (!CitiesLngDict.TryGetValue(tempitem.CityName, out string value)) - { + foreach (City tempitem in CitiesList) { + if (!CitiesLngDict.TryGetValue(tempitem.CityName, out string value)) { newEntries.Add(tempitem.CityName); } } @@ -440,16 +383,13 @@ private void SaveCitiesLng() SaveLngFilesWriter(newEntries, "cities_translate"); } - private void SaveCargoLng() - { + private void SaveCargoLng() { CargoesList = CargoesList.Distinct().OrderBy(x => x.CargoName).ToList(); List newEntries = new List(); - foreach (Cargo tempitem in CargoesList) - { - if (!CargoLngDict.TryGetValue(tempitem.CargoName, out string value)) - { + foreach (Cargo tempitem in CargoesList) { + if (!CargoLngDict.TryGetValue(tempitem.CargoName, out string value)) { newEntries.Add(tempitem.CargoName); } } @@ -457,102 +397,76 @@ private void SaveCargoLng() SaveLngFilesWriter(newEntries, "cargo_translate"); } - private void SaveLngFilesWriter(List newEntries, string outputFile) - { - if (newEntries.Count > 0) - { + private void SaveLngFilesWriter(List newEntries, string outputFile) { + if (newEntries.Count > 0) { newEntries = newEntries.Distinct().ToList(); - try - { - using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\lang\Default\" + outputFile + ".txt", true)) - { - foreach (string str in newEntries) - { + try { + using (StreamWriter writer = new StreamWriter(Directory.GetCurrentDirectory() + @"\lang\Default\" + outputFile + ".txt", true)) { + foreach (string str in newEntries) { writer.WriteLine(); writer.Write(str + ";"); } } - } - catch - { + } catch { IO_Utilities.LogWriter(outputFile + ".txt file is missing"); } } } // - private void ExportFormControlstoLanguageFile() - { + private void ExportFormControlstoLanguageFile() { string filename = Directory.GetCurrentDirectory() + @"\lang\base_lngfile.txt"; - if (!File.Exists(filename)) - { + if (!File.Exists(filename)) { File.CreateText(filename); } - try - { - using (StreamWriter writer = new StreamWriter(filename, false)) - { - foreach(ToolStripDropDownItem temp in menuStripMain.Items) - { + try { + using (StreamWriter writer = new StreamWriter(filename, false)) { + foreach (ToolStripDropDownItem temp in menuStripMain.Items) { writer.WriteLine(temp.Name + "=" + temp.Text); - foreach (var temp2 in temp.DropDownItems) - { - if (temp2.GetType() == typeof(ToolStripMenuItem)) - { - ToolStripDropDownItem temp3 = (ToolStripDropDownItem) temp2; - if(!temp3.Name.Contains("Translation")) + foreach (var temp2 in temp.DropDownItems) { + if (temp2.GetType() == typeof(ToolStripMenuItem)) { + ToolStripDropDownItem temp3 = (ToolStripDropDownItem)temp2; + if (!temp3.Name.Contains("Translation")) writer.WriteLine(temp3.Name + "=" + temp3.Text); } - + } } - foreach (Control x in Controls) - { - if (x.Text != "" && (x is Label || x is CheckBox || x is Button || x is GroupBox)) - { + foreach (Control x in Controls) { + if (x.Text != "" && (x is Label || x is CheckBox || x is Button || x is GroupBox)) { if (x.Text.Any(z => char.IsLetter(z))) writer.WriteLine(x.Name + "=" + x.Text); } - if (x is GroupBox) - { - foreach (Control xc in x.Controls) - { - if (xc.Text != "" && (xc is Label || xc is CheckBox || xc is Button || xc is GroupBox)) - { + if (x is GroupBox) { + foreach (Control xc in x.Controls) { + if (xc.Text != "" && (xc is Label || xc is CheckBox || xc is Button || xc is GroupBox)) { if (xc.Text.Any(z => char.IsLetter(z))) writer.WriteLine(xc.Name + "=" + xc.Text); } } } - if (x is TabControl) - { + if (x is TabControl) { TabControl pages = x as TabControl; - - foreach (TabPage page in pages.TabPages) - { + + foreach (TabPage page in pages.TabPages) { writer.WriteLine(page.Name + "=" + page.Text); - - foreach (Control y in page.Controls) - { - if (y.Text != "" && (y is Label || y is CheckBox || y is Button || y is GroupBox)) - { + + foreach (Control y in page.Controls) { + if (y.Text != "" && (y is Label || y is CheckBox || y is Button || y is GroupBox)) { if (y.Text.Any(z => char.IsLetter(z))) writer.WriteLine(y.Name + "=" + y.Text); } - if (y is GroupBox) - { - foreach (Control yc in y.Controls) - { - if (yc.Text != "" && (yc is Label || yc is CheckBox || yc is Button || yc is GroupBox)) - { + if (y is GroupBox) { + foreach (Control yc in y.Controls) { + if (yc.Text != "" && (yc is Label || yc is CheckBox || yc is Button || yc is GroupBox)) { if (yc.Text.Any(z => char.IsLetter(z))) writer.WriteLine(yc.Name + "=" + yc.Text); } @@ -561,25 +475,19 @@ private void ExportFormControlstoLanguageFile() } } } - + } - } - } - catch - { + } + } catch { IO_Utilities.LogWriter("base_lngfile file is missing"); } } - - private byte[] LoadFileToMemory(string _filePath) - { + + private byte[] LoadFileToMemory(string _filePath) { byte[] _buffer; - try - { + try { _buffer = File.ReadAllBytes(_filePath); - } - catch - { + } catch { IO_Utilities.LogWriter("Could not find file in: " + _filePath); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_find_file"); @@ -589,8 +497,7 @@ private byte[] LoadFileToMemory(string _filePath) return _buffer; } - private void LoadSaveFile(object sender, DoWorkEventArgs e) - { + private void LoadSaveFile(object sender, DoWorkEventArgs e) { UpdateStatusBarMessage.MainForm = Application.OpenForms.OfType().Single(); // Status @@ -604,15 +511,12 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) (bool valid, string[] fileArray) resulCheck; - if (File.Exists(SiiSavePath)) - { - string dbPath = "dbs/" + GameType + "." + Path.GetFileName(Globals.SelectedProfilePath) + ".sdf"; + if (File.Exists(SiiSavePath)) { + string dbPath = "dbs/" + SelectedGame.Type + "." + Path.GetFileName(Globals.SelectedProfilePath) + ".sdf"; DBconnection = new SqlCeConnection("Data Source = " + dbPath); CreateDatabase(dbPath); - } - else - { + } else { e.Cancel = true; DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, "Save file does not exist.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -623,17 +527,14 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) //=== Profile Info resulCheck = preProcessFile(SiiProfilePath, "Profile file"); - if (resulCheck.valid) - { + if (resulCheck.valid) { tempProfileFileInMemory = resulCheck.fileArray; - MainSaveFileProfileData = new SaveFileProfileData(); + MainSaveFileProfileData = new SaveFileProfileData(SelectedGame); MainSaveFileProfileData.ProcessData(tempProfileFileInMemory); tempProfileFileInMemory = null; - } - else - { + } else { e.Cancel = true; DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, "Error occured during preprocessing Profile file." + Environment.NewLine + @@ -646,15 +547,12 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) //=== Save info resulCheck = preProcessFile(SiiInfoPath, "Info file"); - if (resulCheck.valid) - { + if (resulCheck.valid) { tempInfoFileInMemory = resulCheck.fileArray; CheckSaveInfoData(); tempInfoFileInMemory = null; - } - else - { + } else { e.Cancel = true; DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, "Error occured during preprocessing Info file." + Environment.NewLine + @@ -666,8 +564,7 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) //=== End Save Info //=== Check for Dependencies conflict - if (!InfoDepContinue) - { + if (!InfoDepContinue) { e.Cancel = true; return; } @@ -676,14 +573,12 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) //=== Save file resulCheck = preProcessFile(SiiSavePath, "Save file"); - if (resulCheck.valid) - { + if (resulCheck.valid) { tempSavefileInMemory = resulCheck.fileArray; LastModifiedTimestamp = File.GetLastWriteTime(SiiSavePath); - if (!NewPrepareData()) - { + if (!NewPrepareData()) { e.Cancel = true; DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, "Error occured during preparing Save file." + Environment.NewLine + @@ -691,9 +586,7 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) return; } - } - else - { + } else { e.Cancel = true; DialogResult DR = UpdateStatusBarMessage.ShowMessageBox(this, "Error occured during preprocessing Save file." + Environment.NewLine + @@ -704,19 +597,15 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) // End Save file //=== - (bool valid, string[] fileArray) preProcessFile(string _filePath, string _type) - { + (bool valid, string[] fileArray) preProcessFile(string _filePath, string _type) { string[] _inputArray; - if (!File.Exists(_filePath)) - { + if (!File.Exists(_filePath)) { IO_Utilities.LogWriter("File does not exist in " + _filePath); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_find_file"); return (false, null); - } - else - { + } else { FileDecoded = false; _inputArray = decodeFile(_filePath); bool checkResult = checkDecodedFile(_inputArray, _type); @@ -725,96 +614,75 @@ private void LoadSaveFile(object sender, DoWorkEventArgs e) } } //=== - string[] decodeFile(string _filePath) - { + string[] decodeFile(string _filePath) { string[] fileArray = null; - try - { + try { int decodeAttempt = 0; - while (decodeAttempt < 5) - { + while (decodeAttempt < 5) { fileArray = NewDecodeFile(_filePath); - if (FileDecoded) - { + if (FileDecoded) { break; } decodeAttempt++; } - if (decodeAttempt == 5) - { + if (decodeAttempt == 5) { IO_Utilities.LogWriter("Could not decrypt after 5 attempts"); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_decode_file"); } - } - catch - { + } catch { IO_Utilities.LogWriter("Could not read: " + _filePath); } return fileArray; } //=== - bool checkDecodedFile(string[] _input, string _type) - { - if (_input == null || _input[0] != "SiiNunit") - { + bool checkDecodedFile(string[] _input, string _type) { + if (_input == null || _input[0] != "SiiNunit") { IO_Utilities.LogWriter("Wrongly decoded " + _type + " or wrong file format"); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_file_not_decoded"); _input = null; return false; - } - else + } else return true; } //=== } - private void LoadProfileDataFile(string SiiProfilePath) - { + private void LoadProfileDataFile(string SiiProfilePath) { //Profile Info - if (!File.Exists(SiiProfilePath)) - { + if (!File.Exists(SiiProfilePath)) { IO_Utilities.LogWriter("File does not exist in " + SiiProfilePath); UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_find_file"); - } - else - { + } else { FileDecoded = false; - try - { + try { int decodeAttempt = 0; - while (decodeAttempt < 5) - { + while (decodeAttempt < 5) { tempProfileFileInMemory = NewDecodeFile(SiiProfilePath, false); - if (FileDecoded) - { + if (FileDecoded) { break; } decodeAttempt++; } - if (decodeAttempt == 5) - { + if (decodeAttempt == 5) { IO_Utilities.LogWriter("Could not decrypt after 5 attempts"); //UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_could_not_decode_file"); } - } - catch - { + } catch { IO_Utilities.LogWriter("Could not read: " + SiiProfilePath); } - if ((tempProfileFileInMemory == null) || (tempProfileFileInMemory[0] != "SiiNunit")) - { + if ((tempProfileFileInMemory == null) || (tempProfileFileInMemory[0] != "SiiNunit")) { IO_Utilities.LogWriter("Wrongly decoded Profile file or wrong file format"); //UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_file_not_decoded"); @@ -823,11 +691,9 @@ private void LoadProfileDataFile(string SiiProfilePath) SetDefaultValues(false); ToggleMainControlsAccess(true); ToggleControlsAccess(false); - } - else if (tempProfileFileInMemory != null) - { + } else if (tempProfileFileInMemory != null) { //UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Clear); - MainSaveFileProfileData = new SaveFileProfileData(); + MainSaveFileProfileData = new SaveFileProfileData(SelectedGame); MainSaveFileProfileData.ProcessData(tempProfileFileInMemory); } } @@ -835,15 +701,12 @@ private void LoadProfileDataFile(string SiiProfilePath) tempProfileFileInMemory = null; //clearmemory } - private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) - { + private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { toolStripProgressBarMain.Value = e.ProgressPercentage; } - void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - if (e.Cancelled == true) - { + void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { + if (e.Cancelled == true) { SetDefaultValues(false); ToggleMainControlsAccess(true); ToggleControlsAccess(false); @@ -853,8 +716,14 @@ void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) return; } - if (SiiNunitData.UnidentifiedBlocks.Count > 0) - { + if (SiiNunitData is null) { + MessageBox.Show("SiiNunitData is null!", "?", MessageBoxButtons.OK, MessageBoxIcon.Error); + if (Globals.SupportedGames.Get("ETS2").Installed) radioButtonMainGameSwitchETS.Enabled = true; + if (Globals.SupportedGames.Get("ATS").Installed) radioButtonMainGameSwitchATS.Enabled = true; + return; + } + + if (SiiNunitData.UnidentifiedBlocks.Count > 0) { MessageBox.Show("Some of the blocks in save file was not recognized and it may affect Program behavior." + Environment.NewLine + Environment.NewLine + "Please contact Developer via e-mail <" + Utilities.Web_Utilities.External.linkMailDeveloper + ">" + Environment.NewLine + Environment.NewLine + "Information can be found in error.log file.", @@ -880,14 +749,12 @@ void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) GC.WaitForPendingFinalizers(); } - void workerWrite_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - if (e.Error != null) - { + void workerWrite_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { + if (e.Error != null) { ToggleMainControlsAccess(true); ToggleControlsAccess(true); - IO_Utilities.ErrorLogWriter("Error during Writing save file" + Environment.NewLine + e.Error.Message + Environment.NewLine + e.Error.StackTrace); + IO_Utilities.ErrorLogWriter("Error during Writing save file" + Environment.NewLine + e.Error.Message + Environment.NewLine + e.Error.StackTrace); MessageBox.Show("Something went wrong during Writing Save file", "Error during Writing save file", MessageBoxButtons.OK, MessageBoxIcon.Error); return; @@ -909,10 +776,8 @@ void workerWrite_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e } - private void PrintAddedJobs() - { - foreach (JobAdded tempJobData in AddedJobsList) - { + private void PrintAddedJobs() { + foreach (JobAdded tempJobData in AddedJobsList) { string SourceCityName = CitiesList.Find(x => x.CityName == tempJobData.SourceCity).CityNameTranslated; string SourceCompanyName = tempJobData.SourceCompany; CompaniesLngDict.TryGetValue(SourceCompanyName, out SourceCompanyName); @@ -950,8 +815,7 @@ private void PrintAddedJobs() jobdata += "in " + tempJobData.CompanyTruck; jobdata += "\r\nJob valid for " + (tempJobData.ExpirationTime - SiiNunitData.Economy.game_time) + " minutes"; - if (tempJobData.Ferrytime > 0 || tempJobData.Ferryprice > 0) - { + if (tempJobData.Ferrytime > 0 || tempJobData.Ferryprice > 0) { jobdata += "\r\nExtra time on ferry - " + tempJobData.Ferrytime; jobdata += "and it will cost " + tempJobData.Ferryprice; } @@ -965,21 +829,17 @@ private void PrintAddedJobs() } //button_save_file - private void NewWrireSaveFile(object sender, DoWorkEventArgs e) - { + private void NewWrireSaveFile(object sender, DoWorkEventArgs e) { string ProfileFolderPath = Globals.SelectedProfilePath + "\\profile.sii"; string SiiInfoPath = Globals.SelectedSavePath + "\\info.sii"; string SiiSavePath = Globals.SelectedSavePath + "\\game.sii"; UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_saving_file"); - if (File.GetLastWriteTime(SiiSavePath) > LastModifiedTimestamp) - { + if (File.GetLastWriteTime(SiiSavePath) > LastModifiedTimestamp) { UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Error, "error_file_was_modified"); IO_Utilities.LogWriter("Save game was modified - reload file to prevent progress loss"); - } - else - { + } else { //Prepare PrepareEvents(); @@ -1005,45 +865,38 @@ private void NewWrireSaveFile(object sender, DoWorkEventArgs e) //Write Profile data if (MainSaveFileProfileData.isEdited) - using (StreamWriter writer = new StreamWriter(ProfileFolderPath, false)) - { + using (StreamWriter writer = new StreamWriter(ProfileFolderPath, false)) { writer.Write(MainSaveFileProfileData.PrintOut()); } //Write Info data if (MainSaveFileInfoData.isEdited) - using (StreamWriter writer = new StreamWriter(SiiInfoPath, false)) - { + using (StreamWriter writer = new StreamWriter(SiiInfoPath, false)) { writer.Write(MainSaveFileInfoData.PrintOut()); } //Write Save data - using (StreamWriter writer = new StreamWriter(SiiSavePath, false)) - { + using (StreamWriter writer = new StreamWriter(SiiSavePath, false)) { writer.Write(SiiNunitData.PrintOut(MainSaveFileInfoData.Version)); } - UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_file_saved"); + UpdateStatusBarMessage.ShowStatusMessage(SMStatus.Info, "message_file_saved"); } } - private void GetTranslationFiles() - { - if (Directory.Exists(Directory.GetCurrentDirectory() + @"\lang")) - { - string[] langfolders = Directory.GetDirectories(Directory.GetCurrentDirectory() + @"\lang","??-??", SearchOption.TopDirectoryOnly); + private void GetTranslationFiles() { + if (Directory.Exists(Directory.GetCurrentDirectory() + @"\lang")) { + string[] langfolders = Directory.GetDirectories(Directory.GetCurrentDirectory() + @"\lang", "??-??", SearchOption.TopDirectoryOnly); string langTag; string flagpath; ArrayList tempTS_AList = new ArrayList(); - foreach (string folder in langfolders) - { + foreach (string folder in langfolders) { string lngfile = folder + @"\lngfile.txt"; - if (File.Exists(lngfile)) - { + if (File.Exists(lngfile)) { langTag = File.ReadAllLines(lngfile, Encoding.UTF8)[0].Split(new char[] { '[', ']' })[1]; //check @@ -1068,8 +921,7 @@ private void GetTranslationFiles() flagpath = folder + @"\flag.png"; - if (File.Exists(flagpath)) - { + if (File.Exists(flagpath)) { TSitem.Image = new Bitmap(flagpath); TSitem.ImageScaling = ToolStripItemImageScaling.None; } @@ -1081,13 +933,10 @@ private void GetTranslationFiles() IComparer myComparer = new TSSETtoolstripLanguage(); tempTS_AList.Sort(myComparer); - foreach (ToolStripItem TSitem in tempTS_AList) - { + foreach (ToolStripItem TSitem in tempTS_AList) { toolStripMenuItemLanguage.DropDownItems.Add(TSitem); } - } - else - { + } else { Directory.CreateDirectory(Directory.GetCurrentDirectory() + @"\lang"); } @@ -1104,10 +953,8 @@ private void GetTranslationFiles() toolStripMenuItemLanguage.DropDownItems.Insert(1, new ToolStripSeparator()); } - public class TSSETtoolstripLanguage : IComparer - { - int IComparer.Compare(Object x, Object y) - { + public class TSSETtoolstripLanguage : IComparer { + int IComparer.Compare(Object x, Object y) { ToolStripItem oItem1 = x as ToolStripItem; ToolStripItem oItem2 = y as ToolStripItem; @@ -1116,38 +963,30 @@ int IComparer.Compare(Object x, Object y) } //Caching - private void CacheGameData() - { + private void CacheGameData() { generalWorker = new BackgroundWorker(); generalWorker.WorkerReportsProgress = false; generalWorker.DoWork += CacheExternalGameData; generalWorker.RunWorkerAsync(); } - private void CacheExternalGameData(object sender, DoWorkEventArgs e) - { - if (Directory.Exists(Directory.GetCurrentDirectory() + @"\gameref")) - { + private void CacheExternalGameData(object sender, DoWorkEventArgs e) { + if (Directory.Exists(Directory.GetCurrentDirectory() + @"\gameref")) { string[] gameFolders = { "ETS2", "ATS" }; - foreach (string gamename in gameFolders) - { + foreach (string gamename in gameFolders) { string gamefolder = Directory.GetCurrentDirectory() + @"\gameref\" + gamename; - if (Directory.Exists(gamefolder)) - { + if (Directory.Exists(gamefolder)) { string[] dlcFolders = Directory.GetDirectories(gamefolder); - foreach (string dlcFolder in dlcFolders) - { + foreach (string dlcFolder in dlcFolders) { string dbfilepath = Directory.GetCurrentDirectory() + @"\gameref\cache\" + gamename + "\\" + new DirectoryInfo(dlcFolder).Name + ".sdf"; - if (!File.Exists(dbfilepath) || (new FileInfo(dbfilepath).LastWriteTime < new FileInfo(dlcFolder).LastWriteTime)) - { + if (!File.Exists(dbfilepath) || (new FileInfo(dbfilepath).LastWriteTime < new FileInfo(dlcFolder).LastWriteTime)) { string cargoFolder = dlcFolder + @"\def\cargo"; //Scan cargo files - if (Directory.Exists(cargoFolder)) - { + if (Directory.Exists(cargoFolder)) { if (!File.Exists(dbfilepath)) ExtDataCreateDatabase(dbfilepath); @@ -1155,65 +994,52 @@ private void CacheExternalGameData(object sender, DoWorkEventArgs e) List tExtCargoList = new List(); - foreach (string cargo in cargoFiles) - { + foreach (string cargo in cargoFiles) { ExtCargo tempExtCargo = null; string[] tempCargoFile = File.ReadAllLines(cargo); - foreach (string line in tempCargoFile) - { - if (line.StartsWith("cargo_data:")) - { + foreach (string line in tempCargoFile) { + if (line.StartsWith("cargo_data:")) { tempExtCargo = new ExtCargo(line.Split(new char[] { '.' })[1]); continue; } - if (line.StartsWith(" fragility:")) - { + if (line.StartsWith(" fragility:")) { tempExtCargo.Fragility = decimal.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty), CultureInfo.InvariantCulture); continue; } - if (line.StartsWith(" adr_class:")) - { + if (line.StartsWith(" adr_class:")) { tempExtCargo.ADRclass = int.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty)); continue; } - if (line.StartsWith(" mass:")) - { + if (line.StartsWith(" mass:")) { tempExtCargo.Mass = decimal.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty), CultureInfo.InvariantCulture); continue; } - if (line.StartsWith(" unit_reward_per_km:")) - { + if (line.StartsWith(" unit_reward_per_km:")) { tempExtCargo.UnitRewardpPerKM = decimal.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty), CultureInfo.InvariantCulture); continue; } - if (line.StartsWith(" group[]:")) - { + if (line.StartsWith(" group[]:")) { tempExtCargo.Groups.Add(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty)); continue; } - if (line.StartsWith(" body_types[]:")) - { + if (line.StartsWith(" body_types[]:")) { tempExtCargo.BodyTypes.Add(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty)); continue; } - if (line.StartsWith(" maximum_distance:")) - { + if (line.StartsWith(" maximum_distance:")) { tempExtCargo.MaxDistance = int.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty)); continue; } - if (line.StartsWith(" volume:")) - { + if (line.StartsWith(" volume:")) { tempExtCargo.Volume = decimal.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty), CultureInfo.InvariantCulture); continue; } - if (line.StartsWith(" valuable:")) - { + if (line.StartsWith(" valuable:")) { tempExtCargo.Valuable = bool.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty)); continue; } - if (line.StartsWith(" overweight:")) - { + if (line.StartsWith(" overweight:")) { tempExtCargo.Overweight = bool.Parse(line.Split(new char[] { ':' })[1].Replace(" ", String.Empty)); continue; } @@ -1229,61 +1055,53 @@ private void CacheExternalGameData(object sender, DoWorkEventArgs e) string gcompanyFolder = dlcFolder + @"\def\company"; //Scan cargo files - if (Directory.Exists(gcompanyFolder)) - { + if (Directory.Exists(gcompanyFolder)) { if (!File.Exists(dbfilepath)) ExtDataCreateDatabase(dbfilepath); string[] companyFolders = Directory.GetDirectories(gcompanyFolder); - - List tempExternalCompanies = new List(); - companyFolders.AsParallel().ForAll(companyFolder => - { - if (Directory.Exists(companyFolder + @"\out")) - { - string company = companyFolder.Split(new string[] { "\\" }, StringSplitOptions.None).Last(); + List tempExternalCompanies = new List(); - string[] cargoes = Directory.GetFiles(companyFolder + @"\out", "*.sii"); - List tempOutCargo = new List(); + companyFolders.AsParallel().ForAll(companyFolder => { + if (Directory.Exists(companyFolder + @"\out")) { + string company = companyFolder.Split(new string[] { "\\" }, StringSplitOptions.None).Last(); - foreach (string cargo in cargoes) - { - string tempcargo = cargo.Split(new string[] { "\\" }, StringSplitOptions.None).Last().Split(new char[] { '.' })[0]; + string[] cargoes = Directory.GetFiles(companyFolder + @"\out", "*.sii"); + List tempOutCargo = new List(); - tempOutCargo.Add(tempcargo); - } + foreach (string cargo in cargoes) { + string tempcargo = cargo.Split(new string[] { "\\" }, StringSplitOptions.None).Last().Split(new char[] { '.' })[0]; - if (!tempExternalCompanies.Exists(x => x.CompanyName == company)) - { - tempExternalCompanies.Add(new ExtCompany(company)); - } + tempOutCargo.Add(tempcargo); + } - tempExternalCompanies.Find(x => x.CompanyName == company).AddCargoOut(tempOutCargo); + if (!tempExternalCompanies.Exists(x => x.CompanyName == company)) { + tempExternalCompanies.Add(new ExtCompany(company)); } - if (Directory.Exists(companyFolder + @"\in")) - { - string company = companyFolder.Split(new string[] { "\\" }, StringSplitOptions.None).Last(); + tempExternalCompanies.Find(x => x.CompanyName == company).AddCargoOut(tempOutCargo); + } - string[] cargoes = Directory.GetFiles(companyFolder + @"\in", "*.sii"); - List tempInCargo = new List(); + if (Directory.Exists(companyFolder + @"\in")) { + string company = companyFolder.Split(new string[] { "\\" }, StringSplitOptions.None).Last(); - foreach (string cargo in cargoes) - { - string tempcargo = cargo.Split(new string[] { "\\" }, StringSplitOptions.None).Last().Split(new char[] { '.' })[0]; + string[] cargoes = Directory.GetFiles(companyFolder + @"\in", "*.sii"); + List tempInCargo = new List(); - tempInCargo.Add(tempcargo); - } + foreach (string cargo in cargoes) { + string tempcargo = cargo.Split(new string[] { "\\" }, StringSplitOptions.None).Last().Split(new char[] { '.' })[0]; - if (!tempExternalCompanies.Exists(x => x.CompanyName == company)) - { - tempExternalCompanies.Add(new ExtCompany(company)); - } + tempInCargo.Add(tempcargo); + } - tempExternalCompanies.Find(x => x.CompanyName == company).AddCargoIn(tempInCargo); + if (!tempExternalCompanies.Exists(x => x.CompanyName == company)) { + tempExternalCompanies.Add(new ExtCompany(company)); } + + tempExternalCompanies.Find(x => x.CompanyName == company).AddCargoIn(tempInCargo); } + } ); ExtDataInsertDataIntoDatabase(dbfilepath, "CompaniesTable", tempExternalCompanies); @@ -1293,12 +1111,10 @@ private void CacheExternalGameData(object sender, DoWorkEventArgs e) } } } - } - else - { + } else { Directory.CreateDirectory(Directory.GetCurrentDirectory() + @"\gameref"); } } - + } } \ No newline at end of file diff --git a/TS SE Tool/Program.cs b/TS SE Tool/Program.cs index 96415140..e9eed394 100644 --- a/TS SE Tool/Program.cs +++ b/TS SE Tool/Program.cs @@ -23,16 +23,15 @@ limitations under the License. using TS_SE_Tool.Utilities; using System.Configuration; -namespace TS_SE_Tool -{ - static class Program - { +namespace TS_SE_Tool { + static class Program { + internal static string ErrorHeader = $"An application error occurred. Please contact the Developer at {Web_Utilities.External.linkMailDeveloper}. Information can be found in \"{System.IO.Directory.GetCurrentDirectory()}\\errorlog.log\"."; + /// /// The main entry point for the application. /// [STAThread] - static void Main() - { + static void Main() { // Add the event handler for handling UI thread exceptions to the event Application.ThreadException += new ThreadExceptionEventHandler(UIThreadException); @@ -55,27 +54,20 @@ static void Main() // Handle the UI exceptions by showing a dialog box, and asking the user whether // or not they wish to abort execution. - private static void UIThreadException(object sender, ThreadExceptionEventArgs t) - { + private static void UIThreadException(object sender, ThreadExceptionEventArgs t) { DialogResult result = DialogResult.Cancel; - try - { + try { Exception ex = t.Exception; - string errorMsg = "An application error occurred. Please contact the Developer at " + Utilities.Web_Utilities.External.linkMailDeveloper + " . Information can be found in \" Errorlog \" file."; + string errorMsg = ErrorHeader; IO_Utilities.ErrorLogWriter(ex.Message + "\n\nStack Trace:\n" + ex.StackTrace); result = MessageBox.Show(errorMsg, "Windows Forms Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); - } - catch - { - try - { + } catch { + try { MessageBox.Show("Fatal Windows Forms Error", "Fatal Windows Forms Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop); - } - finally - { + } finally { Application.Exit(); } } @@ -89,27 +81,20 @@ private static void UIThreadException(object sender, ThreadExceptionEventArgs t) // or not they wish to abort execution. // NOTE: This exception cannot be kept from terminating the application - it can only // log the event, and inform the user about it. - private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - try - { + private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { + try { Exception ex = (Exception)e.ExceptionObject; - string errorMsg = "An application error occurred. Please contact the Developer at " + Utilities.Web_Utilities.External.linkMailDeveloper + " . Information can be found in \" Errorlog \" file."; + string errorMsg = ErrorHeader; MessageBox.Show(errorMsg, "Non-UI Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); IO_Utilities.ErrorLogWriter(ex.Message + "\n\nStack Trace:\n" + ex.StackTrace); - } - catch (Exception exc) - { - try - { - MessageBox.Show("Fatal Non-UI Error. Could not write the error to the event log.\r\nReason: " + } catch (Exception exc) { + try { + MessageBox.Show("Fatal Non-UI Error. Could not write the error to the event log.\r\nReason: " + exc.Message, "Fatal Non-UI Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); - } - finally - { + } finally { Application.Exit(); } } diff --git a/TS SE Tool/Properties/AssemblyInfo.cs b/TS SE Tool/Properties/AssemblyInfo.cs index c785cbd2..aa682b16 100644 --- a/TS SE Tool/Properties/AssemblyInfo.cs +++ b/TS SE Tool/Properties/AssemblyInfo.cs @@ -25,7 +25,7 @@ limitations under the License. [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("TS SE Tool")] -[assembly: AssemblyCopyright("Copyright © 2016 - 2023")] +[assembly: AssemblyCopyright("Copyright © 2016 - 2024")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -47,5 +47,5 @@ limitations under the License. // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.3.11.0")] -[assembly: AssemblyFileVersion("0.3.11.0")] +[assembly: AssemblyVersion("0.3.12.0")] +[assembly: AssemblyFileVersion("0.3.12.0")] diff --git a/TS SE Tool/Properties/DataSources/TS_SE_Tool.Global.EnumerableExt.datasource b/TS SE Tool/Properties/DataSources/TS_SE_Tool.Global.EnumerableExt.datasource new file mode 100644 index 00000000..b8555f58 --- /dev/null +++ b/TS SE Tool/Properties/DataSources/TS_SE_Tool.Global.EnumerableExt.datasource @@ -0,0 +1,10 @@ + + + + TS_SE_Tool.Global.EnumerableExt, TS SE Tool, Version=0.3.11.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/TS SE Tool/TS SE Tool.csproj b/TS SE Tool/TS SE Tool.csproj index 78f58fdb..3ab5fbae 100644 --- a/TS SE Tool/TS SE Tool.csproj +++ b/TS SE Tool/TS SE Tool.csproj @@ -9,6 +9,7 @@ TS_SE_Tool TS SE Tool v4.7.2 + 9 512 true true @@ -39,6 +40,7 @@ prompt 4 true + 9 AnyCPU @@ -50,6 +52,8 @@ 4 true false + Off + 9 TS_SE_Tool.Program @@ -60,19 +64,40 @@ ..\packages\ErikEJ.SqlCeBulkCopy.2.1.6.15\lib\net40\ErikEJ.SqlCe40.dll + False + + + ..\packages\FuzzySharp.2.0.2\lib\net461\FuzzySharp.dll + False ..\packages\SharpZipLib.1.4.2\lib\netstandard2.0\ICSharpCode.SharpZipLib.dll + False + + + + ..\packages\Microsoft.Bcl.AsyncInterfaces.9.0.0-preview.6.24327.7\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + False False False + + ..\packages\morelinq.4.3.0\lib\netstandard2.0\MoreLinq.dll + False + .\OpenPainter.ColorPicker.dll + False ..\packages\ErikEJ.SqlCeBulkCopy.2.1.6.15\lib\net40\Salient.Data.dll + False + + + ..\packages\Narod.SteamGameFinder.1.0.1\lib\net35\SteamGameFinder.dll + False False @@ -80,6 +105,7 @@ ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + False False @@ -102,7 +128,8 @@ False - ..\packages\Microsoft.SqlServer.Compact.4.0.8876.1\lib\net40\System.Data.SqlServerCe.dll + ..\packages\System.Data.SqlServerCe_unofficial.4.0.8482.1\lib\net20\System.Data.SqlServerCe.dll + False False @@ -117,8 +144,14 @@ False False + + + ..\packages\System.IO.Pipelines.9.0.0-preview.6.24327.7\lib\net462\System.IO.Pipelines.dll + False + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + False False @@ -126,12 +159,36 @@ ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + False - ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + False + + + + + ..\packages\System.Security.Cryptography.Pkcs.8.0.0\lib\net462\System.Security.Cryptography.Pkcs.dll + False + + + + ..\packages\System.Text.Encodings.Web.9.0.0-preview.6.24327.7\lib\net462\System.Text.Encodings.Web.dll + False + + + ..\packages\System.Text.Json.9.0.0-preview.6.24327.7\lib\net462\System.Text.Json.dll + False - ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + False + + + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + False False @@ -147,9 +204,13 @@ + + + + @@ -228,8 +289,10 @@ + + @@ -246,12 +309,27 @@ FormLicensePlateEdit.cs + + Form + + + FormModManager.cs + + + Form + + + FormPluginManager.cs + Form FormVehicleEditor.cs + + Form + Form @@ -401,6 +479,18 @@ FormLicensePlateEdit.cs + + FormModManager.cs + + + FormModManager.cs + + + FormPluginManager.cs + + + FormPluginManager.cs + FormVehicleEditor.cs @@ -459,6 +549,7 @@ Designer + SettingsSingleFileGenerator Settings.Designer.cs @@ -471,13 +562,22 @@ - - - - - - - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest @@ -496,12 +596,19 @@ - if not exist "$(TargetDir)libs\x86\" md "$(TargetDir)libs\x86\" -xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)libs\x86\" -if not exist "$(TargetDir)libs\amd64\" md "$(TargetDir)libs\amd64\" -xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)libs\amd64\" + \ No newline at end of file diff --git a/TS SE Tool/config.cfg b/TS SE Tool/config.cfg new file mode 100644 index 00000000..bf92e704 --- /dev/null +++ b/TS SE Tool/config.cfg @@ -0,0 +1,11 @@ +ProgramVersion=0.3.11.0 +Language=Default +ProposeRandom=False +JobPickupTime=72 +LoopEvery=0 +TimeMultiplier=1 +DistanceMes=km +WeightMes=kg +CurrencyMesETS2=EUR +CurrencyMesATS=EUR +LastUpdateCheck=133663163454432722 diff --git a/TS SE Tool/img/ATS/adr_1.dds b/TS SE Tool/img/ATS/adr_1.dds new file mode 100644 index 00000000..4e7743b4 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_1.dds differ diff --git a/TS SE Tool/img/ATS/adr_1_grey.dds b/TS SE Tool/img/ATS/adr_1_grey.dds new file mode 100644 index 00000000..801517af Binary files /dev/null and b/TS SE Tool/img/ATS/adr_1_grey.dds differ diff --git a/TS SE Tool/img/ATS/adr_2.dds b/TS SE Tool/img/ATS/adr_2.dds new file mode 100644 index 00000000..6e7be5d4 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_2.dds differ diff --git a/TS SE Tool/img/ATS/adr_21.dds b/TS SE Tool/img/ATS/adr_21.dds new file mode 100644 index 00000000..c2681146 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_21.dds differ diff --git a/TS SE Tool/img/ATS/adr_22.dds b/TS SE Tool/img/ATS/adr_22.dds new file mode 100644 index 00000000..aac6bbfe Binary files /dev/null and b/TS SE Tool/img/ATS/adr_22.dds differ diff --git a/TS SE Tool/img/ATS/adr_23.dds b/TS SE Tool/img/ATS/adr_23.dds new file mode 100644 index 00000000..f300c4f1 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_23.dds differ diff --git a/TS SE Tool/img/ATS/adr_2_grey.dds b/TS SE Tool/img/ATS/adr_2_grey.dds new file mode 100644 index 00000000..7713ee1e Binary files /dev/null and b/TS SE Tool/img/ATS/adr_2_grey.dds differ diff --git a/TS SE Tool/img/ATS/adr_3.dds b/TS SE Tool/img/ATS/adr_3.dds new file mode 100644 index 00000000..22a77da0 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_3.dds differ diff --git a/TS SE Tool/img/ATS/adr_3_grey.dds b/TS SE Tool/img/ATS/adr_3_grey.dds new file mode 100644 index 00000000..502c30a4 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_3_grey.dds differ diff --git a/TS SE Tool/img/ATS/adr_4.dds b/TS SE Tool/img/ATS/adr_4.dds new file mode 100644 index 00000000..6872feb0 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_4.dds differ diff --git a/TS SE Tool/img/ATS/adr_41.dds b/TS SE Tool/img/ATS/adr_41.dds new file mode 100644 index 00000000..3f02cf7b Binary files /dev/null and b/TS SE Tool/img/ATS/adr_41.dds differ diff --git a/TS SE Tool/img/ATS/adr_42.dds b/TS SE Tool/img/ATS/adr_42.dds new file mode 100644 index 00000000..92ec0c4a Binary files /dev/null and b/TS SE Tool/img/ATS/adr_42.dds differ diff --git a/TS SE Tool/img/ATS/adr_43.dds b/TS SE Tool/img/ATS/adr_43.dds new file mode 100644 index 00000000..56900e2f Binary files /dev/null and b/TS SE Tool/img/ATS/adr_43.dds differ diff --git a/TS SE Tool/img/ATS/adr_4_grey.dds b/TS SE Tool/img/ATS/adr_4_grey.dds new file mode 100644 index 00000000..b5b831ec Binary files /dev/null and b/TS SE Tool/img/ATS/adr_4_grey.dds differ diff --git a/TS SE Tool/img/ATS/adr_6.dds b/TS SE Tool/img/ATS/adr_6.dds new file mode 100644 index 00000000..97bb7e56 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_6.dds differ diff --git a/TS SE Tool/img/ATS/adr_61.dds b/TS SE Tool/img/ATS/adr_61.dds new file mode 100644 index 00000000..8f96efe1 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_61.dds differ diff --git a/TS SE Tool/img/ATS/adr_62.dds b/TS SE Tool/img/ATS/adr_62.dds new file mode 100644 index 00000000..25f18a4c Binary files /dev/null and b/TS SE Tool/img/ATS/adr_62.dds differ diff --git a/TS SE Tool/img/ATS/adr_6_grey.dds b/TS SE Tool/img/ATS/adr_6_grey.dds new file mode 100644 index 00000000..e20dba55 Binary files /dev/null and b/TS SE Tool/img/ATS/adr_6_grey.dds differ diff --git a/TS SE Tool/img/ATS/adr_8.dds b/TS SE Tool/img/ATS/adr_8.dds new file mode 100644 index 00000000..2b665dbc Binary files /dev/null and b/TS SE Tool/img/ATS/adr_8.dds differ diff --git a/TS SE Tool/img/ATS/adr_8_grey.dds b/TS SE Tool/img/ATS/adr_8_grey.dds new file mode 100644 index 00000000..d502ec1c Binary files /dev/null and b/TS SE Tool/img/ATS/adr_8_grey.dds differ diff --git a/TS SE Tool/img/ATS/autosave.dds b/TS SE Tool/img/ATS/autosave.dds new file mode 100644 index 00000000..ff037728 Binary files /dev/null and b/TS SE Tool/img/ATS/autosave.dds differ diff --git a/TS SE Tool/img/ATS/base.dds b/TS SE Tool/img/ATS/base.dds new file mode 100644 index 00000000..2bd5de5d Binary files /dev/null and b/TS SE Tool/img/ATS/base.dds differ diff --git a/TS SE Tool/img/ATS/cabin.dds b/TS SE Tool/img/ATS/cabin.dds new file mode 100644 index 00000000..309439c4 Binary files /dev/null and b/TS SE Tool/img/ATS/cabin.dds differ diff --git a/TS SE Tool/img/ATS/cargo.dds b/TS SE Tool/img/ATS/cargo.dds new file mode 100644 index 00000000..edcfc356 Binary files /dev/null and b/TS SE Tool/img/ATS/cargo.dds differ diff --git a/TS SE Tool/img/ATS/chassis.dds b/TS SE Tool/img/ATS/chassis.dds new file mode 100644 index 00000000..0b5e0c67 Binary files /dev/null and b/TS SE Tool/img/ATS/chassis.dds differ diff --git a/TS SE Tool/img/ATS/companies/42print.dds b/TS SE Tool/img/ATS/companies/42print.dds new file mode 100644 index 00000000..acd5d6cb Binary files /dev/null and b/TS SE Tool/img/ATS/companies/42print.dds differ diff --git a/TS SE Tool/img/ATS/companies/aport_abq.dds b/TS SE Tool/img/ATS/companies/aport_abq.dds new file mode 100644 index 00000000..4829f6e2 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/aport_abq.dds differ diff --git a/TS SE Tool/img/ATS/companies/aport_pcc.dds b/TS SE Tool/img/ATS/companies/aport_pcc.dds new file mode 100644 index 00000000..657f5b40 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/aport_pcc.dds differ diff --git a/TS SE Tool/img/ATS/companies/avs_met_scr.dds b/TS SE Tool/img/ATS/companies/avs_met_scr.dds new file mode 100644 index 00000000..693a826b Binary files /dev/null and b/TS SE Tool/img/ATS/companies/avs_met_scr.dds differ diff --git a/TS SE Tool/img/ATS/companies/bitumen.dds b/TS SE Tool/img/ATS/companies/bitumen.dds new file mode 100644 index 00000000..41763af1 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/bitumen.dds differ diff --git a/TS SE Tool/img/ATS/companies/bushnell_farm.dds b/TS SE Tool/img/ATS/companies/bushnell_farm.dds new file mode 100644 index 00000000..afc6ad49 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/bushnell_farm.dds differ diff --git a/TS SE Tool/img/ATS/companies/charged.dds b/TS SE Tool/img/ATS/companies/charged.dds new file mode 100644 index 00000000..2a3d4fcd Binary files /dev/null and b/TS SE Tool/img/ATS/companies/charged.dds differ diff --git a/TS SE Tool/img/ATS/companies/chemso.dds b/TS SE Tool/img/ATS/companies/chemso.dds new file mode 100644 index 00000000..2aeee866 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/chemso.dds differ diff --git a/TS SE Tool/img/ATS/companies/coastline_mining.dds b/TS SE Tool/img/ATS/companies/coastline_mining.dds new file mode 100644 index 00000000..b07bb665 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/coastline_mining.dds differ diff --git a/TS SE Tool/img/ATS/companies/darchelle_uzau.dds b/TS SE Tool/img/ATS/companies/darchelle_uzau.dds new file mode 100644 index 00000000..7b531ac8 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/darchelle_uzau.dds differ diff --git a/TS SE Tool/img/ATS/companies/dc_car_dlr.dds b/TS SE Tool/img/ATS/companies/dc_car_dlr.dds new file mode 100644 index 00000000..58134925 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/dc_car_dlr.dds differ diff --git a/TS SE Tool/img/ATS/companies/dg_wd.dds b/TS SE Tool/img/ATS/companies/dg_wd.dds new file mode 100644 index 00000000..7924bd93 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/dg_wd.dds differ diff --git a/TS SE Tool/img/ATS/companies/dmc_car_dlr.dds b/TS SE Tool/img/ATS/companies/dmc_car_dlr.dds new file mode 100644 index 00000000..3dfb426d Binary files /dev/null and b/TS SE Tool/img/ATS/companies/dmc_car_dlr.dds differ diff --git a/TS SE Tool/img/ATS/companies/dw_air_pln.dds b/TS SE Tool/img/ATS/companies/dw_air_pln.dds new file mode 100644 index 00000000..dc9d31b8 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/dw_air_pln.dds differ diff --git a/TS SE Tool/img/ATS/companies/eddys_food.dds b/TS SE Tool/img/ATS/companies/eddys_food.dds new file mode 100644 index 00000000..0209e54b Binary files /dev/null and b/TS SE Tool/img/ATS/companies/eddys_food.dds differ diff --git a/TS SE Tool/img/ATS/companies/farmers_barn.dds b/TS SE Tool/img/ATS/companies/farmers_barn.dds new file mode 100644 index 00000000..487e5fa4 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/farmers_barn.dds differ diff --git a/TS SE Tool/img/ATS/companies/ftf_food_pln.dds b/TS SE Tool/img/ATS/companies/ftf_food_pln.dds new file mode 100644 index 00000000..cb46ac6b Binary files /dev/null and b/TS SE Tool/img/ATS/companies/ftf_food_pln.dds differ diff --git a/TS SE Tool/img/ATS/companies/gallon_oil.dds b/TS SE Tool/img/ATS/companies/gallon_oil.dds new file mode 100644 index 00000000..0b58efdf Binary files /dev/null and b/TS SE Tool/img/ATS/companies/gallon_oil.dds differ diff --git a/TS SE Tool/img/ATS/companies/glass.dds b/TS SE Tool/img/ATS/companies/glass.dds new file mode 100644 index 00000000..554e4c1a Binary files /dev/null and b/TS SE Tool/img/ATS/companies/glass.dds differ diff --git a/TS SE Tool/img/ATS/companies/gm_food_plnt.dds b/TS SE Tool/img/ATS/companies/gm_food_plnt.dds new file mode 100644 index 00000000..6e0fa0f4 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/gm_food_plnt.dds differ diff --git a/TS SE Tool/img/ATS/companies/hds_met_shp.dds b/TS SE Tool/img/ATS/companies/hds_met_shp.dds new file mode 100644 index 00000000..635a2d7e Binary files /dev/null and b/TS SE Tool/img/ATS/companies/hds_met_shp.dds differ diff --git a/TS SE Tool/img/ATS/companies/hf_wd_pln.dds b/TS SE Tool/img/ATS/companies/hf_wd_pln.dds new file mode 100644 index 00000000..64f03ee4 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/hf_wd_pln.dds differ diff --git a/TS SE Tool/img/ATS/companies/hms_service.dds b/TS SE Tool/img/ATS/companies/hms_service.dds new file mode 100644 index 00000000..8f0d9723 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/hms_service.dds differ diff --git a/TS SE Tool/img/ATS/companies/hs.dds b/TS SE Tool/img/ATS/companies/hs.dds new file mode 100644 index 00000000..34351545 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/hs.dds differ diff --git a/TS SE Tool/img/ATS/companies/kw_trk_pln.dds b/TS SE Tool/img/ATS/companies/kw_trk_pln.dds new file mode 100644 index 00000000..209d1257 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/kw_trk_pln.dds differ diff --git a/TS SE Tool/img/ATS/companies/lumber_jill.dds b/TS SE Tool/img/ATS/companies/lumber_jill.dds new file mode 100644 index 00000000..dd472e52 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/lumber_jill.dds differ diff --git a/TS SE Tool/img/ATS/companies/mcs_con_sit.dds b/TS SE Tool/img/ATS/companies/mcs_con_sit.dds new file mode 100644 index 00000000..d259a95f Binary files /dev/null and b/TS SE Tool/img/ATS/companies/mcs_con_sit.dds differ diff --git a/TS SE Tool/img/ATS/companies/oak_port.dds b/TS SE Tool/img/ATS/companies/oak_port.dds new file mode 100644 index 00000000..90829d64 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/oak_port.dds differ diff --git a/TS SE Tool/img/ATS/companies/oh_con_hom.dds b/TS SE Tool/img/ATS/companies/oh_con_hom.dds new file mode 100644 index 00000000..f26eb9e9 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/oh_con_hom.dds differ diff --git a/TS SE Tool/img/ATS/companies/phoenix_freight.dds b/TS SE Tool/img/ATS/companies/phoenix_freight.dds new file mode 100644 index 00000000..346781d9 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/phoenix_freight.dds differ diff --git a/TS SE Tool/img/ATS/companies/plaster_n_son.dds b/TS SE Tool/img/ATS/companies/plaster_n_son.dds new file mode 100644 index 00000000..89ab5043 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/plaster_n_son.dds differ diff --git a/TS SE Tool/img/ATS/companies/pnp_wd_pln.dds b/TS SE Tool/img/ATS/companies/pnp_wd_pln.dds new file mode 100644 index 00000000..d245b3b9 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/pnp_wd_pln.dds differ diff --git a/TS SE Tool/img/ATS/companies/port_sea.dds b/TS SE Tool/img/ATS/companies/port_sea.dds new file mode 100644 index 00000000..59e0260d Binary files /dev/null and b/TS SE Tool/img/ATS/companies/port_sea.dds differ diff --git a/TS SE Tool/img/ATS/companies/port_tac.dds b/TS SE Tool/img/ATS/companies/port_tac.dds new file mode 100644 index 00000000..60ed004c Binary files /dev/null and b/TS SE Tool/img/ATS/companies/port_tac.dds differ diff --git a/TS SE Tool/img/ATS/companies/re_train.dds b/TS SE Tool/img/ATS/companies/re_train.dds new file mode 100644 index 00000000..3c199ae3 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/re_train.dds differ diff --git a/TS SE Tool/img/ATS/companies/sellgoods.dds b/TS SE Tool/img/ATS/companies/sellgoods.dds new file mode 100644 index 00000000..3ceb78f2 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/sellgoods.dds differ diff --git a/TS SE Tool/img/ATS/companies/sf_port.dds b/TS SE Tool/img/ATS/companies/sf_port.dds new file mode 100644 index 00000000..ba0698f9 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/sf_port.dds differ diff --git a/TS SE Tool/img/ATS/companies/sh_shp_pln.dds b/TS SE Tool/img/ATS/companies/sh_shp_pln.dds new file mode 100644 index 00000000..ca4b4981 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/sh_shp_pln.dds differ diff --git a/TS SE Tool/img/ATS/companies/st_met.dds b/TS SE Tool/img/ATS/companies/st_met.dds new file mode 100644 index 00000000..5d97f999 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/st_met.dds differ diff --git a/TS SE Tool/img/ATS/companies/sunshine.dds b/TS SE Tool/img/ATS/companies/sunshine.dds new file mode 100644 index 00000000..3573f763 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/sunshine.dds differ diff --git a/TS SE Tool/img/ATS/companies/tidbit.dds b/TS SE Tool/img/ATS/companies/tidbit.dds new file mode 100644 index 00000000..dc838701 Binary files /dev/null and b/TS SE Tool/img/ATS/companies/tidbit.dds differ diff --git a/TS SE Tool/img/ATS/companies/voltison.dds b/TS SE Tool/img/ATS/companies/voltison.dds new file mode 100644 index 00000000..d6678e3c Binary files /dev/null and b/TS SE Tool/img/ATS/companies/voltison.dds differ diff --git a/TS SE Tool/img/ATS/companies/walbert.dds b/TS SE Tool/img/ATS/companies/walbert.dds new file mode 100644 index 00000000..a69b7d3f Binary files /dev/null and b/TS SE Tool/img/ATS/companies/walbert.dds differ diff --git a/TS SE Tool/img/ATS/engine.dds b/TS SE Tool/img/ATS/engine.dds new file mode 100644 index 00000000..9202b94c Binary files /dev/null and b/TS SE Tool/img/ATS/engine.dds differ diff --git a/TS SE Tool/img/ATS/game_n.dds b/TS SE Tool/img/ATS/game_n.dds new file mode 100644 index 00000000..d74ea97b Binary files /dev/null and b/TS SE Tool/img/ATS/game_n.dds differ diff --git a/TS SE Tool/img/ATS/lp/arizona/front.dds b/TS SE Tool/img/ATS/lp/arizona/front.dds new file mode 100644 index 00000000..3b3613f9 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/arizona/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/arizona/front.mat b/TS SE Tool/img/ATS/lp/arizona/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/arizona/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/arizona/front.tobj b/TS SE Tool/img/ATS/lp/arizona/front.tobj new file mode 100644 index 00000000..156f3f7a Binary files /dev/null and b/TS SE Tool/img/ATS/lp/arizona/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/arizona/rear.mat b/TS SE Tool/img/ATS/lp/arizona/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/arizona/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/arizona/trailer.mat b/TS SE Tool/img/ATS/lp/arizona/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/arizona/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/arizona/truck_front.dds b/TS SE Tool/img/ATS/lp/arizona/truck_front.dds new file mode 100644 index 00000000..ae078a0a Binary files /dev/null and b/TS SE Tool/img/ATS/lp/arizona/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/arizona/truck_front.mat b/TS SE Tool/img/ATS/lp/arizona/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/arizona/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/arizona/truck_front.tobj b/TS SE Tool/img/ATS/lp/arizona/truck_front.tobj new file mode 100644 index 00000000..c9fa199b Binary files /dev/null and b/TS SE Tool/img/ATS/lp/arizona/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/arizona/truck_rear.mat b/TS SE Tool/img/ATS/lp/arizona/truck_rear.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/arizona/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/front.dds b/TS SE Tool/img/ATS/lp/california/front.dds new file mode 100644 index 00000000..990c5a75 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/california/front.mat b/TS SE Tool/img/ATS/lp/california/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/front.tobj b/TS SE Tool/img/ATS/lp/california/front.tobj new file mode 100644 index 00000000..d7f0a477 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/california/police_front.dds b/TS SE Tool/img/ATS/lp/california/police_front.dds new file mode 100644 index 00000000..99bcfd5a Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/police_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/california/police_front.mat b/TS SE Tool/img/ATS/lp/california/police_front.mat new file mode 100644 index 00000000..8b49da99 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/police_front.tobj b/TS SE Tool/img/ATS/lp/california/police_front.tobj new file mode 100644 index 00000000..9c7cac97 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/police_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/california/police_rear.mat b/TS SE Tool/img/ATS/lp/california/police_rear.mat new file mode 100644 index 00000000..8b49da99 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/rear.mat b/TS SE Tool/img/ATS/lp/california/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/trailer.dds b/TS SE Tool/img/ATS/lp/california/trailer.dds new file mode 100644 index 00000000..328c42d6 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/trailer.dds differ diff --git a/TS SE Tool/img/ATS/lp/california/trailer.mat b/TS SE Tool/img/ATS/lp/california/trailer.mat new file mode 100644 index 00000000..69c6f11c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "trailer.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/trailer.tobj b/TS SE Tool/img/ATS/lp/california/trailer.tobj new file mode 100644 index 00000000..9eef7b1b Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/trailer.tobj differ diff --git a/TS SE Tool/img/ATS/lp/california/truck_front.dds b/TS SE Tool/img/ATS/lp/california/truck_front.dds new file mode 100644 index 00000000..e65609f7 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/california/truck_front.mat b/TS SE Tool/img/ATS/lp/california/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/california/truck_front.tobj b/TS SE Tool/img/ATS/lp/california/truck_front.tobj new file mode 100644 index 00000000..86940546 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/california/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/california/truck_rear.mat b/TS SE Tool/img/ATS/lp/california/truck_rear.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/california/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/front.dds b/TS SE Tool/img/ATS/lp/idaho/front.dds new file mode 100644 index 00000000..fc62300f Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/idaho/front.mat b/TS SE Tool/img/ATS/lp/idaho/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/idaho/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/front.tobj b/TS SE Tool/img/ATS/lp/idaho/front.tobj new file mode 100644 index 00000000..8963ed3c Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/idaho/police.dds b/TS SE Tool/img/ATS/lp/idaho/police.dds new file mode 100644 index 00000000..4cc4be7d Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/police.dds differ diff --git a/TS SE Tool/img/ATS/lp/idaho/police.mat b/TS SE Tool/img/ATS/lp/idaho/police.mat new file mode 100644 index 00000000..a71f5d43 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/idaho/police.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/police.tobj b/TS SE Tool/img/ATS/lp/idaho/police.tobj new file mode 100644 index 00000000..5857440b Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/police.tobj differ diff --git a/TS SE Tool/img/ATS/lp/idaho/rear.dds b/TS SE Tool/img/ATS/lp/idaho/rear.dds new file mode 100644 index 00000000..5ac6aa3f Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/rear.dds differ diff --git a/TS SE Tool/img/ATS/lp/idaho/rear.mat b/TS SE Tool/img/ATS/lp/idaho/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/idaho/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/rear.tobj b/TS SE Tool/img/ATS/lp/idaho/rear.tobj new file mode 100644 index 00000000..037aef75 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/rear.tobj differ diff --git a/TS SE Tool/img/ATS/lp/idaho/trailer.dds b/TS SE Tool/img/ATS/lp/idaho/trailer.dds new file mode 100644 index 00000000..b9bd6087 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/trailer.dds differ diff --git a/TS SE Tool/img/ATS/lp/idaho/trailer.mat b/TS SE Tool/img/ATS/lp/idaho/trailer.mat new file mode 100644 index 00000000..69c6f11c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/idaho/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "trailer.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/trailer.tobj b/TS SE Tool/img/ATS/lp/idaho/trailer.tobj new file mode 100644 index 00000000..691b32ab Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/trailer.tobj differ diff --git a/TS SE Tool/img/ATS/lp/idaho/truck_front.dds b/TS SE Tool/img/ATS/lp/idaho/truck_front.dds new file mode 100644 index 00000000..445904ab Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/idaho/truck_front.mat b/TS SE Tool/img/ATS/lp/idaho/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/idaho/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/truck_front.tobj b/TS SE Tool/img/ATS/lp/idaho/truck_front.tobj new file mode 100644 index 00000000..7e6dc9f9 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/idaho/truck_rear.dds b/TS SE Tool/img/ATS/lp/idaho/truck_rear.dds new file mode 100644 index 00000000..9ec3fae5 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/truck_rear.dds differ diff --git a/TS SE Tool/img/ATS/lp/idaho/truck_rear.mat b/TS SE Tool/img/ATS/lp/idaho/truck_rear.mat new file mode 100644 index 00000000..2cd8ef29 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/idaho/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/idaho/truck_rear.tobj b/TS SE Tool/img/ATS/lp/idaho/truck_rear.tobj new file mode 100644 index 00000000..2e940eb3 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/idaho/truck_rear.tobj differ diff --git a/TS SE Tool/img/ATS/lp/nevada/front.dds b/TS SE Tool/img/ATS/lp/nevada/front.dds new file mode 100644 index 00000000..860bc202 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/nevada/front.mat b/TS SE Tool/img/ATS/lp/nevada/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/front.tobj b/TS SE Tool/img/ATS/lp/nevada/front.tobj new file mode 100644 index 00000000..87e4afaf Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/nevada/police_front.dds b/TS SE Tool/img/ATS/lp/nevada/police_front.dds new file mode 100644 index 00000000..3ce9d706 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/police_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/nevada/police_front.mat b/TS SE Tool/img/ATS/lp/nevada/police_front.mat new file mode 100644 index 00000000..8b49da99 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/police_front.tobj b/TS SE Tool/img/ATS/lp/nevada/police_front.tobj new file mode 100644 index 00000000..b0a936bd Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/police_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/nevada/police_rear.mat b/TS SE Tool/img/ATS/lp/nevada/police_rear.mat new file mode 100644 index 00000000..8b49da99 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/rear.mat b/TS SE Tool/img/ATS/lp/nevada/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/trailer.dds b/TS SE Tool/img/ATS/lp/nevada/trailer.dds new file mode 100644 index 00000000..98334312 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/trailer.dds differ diff --git a/TS SE Tool/img/ATS/lp/nevada/trailer.mat b/TS SE Tool/img/ATS/lp/nevada/trailer.mat new file mode 100644 index 00000000..69c6f11c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "trailer.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/trailer.tobj b/TS SE Tool/img/ATS/lp/nevada/trailer.tobj new file mode 100644 index 00000000..43322082 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/trailer.tobj differ diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_city_front.dds b/TS SE Tool/img/ATS/lp/nevada/truck_city_front.dds new file mode 100644 index 00000000..753846b0 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/truck_city_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_city_front.mat b/TS SE Tool/img/ATS/lp/nevada/truck_city_front.mat new file mode 100644 index 00000000..b018d0ab --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/truck_city_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_city_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_city_front.tobj b/TS SE Tool/img/ATS/lp/nevada/truck_city_front.tobj new file mode 100644 index 00000000..22bf1ea6 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/truck_city_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_city_rear.mat b/TS SE Tool/img/ATS/lp/nevada/truck_city_rear.mat new file mode 100644 index 00000000..b018d0ab --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/truck_city_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_city_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_front.dds b/TS SE Tool/img/ATS/lp/nevada/truck_front.dds new file mode 100644 index 00000000..edb772f3 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_front.mat b/TS SE Tool/img/ATS/lp/nevada/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_front.tobj b/TS SE Tool/img/ATS/lp/nevada/truck_front.tobj new file mode 100644 index 00000000..b6595d80 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/nevada/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/nevada/truck_rear.mat b/TS SE Tool/img/ATS/lp/nevada/truck_rear.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/nevada/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/front.dds b/TS SE Tool/img/ATS/lp/new_mexico/front.dds new file mode 100644 index 00000000..ce276a8d Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/front.mat b/TS SE Tool/img/ATS/lp/new_mexico/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/front.tobj b/TS SE Tool/img/ATS/lp/new_mexico/front.tobj new file mode 100644 index 00000000..20003e83 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/police_front.dds b/TS SE Tool/img/ATS/lp/new_mexico/police_front.dds new file mode 100644 index 00000000..fb033666 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/police_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/police_front.mat b/TS SE Tool/img/ATS/lp/new_mexico/police_front.mat new file mode 100644 index 00000000..8b49da99 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/police_front.tobj b/TS SE Tool/img/ATS/lp/new_mexico/police_front.tobj new file mode 100644 index 00000000..7c4e0642 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/police_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/police_rear.mat b/TS SE Tool/img/ATS/lp/new_mexico/police_rear.mat new file mode 100644 index 00000000..8b49da99 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/rear.mat b/TS SE Tool/img/ATS/lp/new_mexico/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/trailer.dds b/TS SE Tool/img/ATS/lp/new_mexico/trailer.dds new file mode 100644 index 00000000..b00001ac Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/trailer.dds differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/trailer.mat b/TS SE Tool/img/ATS/lp/new_mexico/trailer.mat new file mode 100644 index 00000000..69c6f11c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "trailer.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/trailer.tobj b/TS SE Tool/img/ATS/lp/new_mexico/trailer.tobj new file mode 100644 index 00000000..c3261453 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/trailer.tobj differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/truck_front.dds b/TS SE Tool/img/ATS/lp/new_mexico/truck_front.dds new file mode 100644 index 00000000..0d08cd11 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/truck_front.mat b/TS SE Tool/img/ATS/lp/new_mexico/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/new_mexico/truck_front.tobj b/TS SE Tool/img/ATS/lp/new_mexico/truck_front.tobj new file mode 100644 index 00000000..b8458129 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/new_mexico/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/new_mexico/truck_rear.mat b/TS SE Tool/img/ATS/lp/new_mexico/truck_rear.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/new_mexico/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/commercial.dds b/TS SE Tool/img/ATS/lp/oregon/commercial.dds new file mode 100644 index 00000000..22c07246 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/commercial.dds differ diff --git a/TS SE Tool/img/ATS/lp/oregon/commercial.mat b/TS SE Tool/img/ATS/lp/oregon/commercial.mat new file mode 100644 index 00000000..8c42a0a4 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/commercial.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "commercial.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/commercial.tobj b/TS SE Tool/img/ATS/lp/oregon/commercial.tobj new file mode 100644 index 00000000..656d4050 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/commercial.tobj differ diff --git a/TS SE Tool/img/ATS/lp/oregon/front.dds b/TS SE Tool/img/ATS/lp/oregon/front.dds new file mode 100644 index 00000000..cc9133f9 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/oregon/front.mat b/TS SE Tool/img/ATS/lp/oregon/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/front.tobj b/TS SE Tool/img/ATS/lp/oregon/front.tobj new file mode 100644 index 00000000..076f4081 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/oregon/police.dds b/TS SE Tool/img/ATS/lp/oregon/police.dds new file mode 100644 index 00000000..6ce21e78 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/police.dds differ diff --git a/TS SE Tool/img/ATS/lp/oregon/police.mat b/TS SE Tool/img/ATS/lp/oregon/police.mat new file mode 100644 index 00000000..a71f5d43 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/police.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/police.tobj b/TS SE Tool/img/ATS/lp/oregon/police.tobj new file mode 100644 index 00000000..05fd5709 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/police.tobj differ diff --git a/TS SE Tool/img/ATS/lp/oregon/rear.mat b/TS SE Tool/img/ATS/lp/oregon/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/trailer.dds b/TS SE Tool/img/ATS/lp/oregon/trailer.dds new file mode 100644 index 00000000..90bcdcaf Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/trailer.dds differ diff --git a/TS SE Tool/img/ATS/lp/oregon/trailer.mat b/TS SE Tool/img/ATS/lp/oregon/trailer.mat new file mode 100644 index 00000000..69c6f11c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "trailer.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/trailer.tobj b/TS SE Tool/img/ATS/lp/oregon/trailer.tobj new file mode 100644 index 00000000..a49c6092 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/trailer.tobj differ diff --git a/TS SE Tool/img/ATS/lp/oregon/truck_front.dds b/TS SE Tool/img/ATS/lp/oregon/truck_front.dds new file mode 100644 index 00000000..85ce86f0 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/oregon/truck_front.mat b/TS SE Tool/img/ATS/lp/oregon/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/oregon/truck_front.tobj b/TS SE Tool/img/ATS/lp/oregon/truck_front.tobj new file mode 100644 index 00000000..7e2832ae Binary files /dev/null and b/TS SE Tool/img/ATS/lp/oregon/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/oregon/truck_rear.mat b/TS SE Tool/img/ATS/lp/oregon/truck_rear.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/oregon/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/utah/front.dds b/TS SE Tool/img/ATS/lp/utah/front.dds new file mode 100644 index 00000000..91ad6e2e Binary files /dev/null and b/TS SE Tool/img/ATS/lp/utah/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/utah/front.mat b/TS SE Tool/img/ATS/lp/utah/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/utah/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/utah/front.tobj b/TS SE Tool/img/ATS/lp/utah/front.tobj new file mode 100644 index 00000000..1f7289d1 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/utah/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/utah/police.dds b/TS SE Tool/img/ATS/lp/utah/police.dds new file mode 100644 index 00000000..6dd3d8b5 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/utah/police.dds differ diff --git a/TS SE Tool/img/ATS/lp/utah/police.mat b/TS SE Tool/img/ATS/lp/utah/police.mat new file mode 100644 index 00000000..a71f5d43 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/utah/police.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/utah/police.tobj b/TS SE Tool/img/ATS/lp/utah/police.tobj new file mode 100644 index 00000000..67a9c0af Binary files /dev/null and b/TS SE Tool/img/ATS/lp/utah/police.tobj differ diff --git a/TS SE Tool/img/ATS/lp/utah/rear.mat b/TS SE Tool/img/ATS/lp/utah/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/utah/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/utah/trailer.mat b/TS SE Tool/img/ATS/lp/utah/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/utah/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/utah/truck_front.mat b/TS SE Tool/img/ATS/lp/utah/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/utah/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/utah/truck_rear.mat b/TS SE Tool/img/ATS/lp/utah/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/utah/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/washington/front.dds b/TS SE Tool/img/ATS/lp/washington/front.dds new file mode 100644 index 00000000..10fce768 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/washington/front.dds differ diff --git a/TS SE Tool/img/ATS/lp/washington/front.mat b/TS SE Tool/img/ATS/lp/washington/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/washington/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/washington/front.tobj b/TS SE Tool/img/ATS/lp/washington/front.tobj new file mode 100644 index 00000000..07e40037 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/washington/front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/washington/police.dds b/TS SE Tool/img/ATS/lp/washington/police.dds new file mode 100644 index 00000000..bd998c88 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/washington/police.dds differ diff --git a/TS SE Tool/img/ATS/lp/washington/police.mat b/TS SE Tool/img/ATS/lp/washington/police.mat new file mode 100644 index 00000000..a71f5d43 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/washington/police.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/washington/police.tobj b/TS SE Tool/img/ATS/lp/washington/police.tobj new file mode 100644 index 00000000..8b8323a6 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/washington/police.tobj differ diff --git a/TS SE Tool/img/ATS/lp/washington/rear.mat b/TS SE Tool/img/ATS/lp/washington/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ATS/lp/washington/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/washington/trailer.mat b/TS SE Tool/img/ATS/lp/washington/trailer.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/washington/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/washington/truck_front.dds b/TS SE Tool/img/ATS/lp/washington/truck_front.dds new file mode 100644 index 00000000..335b5155 Binary files /dev/null and b/TS SE Tool/img/ATS/lp/washington/truck_front.dds differ diff --git a/TS SE Tool/img/ATS/lp/washington/truck_front.mat b/TS SE Tool/img/ATS/lp/washington/truck_front.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/washington/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lp/washington/truck_front.tobj b/TS SE Tool/img/ATS/lp/washington/truck_front.tobj new file mode 100644 index 00000000..2573652c Binary files /dev/null and b/TS SE Tool/img/ATS/lp/washington/truck_front.tobj differ diff --git a/TS SE Tool/img/ATS/lp/washington/truck_rear.mat b/TS SE Tool/img/ATS/lp/washington/truck_rear.mat new file mode 100644 index 00000000..2806d83c --- /dev/null +++ b/TS SE Tool/img/ATS/lp/washington/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lpFont/arizona.font b/TS SE Tool/img/ATS/lpFont/arizona.font new file mode 100644 index 00000000..d8e98db8 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/arizona.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 15 +# Max advance: 16 +# Typical height 'above the line': 32 (height of letter 'M') +# Max pixels 'above the line': 31 +# Max pixels 'below the line': 1 + +vert_span:32 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/arizona_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 75, 128, 0, 0, 0, 31, 8, 0 # ' ' / 'SPACE' +x002d, 60, 128, 8, 32, 0, 0, 8, 0 # '-' / 'HYPHEN-MINUS' +x0030, 0, 0, 14, 32, 0, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 15, 0, 14, 32, 0, 0, 16, 0 # '1' / 'DIGIT ONE' +x0032, 30, 0, 14, 32, 0, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 45, 0, 14, 32, 0, 0, 16, 0 # '3' / 'DIGIT THREE' +x0034, 60, 0, 14, 32, 0, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 75, 0, 14, 32, 0, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 90, 0, 14, 32, 0, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 105, 0, 14, 32, 0, 0, 16, 0 # '7' / 'DIGIT SEVEN' +x0038, 0, 32, 14, 32, 0, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 15, 32, 14, 32, 0, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 30, 32, 14, 32, 0, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 45, 32, 14, 32, 0, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 60, 32, 14, 32, 0, 0, 16, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 75, 32, 14, 32, 0, 0, 16, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 90, 32, 14, 32, 0, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 105, 32, 14, 32, 0, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 0, 64, 14, 32, 0, 0, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 15, 64, 14, 32, 0, 0, 16, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 30, 64, 14, 32, 0, 0, 16, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 45, 64, 14, 32, 0, 0, 16, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 60, 64, 14, 32, 0, 0, 16, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 75, 64, 14, 32, 0, 0, 16, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 90, 64, 14, 32, 0, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 105, 64, 14, 32, 0, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 0, 96, 14, 32, 0, 0, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 15, 96, 14, 32, 0, 0, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 30, 96, 14, 32, 0, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 45, 96, 14, 32, 0, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 60, 96, 14, 32, 0, 0, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 75, 96, 14, 32, 0, 0, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 90, 96, 14, 32, 0, 0, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 105, 96, 14, 32, 0, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 0, 128, 14, 32, 0, 0, 16, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 15, 128, 14, 32, 0, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 30, 128, 14, 32, 0, 0, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 45, 128, 14, 32, 0, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/arizona_0.dds b/TS SE Tool/img/ATS/lpFont/arizona_0.dds new file mode 100644 index 00000000..fa4e8e02 Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/arizona_0.dds differ diff --git a/TS SE Tool/img/ATS/lpFont/arizona_0.mat b/TS SE Tool/img/ATS/lpFont/arizona_0.mat new file mode 100644 index 00000000..26ee0c5f --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/arizona_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/arizona_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lpFont/arizona_0.tobj b/TS SE Tool/img/ATS/lpFont/arizona_0.tobj new file mode 100644 index 00000000..9fa27164 Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/arizona_0.tobj differ diff --git a/TS SE Tool/img/ATS/lpFont/california.font b/TS SE Tool/img/ATS/lpFont/california.font new file mode 100644 index 00000000..a0181e00 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/california.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 15 +# Max advance: 19 +# Typical height 'above the line': 28 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:30 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/california_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 75, 120, 0, 0, 0, 29, 11, 0 # ' ' / 'SPACE' +x002d, 64, 120, 10, 3, 5, 13, 16, 0 # '-' / 'HYPHEN-MINUS' +x0030, 44, 32, 14, 28, 3, 1, 19, 0 # '0' / 'DIGIT ZERO' +x0031, 59, 32, 15, 28, 2, 1, 18, 0 # '1' / 'DIGIT ONE' +x0032, 75, 32, 14, 28, 3, 1, 18, 0 # '2' / 'DIGIT TWO' +x0033, 90, 32, 15, 28, 3, 1, 19, 0 # '3' / 'DIGIT THREE' +x0034, 1, 1, 15, 30, 3, 0, 19, 0 # '4' / 'DIGIT FOUR' +x0035, 106, 32, 14, 28, 2, 1, 18, 0 # '5' / 'DIGIT FIVE' +x0036, 1, 62, 14, 28, 3, 1, 19, 0 # '6' / 'DIGIT SIX' +x0037, 16, 62, 14, 28, 2, 1, 18, 0 # '7' / 'DIGIT SEVEN' +x0038, 31, 62, 14, 28, 3, 1, 18, 0 # '8' / 'DIGIT EIGHT' +x0039, 46, 62, 13, 28, 3, 1, 18, 0 # '9' / 'DIGIT NINE' +x0041, 76, 1, 14, 29, 3, 0, 18, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 60, 62, 14, 28, 3, 1, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 75, 62, 14, 28, 3, 1, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 90, 62, 15, 28, 2, 1, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 91, 1, 15, 29, 3, 1, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 107, 1, 14, 29, 3, 1, 18, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 106, 62, 14, 28, 4, 1, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 1, 14, 30, 3, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 1, 91, 15, 28, 2, 1, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 17, 91, 13, 28, 3, 1, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 32, 1, 14, 30, 3, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 31, 91, 14, 28, 3, 1, 18, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 46, 91, 14, 28, 3, 1, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 47, 1, 13, 30, 3, 0, 18, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 61, 91, 14, 28, 3, 1, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 76, 91, 14, 28, 3, 1, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 91, 91, 13, 28, 3, 1, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 32, 13, 29, 3, 1, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 105, 91, 14, 28, 3, 1, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 1, 120, 15, 28, 2, 1, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 15, 32, 13, 29, 3, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 17, 120, 15, 28, 2, 1, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 33, 120, 14, 28, 3, 1, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 61, 1, 14, 30, 3, 0, 19, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 48, 120, 15, 28, 2, 1, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 29, 32, 14, 29, 3, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/california_0.dds b/TS SE Tool/img/ATS/lpFont/california_0.dds new file mode 100644 index 00000000..786ad721 Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/california_0.dds differ diff --git a/TS SE Tool/img/ATS/lpFont/california_0.mat b/TS SE Tool/img/ATS/lpFont/california_0.mat new file mode 100644 index 00000000..d401f8dc --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/california_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/california_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lpFont/california_0.tobj b/TS SE Tool/img/ATS/lpFont/california_0.tobj new file mode 100644 index 00000000..ca2297cb Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/california_0.tobj differ diff --git a/TS SE Tool/img/ATS/lpFont/idaho.font b/TS SE Tool/img/ATS/lpFont/idaho.font new file mode 100644 index 00000000..82089a99 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/idaho.font @@ -0,0 +1,67 @@ +# SCS Font +# Max width: 13 +# Max advance: 14 +# Typical height 'above the line': 30 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:38 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.235000 # default font scale in reference resolution + +image:/font/license_plate/idaho_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 0, 0, 0, 0, 0, 31, 14, 0 # ' ' / 'SPACE' +x0030, 104, 90, 13, 30, 0, 2, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 0, 0, 13, 30, 0, 2, 14, 0 # '1' / 'DIGIT ONE' +x0032, 13, 0, 13, 30, 0, 2, 14, 0 # '2' / 'DIGIT TWO' +x0033, 26, 0, 13, 30, 0, 2, 14, 0 # '3' / 'DIGIT THREE' +x0034, 39, 0, 13, 30, 0, 2, 14, 0 # '4' / 'DIGIT FOUR' +x0035, 52, 0, 13, 30, 0, 2, 14, 0 # '5' / 'DIGIT FIVE' +x0036, 65, 0, 13, 30, 0, 2, 14, 0 # '6' / 'DIGIT SIX' +x0037, 78, 0, 13, 30, 0, 2, 14, 0 # '7' / 'DIGIT SEVEN' +x0038, 91, 0, 13, 30, 0, 2, 14, 0 # '8' / 'DIGIT EIGHT' +x0039, 104, 0, 13, 30, 0, 2, 14, 0 # '9' / 'DIGIT NINE' +x0041, 0, 30, 13, 30, 0, 2, 14, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 13, 30, 13, 30, 0, 2, 14, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 26, 30, 13, 30, 0, 2, 14, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 39, 30, 13, 30, 0, 2, 14, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 52, 30, 13, 30, 0, 2, 14, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 65, 30, 13, 30, 0, 2, 14, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 78, 30, 13, 30, 0, 2, 14, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 91, 30, 13, 30, 0, 2, 14, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 104, 30, 13, 30, 0, 2, 14, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 78, 90, 13, 30, 0, 2, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 0, 60, 13, 30, 0, 2, 14, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 13, 60, 13, 30, 0, 2, 14, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 26, 60, 13, 30, 0, 2, 14, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 39, 60, 13, 30, 0, 2, 14, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 52, 60, 13, 30, 0, 2, 14, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 65, 60, 13, 30, 0, 2, 14, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 78, 60, 13, 30, 0, 2, 14, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 91, 60, 13, 30, 0, 2, 14, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 104, 60, 13, 30, 0, 2, 14, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 91, 90, 13, 30, 0, 2, 14, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 0, 90, 13, 30, 0, 2, 14, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 13, 90, 13, 30, 0, 2, 14, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 26, 90, 13, 30, 0, 2, 14, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 39, 90, 13, 30, 0, 2, 14, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 52, 90, 13, 30, 0, 2, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 65, 90, 13, 30, 0, 2, 14, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/idaho_0.dds b/TS SE Tool/img/ATS/lpFont/idaho_0.dds new file mode 100644 index 00000000..a707836c Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/idaho_0.dds differ diff --git a/TS SE Tool/img/ATS/lpFont/idaho_0.mat b/TS SE Tool/img/ATS/lpFont/idaho_0.mat new file mode 100644 index 00000000..03b3e533 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/idaho_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/idaho_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lpFont/idaho_0.tobj b/TS SE Tool/img/ATS/lpFont/idaho_0.tobj new file mode 100644 index 00000000..ef9d789e Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/idaho_0.tobj differ diff --git a/TS SE Tool/img/ATS/lpFont/nevada.font b/TS SE Tool/img/ATS/lpFont/nevada.font new file mode 100644 index 00000000..14c19ca8 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/nevada.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 14 +# Max advance: 16 +# Typical height 'above the line': 30 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:30 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/nevada_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 70, 120, 0, 0, 1, 29, 16, 0 # ' ' / 'SPACE' +x002d, 56, 120, 14, 30, 1, 0, 16, 0 # '-' / 'HYPHEN-MINUS' +x0030, 0, 0, 14, 30, 1, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 14, 0, 14, 30, 1, 0, 16, 0 # '1' / 'DIGIT ONE' +x0032, 28, 0, 14, 30, 1, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 42, 0, 14, 30, 1, 0, 16, 0 # '3' / 'DIGIT THREE' +x0034, 56, 0, 14, 30, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 70, 0, 14, 30, 1, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 84, 0, 14, 30, 1, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 98, 0, 14, 30, 1, 0, 16, 0 # '7' / 'DIGIT SEVEN' +x0038, 0, 30, 14, 30, 1, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 14, 30, 14, 30, 1, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 28, 30, 14, 30, 1, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 42, 30, 14, 30, 1, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 56, 30, 14, 30, 1, 0, 16, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 70, 30, 14, 30, 1, 0, 16, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 84, 30, 14, 30, 1, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 98, 30, 14, 30, 1, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 0, 60, 14, 30, 1, 0, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 14, 60, 14, 30, 1, 0, 16, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 28, 60, 14, 30, 1, 0, 16, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 42, 60, 14, 30, 1, 0, 16, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 56, 60, 14, 30, 1, 0, 16, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 70, 60, 14, 30, 1, 0, 16, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 84, 60, 14, 30, 1, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 98, 60, 14, 30, 1, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 0, 90, 14, 30, 1, 0, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 14, 90, 14, 30, 1, 0, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 28, 90, 14, 30, 1, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 42, 90, 14, 30, 1, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 56, 90, 14, 30, 1, 0, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 70, 90, 14, 30, 1, 0, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 84, 90, 14, 30, 1, 0, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 98, 90, 14, 30, 1, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 0, 120, 14, 30, 1, 0, 16, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 14, 120, 14, 30, 1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 28, 120, 14, 30, 1, 0, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 42, 120, 14, 30, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/nevada_0.dds b/TS SE Tool/img/ATS/lpFont/nevada_0.dds new file mode 100644 index 00000000..68c771a5 Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/nevada_0.dds differ diff --git a/TS SE Tool/img/ATS/lpFont/nevada_0.mat b/TS SE Tool/img/ATS/lpFont/nevada_0.mat new file mode 100644 index 00000000..9bd7df06 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/nevada_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/nevada_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lpFont/nevada_0.tobj b/TS SE Tool/img/ATS/lpFont/nevada_0.tobj new file mode 100644 index 00000000..e53158b3 Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/nevada_0.tobj differ diff --git a/TS SE Tool/img/ATS/lpFont/new_mexico.font b/TS SE Tool/img/ATS/lpFont/new_mexico.font new file mode 100644 index 00000000..29201725 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/new_mexico.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 15 +# Max advance: 19 +# Typical height 'above the line': 29 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:30 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/new_mexico_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 76, 120, 0, 0, 0, 29, 11, 0 # ' ' / 'SPACE' +x002d, 61, 120, 14, 13, 2, 8, 17, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 62, 14, 28, 3, 1, 19, 0 # '0' / 'DIGIT ZERO' +x0031, 16, 62, 14, 28, 3, 1, 18, 0 # '1' / 'DIGIT ONE' +x0032, 31, 62, 14, 28, 3, 1, 18, 0 # '2' / 'DIGIT TWO' +x0033, 46, 62, 15, 28, 3, 1, 19, 0 # '3' / 'DIGIT THREE' +x0034, 1, 1, 15, 30, 3, 0, 19, 0 # '4' / 'DIGIT FOUR' +x0035, 62, 62, 15, 28, 2, 1, 18, 0 # '5' / 'DIGIT FIVE' +x0036, 78, 62, 14, 28, 3, 1, 18, 0 # '6' / 'DIGIT SIX' +x0037, 93, 62, 15, 28, 2, 1, 18, 0 # '7' / 'DIGIT SEVEN' +x0038, 109, 62, 14, 28, 3, 1, 18, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 91, 14, 28, 3, 1, 18, 0 # '9' / 'DIGIT NINE' +x0041, 77, 1, 14, 29, 3, 0, 18, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 16, 91, 14, 28, 3, 1, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 31, 91, 14, 28, 3, 1, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 92, 1, 15, 29, 2, 0, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 108, 1, 15, 29, 3, 1, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 1, 32, 14, 29, 3, 1, 18, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 46, 91, 14, 28, 4, 1, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 1, 14, 30, 3, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 61, 91, 15, 28, 2, 1, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 77, 91, 13, 28, 3, 1, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 32, 1, 14, 30, 3, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 91, 91, 14, 28, 3, 1, 18, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 16, 32, 14, 29, 3, 1, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 47, 1, 13, 30, 3, 0, 18, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 106, 91, 14, 28, 3, 1, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 1, 120, 14, 28, 3, 1, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 16, 120, 13, 28, 3, 1, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 31, 32, 13, 29, 3, 1, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 30, 120, 14, 28, 3, 1, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 45, 32, 15, 29, 2, 1, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 61, 32, 13, 29, 3, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 45, 120, 15, 28, 2, 1, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 75, 32, 14, 29, 3, 1, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 61, 1, 15, 30, 2, 0, 19, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 90, 32, 15, 29, 2, 1, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 106, 32, 15, 29, 2, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/new_mexico_0.dds b/TS SE Tool/img/ATS/lpFont/new_mexico_0.dds new file mode 100644 index 00000000..a4f23b5b Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/new_mexico_0.dds differ diff --git a/TS SE Tool/img/ATS/lpFont/new_mexico_0.mat b/TS SE Tool/img/ATS/lpFont/new_mexico_0.mat new file mode 100644 index 00000000..c3c5d7ad --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/new_mexico_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/new_mexico_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ATS/lpFont/new_mexico_0.tobj b/TS SE Tool/img/ATS/lpFont/new_mexico_0.tobj new file mode 100644 index 00000000..2047ed83 Binary files /dev/null and b/TS SE Tool/img/ATS/lpFont/new_mexico_0.tobj differ diff --git a/TS SE Tool/img/ATS/lpFont/oregon.font b/TS SE Tool/img/ATS/lpFont/oregon.font new file mode 100644 index 00000000..a0181e00 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/oregon.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 15 +# Max advance: 19 +# Typical height 'above the line': 28 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:30 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/california_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 75, 120, 0, 0, 0, 29, 11, 0 # ' ' / 'SPACE' +x002d, 64, 120, 10, 3, 5, 13, 16, 0 # '-' / 'HYPHEN-MINUS' +x0030, 44, 32, 14, 28, 3, 1, 19, 0 # '0' / 'DIGIT ZERO' +x0031, 59, 32, 15, 28, 2, 1, 18, 0 # '1' / 'DIGIT ONE' +x0032, 75, 32, 14, 28, 3, 1, 18, 0 # '2' / 'DIGIT TWO' +x0033, 90, 32, 15, 28, 3, 1, 19, 0 # '3' / 'DIGIT THREE' +x0034, 1, 1, 15, 30, 3, 0, 19, 0 # '4' / 'DIGIT FOUR' +x0035, 106, 32, 14, 28, 2, 1, 18, 0 # '5' / 'DIGIT FIVE' +x0036, 1, 62, 14, 28, 3, 1, 19, 0 # '6' / 'DIGIT SIX' +x0037, 16, 62, 14, 28, 2, 1, 18, 0 # '7' / 'DIGIT SEVEN' +x0038, 31, 62, 14, 28, 3, 1, 18, 0 # '8' / 'DIGIT EIGHT' +x0039, 46, 62, 13, 28, 3, 1, 18, 0 # '9' / 'DIGIT NINE' +x0041, 76, 1, 14, 29, 3, 0, 18, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 60, 62, 14, 28, 3, 1, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 75, 62, 14, 28, 3, 1, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 90, 62, 15, 28, 2, 1, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 91, 1, 15, 29, 3, 1, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 107, 1, 14, 29, 3, 1, 18, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 106, 62, 14, 28, 4, 1, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 1, 14, 30, 3, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 1, 91, 15, 28, 2, 1, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 17, 91, 13, 28, 3, 1, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 32, 1, 14, 30, 3, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 31, 91, 14, 28, 3, 1, 18, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 46, 91, 14, 28, 3, 1, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 47, 1, 13, 30, 3, 0, 18, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 61, 91, 14, 28, 3, 1, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 76, 91, 14, 28, 3, 1, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 91, 91, 13, 28, 3, 1, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 32, 13, 29, 3, 1, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 105, 91, 14, 28, 3, 1, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 1, 120, 15, 28, 2, 1, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 15, 32, 13, 29, 3, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 17, 120, 15, 28, 2, 1, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 33, 120, 14, 28, 3, 1, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 61, 1, 14, 30, 3, 0, 19, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 48, 120, 15, 28, 2, 1, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 29, 32, 14, 29, 3, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/utah.font b/TS SE Tool/img/ATS/lpFont/utah.font new file mode 100644 index 00000000..a0181e00 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/utah.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 15 +# Max advance: 19 +# Typical height 'above the line': 28 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:30 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/california_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 75, 120, 0, 0, 0, 29, 11, 0 # ' ' / 'SPACE' +x002d, 64, 120, 10, 3, 5, 13, 16, 0 # '-' / 'HYPHEN-MINUS' +x0030, 44, 32, 14, 28, 3, 1, 19, 0 # '0' / 'DIGIT ZERO' +x0031, 59, 32, 15, 28, 2, 1, 18, 0 # '1' / 'DIGIT ONE' +x0032, 75, 32, 14, 28, 3, 1, 18, 0 # '2' / 'DIGIT TWO' +x0033, 90, 32, 15, 28, 3, 1, 19, 0 # '3' / 'DIGIT THREE' +x0034, 1, 1, 15, 30, 3, 0, 19, 0 # '4' / 'DIGIT FOUR' +x0035, 106, 32, 14, 28, 2, 1, 18, 0 # '5' / 'DIGIT FIVE' +x0036, 1, 62, 14, 28, 3, 1, 19, 0 # '6' / 'DIGIT SIX' +x0037, 16, 62, 14, 28, 2, 1, 18, 0 # '7' / 'DIGIT SEVEN' +x0038, 31, 62, 14, 28, 3, 1, 18, 0 # '8' / 'DIGIT EIGHT' +x0039, 46, 62, 13, 28, 3, 1, 18, 0 # '9' / 'DIGIT NINE' +x0041, 76, 1, 14, 29, 3, 0, 18, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 60, 62, 14, 28, 3, 1, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 75, 62, 14, 28, 3, 1, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 90, 62, 15, 28, 2, 1, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 91, 1, 15, 29, 3, 1, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 107, 1, 14, 29, 3, 1, 18, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 106, 62, 14, 28, 4, 1, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 1, 14, 30, 3, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 1, 91, 15, 28, 2, 1, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 17, 91, 13, 28, 3, 1, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 32, 1, 14, 30, 3, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 31, 91, 14, 28, 3, 1, 18, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 46, 91, 14, 28, 3, 1, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 47, 1, 13, 30, 3, 0, 18, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 61, 91, 14, 28, 3, 1, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 76, 91, 14, 28, 3, 1, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 91, 91, 13, 28, 3, 1, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 32, 13, 29, 3, 1, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 105, 91, 14, 28, 3, 1, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 1, 120, 15, 28, 2, 1, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 15, 32, 13, 29, 3, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 17, 120, 15, 28, 2, 1, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 33, 120, 14, 28, 3, 1, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 61, 1, 14, 30, 3, 0, 19, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 48, 120, 15, 28, 2, 1, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 29, 32, 14, 29, 3, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/lpFont/washington.font b/TS SE Tool/img/ATS/lpFont/washington.font new file mode 100644 index 00000000..a0181e00 --- /dev/null +++ b/TS SE Tool/img/ATS/lpFont/washington.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 15 +# Max advance: 19 +# Typical height 'above the line': 28 (height of letter 'M') +# Max pixels 'above the line': 29 +# Max pixels 'below the line': 1 + +vert_span:30 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/california_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 75, 120, 0, 0, 0, 29, 11, 0 # ' ' / 'SPACE' +x002d, 64, 120, 10, 3, 5, 13, 16, 0 # '-' / 'HYPHEN-MINUS' +x0030, 44, 32, 14, 28, 3, 1, 19, 0 # '0' / 'DIGIT ZERO' +x0031, 59, 32, 15, 28, 2, 1, 18, 0 # '1' / 'DIGIT ONE' +x0032, 75, 32, 14, 28, 3, 1, 18, 0 # '2' / 'DIGIT TWO' +x0033, 90, 32, 15, 28, 3, 1, 19, 0 # '3' / 'DIGIT THREE' +x0034, 1, 1, 15, 30, 3, 0, 19, 0 # '4' / 'DIGIT FOUR' +x0035, 106, 32, 14, 28, 2, 1, 18, 0 # '5' / 'DIGIT FIVE' +x0036, 1, 62, 14, 28, 3, 1, 19, 0 # '6' / 'DIGIT SIX' +x0037, 16, 62, 14, 28, 2, 1, 18, 0 # '7' / 'DIGIT SEVEN' +x0038, 31, 62, 14, 28, 3, 1, 18, 0 # '8' / 'DIGIT EIGHT' +x0039, 46, 62, 13, 28, 3, 1, 18, 0 # '9' / 'DIGIT NINE' +x0041, 76, 1, 14, 29, 3, 0, 18, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 60, 62, 14, 28, 3, 1, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 75, 62, 14, 28, 3, 1, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 90, 62, 15, 28, 2, 1, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 91, 1, 15, 29, 3, 1, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 107, 1, 14, 29, 3, 1, 18, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 106, 62, 14, 28, 4, 1, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 1, 14, 30, 3, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 1, 91, 15, 28, 2, 1, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 17, 91, 13, 28, 3, 1, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 32, 1, 14, 30, 3, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 31, 91, 14, 28, 3, 1, 18, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 46, 91, 14, 28, 3, 1, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 47, 1, 13, 30, 3, 0, 18, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 61, 91, 14, 28, 3, 1, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 76, 91, 14, 28, 3, 1, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 91, 91, 13, 28, 3, 1, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 32, 13, 29, 3, 1, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 105, 91, 14, 28, 3, 1, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 1, 120, 15, 28, 2, 1, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 15, 32, 13, 29, 3, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 17, 120, 15, 28, 2, 1, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 33, 120, 14, 28, 3, 1, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 61, 1, 14, 30, 3, 0, 19, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 48, 120, 15, 28, 2, 1, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 29, 32, 14, 29, 3, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ATS/player_logo/logo_0.dds b/TS SE Tool/img/ATS/player_logo/logo_0.dds new file mode 100644 index 00000000..0bac195b Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_0.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_1.dds b/TS SE Tool/img/ATS/player_logo/logo_1.dds new file mode 100644 index 00000000..7ae2ac34 Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_1.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_2.dds b/TS SE Tool/img/ATS/player_logo/logo_2.dds new file mode 100644 index 00000000..acb891f9 Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_2.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_3.dds b/TS SE Tool/img/ATS/player_logo/logo_3.dds new file mode 100644 index 00000000..0201f3c8 Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_3.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_4.dds b/TS SE Tool/img/ATS/player_logo/logo_4.dds new file mode 100644 index 00000000..9aeffc7c Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_4.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_5.dds b/TS SE Tool/img/ATS/player_logo/logo_5.dds new file mode 100644 index 00000000..1db75e21 Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_5.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_6.dds b/TS SE Tool/img/ATS/player_logo/logo_6.dds new file mode 100644 index 00000000..47f239fa Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_6.dds differ diff --git a/TS SE Tool/img/ATS/player_logo/logo_7.dds b/TS SE Tool/img/ATS/player_logo/logo_7.dds new file mode 100644 index 00000000..06fcb42f Binary files /dev/null and b/TS SE Tool/img/ATS/player_logo/logo_7.dds differ diff --git a/TS SE Tool/img/ATS/trailer.dds b/TS SE Tool/img/ATS/trailer.dds new file mode 100644 index 00000000..4096d184 Binary files /dev/null and b/TS SE Tool/img/ATS/trailer.dds differ diff --git a/TS SE Tool/img/ATS/trailer_body.dds b/TS SE Tool/img/ATS/trailer_body.dds new file mode 100644 index 00000000..253dc4b4 Binary files /dev/null and b/TS SE Tool/img/ATS/trailer_body.dds differ diff --git a/TS SE Tool/img/ATS/trailer_chassis.dds b/TS SE Tool/img/ATS/trailer_chassis.dds new file mode 100644 index 00000000..5ac6b768 Binary files /dev/null and b/TS SE Tool/img/ATS/trailer_chassis.dds differ diff --git a/TS SE Tool/img/ATS/trailer_dummy_icon.dds b/TS SE Tool/img/ATS/trailer_dummy_icon.dds new file mode 100644 index 00000000..7453e2d9 Binary files /dev/null and b/TS SE Tool/img/ATS/trailer_dummy_icon.dds differ diff --git a/TS SE Tool/img/ATS/transmission.dds b/TS SE Tool/img/ATS/transmission.dds new file mode 100644 index 00000000..4079a993 Binary files /dev/null and b/TS SE Tool/img/ATS/transmission.dds differ diff --git a/TS SE Tool/img/ATS/truck.dds b/TS SE Tool/img/ATS/truck.dds new file mode 100644 index 00000000..950918f8 Binary files /dev/null and b/TS SE Tool/img/ATS/truck.dds differ diff --git a/TS SE Tool/img/ATS/tyres.dds b/TS SE Tool/img/ATS/tyres.dds new file mode 100644 index 00000000..25414ae8 Binary files /dev/null and b/TS SE Tool/img/ATS/tyres.dds differ diff --git a/TS SE Tool/img/ETS2/adr_1.dds b/TS SE Tool/img/ETS2/adr_1.dds new file mode 100644 index 00000000..4e7743b4 Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_1.dds differ diff --git a/TS SE Tool/img/ETS2/adr_1_grey.dds b/TS SE Tool/img/ETS2/adr_1_grey.dds new file mode 100644 index 00000000..801517af Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_1_grey.dds differ diff --git a/TS SE Tool/img/ETS2/adr_2.dds b/TS SE Tool/img/ETS2/adr_2.dds new file mode 100644 index 00000000..aac6bbfe Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_2.dds differ diff --git a/TS SE Tool/img/ETS2/adr_2_grey.dds b/TS SE Tool/img/ETS2/adr_2_grey.dds new file mode 100644 index 00000000..ffe9b808 Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_2_grey.dds differ diff --git a/TS SE Tool/img/ETS2/adr_3.dds b/TS SE Tool/img/ETS2/adr_3.dds new file mode 100644 index 00000000..b120d97c Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_3.dds differ diff --git a/TS SE Tool/img/ETS2/adr_3_grey.dds b/TS SE Tool/img/ETS2/adr_3_grey.dds new file mode 100644 index 00000000..3f301671 Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_3_grey.dds differ diff --git a/TS SE Tool/img/ETS2/adr_4.dds b/TS SE Tool/img/ETS2/adr_4.dds new file mode 100644 index 00000000..56900e2f Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_4.dds differ diff --git a/TS SE Tool/img/ETS2/adr_4_grey.dds b/TS SE Tool/img/ETS2/adr_4_grey.dds new file mode 100644 index 00000000..44e78b37 Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_4_grey.dds differ diff --git a/TS SE Tool/img/ETS2/adr_6.dds b/TS SE Tool/img/ETS2/adr_6.dds new file mode 100644 index 00000000..97bb7e56 Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_6.dds differ diff --git a/TS SE Tool/img/ETS2/adr_6_grey.dds b/TS SE Tool/img/ETS2/adr_6_grey.dds new file mode 100644 index 00000000..e20dba55 Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_6_grey.dds differ diff --git a/TS SE Tool/img/ETS2/adr_8.dds b/TS SE Tool/img/ETS2/adr_8.dds new file mode 100644 index 00000000..2b665dbc Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_8.dds differ diff --git a/TS SE Tool/img/ETS2/adr_8_grey.dds b/TS SE Tool/img/ETS2/adr_8_grey.dds new file mode 100644 index 00000000..d502ec1c Binary files /dev/null and b/TS SE Tool/img/ETS2/adr_8_grey.dds differ diff --git a/TS SE Tool/img/ETS2/autosave.dds b/TS SE Tool/img/ETS2/autosave.dds new file mode 100644 index 00000000..101a99ae Binary files /dev/null and b/TS SE Tool/img/ETS2/autosave.dds differ diff --git a/TS SE Tool/img/ETS2/base.dds b/TS SE Tool/img/ETS2/base.dds new file mode 100644 index 00000000..d2f65136 Binary files /dev/null and b/TS SE Tool/img/ETS2/base.dds differ diff --git a/TS SE Tool/img/ETS2/cabin.dds b/TS SE Tool/img/ETS2/cabin.dds new file mode 100644 index 00000000..c7736230 Binary files /dev/null and b/TS SE Tool/img/ETS2/cabin.dds differ diff --git a/TS SE Tool/img/ETS2/cargo.dds b/TS SE Tool/img/ETS2/cargo.dds new file mode 100644 index 00000000..edcfc356 Binary files /dev/null and b/TS SE Tool/img/ETS2/cargo.dds differ diff --git a/TS SE Tool/img/ETS2/chassis.dds b/TS SE Tool/img/ETS2/chassis.dds new file mode 100644 index 00000000..eb49db3e Binary files /dev/null and b/TS SE Tool/img/ETS2/chassis.dds differ diff --git a/TS SE Tool/img/ETS2/companies/aaa.dds b/TS SE Tool/img/ETS2/companies/aaa.dds new file mode 100644 index 00000000..1de71110 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/aaa.dds differ diff --git a/TS SE Tool/img/ETS2/companies/acc.dds b/TS SE Tool/img/ETS2/companies/acc.dds new file mode 100644 index 00000000..e2bad26e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/acc.dds differ diff --git a/TS SE Tool/img/ETS2/companies/aci.dds b/TS SE Tool/img/ETS2/companies/aci.dds new file mode 100644 index 00000000..260bf3b0 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/aci.dds differ diff --git a/TS SE Tool/img/ETS2/companies/aerobalt.dds b/TS SE Tool/img/ETS2/companies/aerobalt.dds new file mode 100644 index 00000000..667bb593 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/aerobalt.dds differ diff --git a/TS SE Tool/img/ETS2/companies/aerobalt_ru.dds b/TS SE Tool/img/ETS2/companies/aerobalt_ru.dds new file mode 100644 index 00000000..c255755a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/aerobalt_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/agregados.dds b/TS SE Tool/img/ETS2/companies/agregados.dds new file mode 100644 index 00000000..06af4c6a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/agregados.dds differ diff --git a/TS SE Tool/img/ETS2/companies/agrominta.dds b/TS SE Tool/img/ETS2/companies/agrominta.dds new file mode 100644 index 00000000..086778cb Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/agrominta.dds differ diff --git a/TS SE Tool/img/ETS2/companies/agronord.dds b/TS SE Tool/img/ETS2/companies/agronord.dds new file mode 100644 index 00000000..62628424 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/agronord.dds differ diff --git a/TS SE Tool/img/ETS2/companies/app.dds b/TS SE Tool/img/ETS2/companies/app.dds new file mode 100644 index 00000000..c657f2a2 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/app.dds differ diff --git a/TS SE Tool/img/ETS2/companies/aria_food.dds b/TS SE Tool/img/ETS2/companies/aria_food.dds new file mode 100644 index 00000000..b63ff086 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/aria_food.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ateria.dds b/TS SE Tool/img/ETS2/companies/ateria.dds new file mode 100644 index 00000000..2408c23a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ateria.dds differ diff --git a/TS SE Tool/img/ETS2/companies/balkan_loco.dds b/TS SE Tool/img/ETS2/companies/balkan_loco.dds new file mode 100644 index 00000000..8c853454 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/balkan_loco.dds differ diff --git a/TS SE Tool/img/ETS2/companies/baltomors_ru.dds b/TS SE Tool/img/ETS2/companies/baltomors_ru.dds new file mode 100644 index 00000000..fad3cfe2 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/baltomors_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/baltomorsk.dds b/TS SE Tool/img/ETS2/companies/baltomorsk.dds new file mode 100644 index 00000000..339044e6 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/baltomorsk.dds differ diff --git a/TS SE Tool/img/ETS2/companies/baltrak.dds b/TS SE Tool/img/ETS2/companies/baltrak.dds new file mode 100644 index 00000000..585ef280 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/baltrak.dds differ diff --git a/TS SE Tool/img/ETS2/companies/batisse.dds b/TS SE Tool/img/ETS2/companies/batisse.dds new file mode 100644 index 00000000..8db5d54e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/batisse.dds differ diff --git a/TS SE Tool/img/ETS2/companies/bcp.dds b/TS SE Tool/img/ETS2/companies/bcp.dds new file mode 100644 index 00000000..d87f29c8 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/bcp.dds differ diff --git a/TS SE Tool/img/ETS2/companies/bhb_raffin.dds b/TS SE Tool/img/ETS2/companies/bhb_raffin.dds new file mode 100644 index 00000000..fa6f0eb1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/bhb_raffin.dds differ diff --git a/TS SE Tool/img/ETS2/companies/bhv.dds b/TS SE Tool/img/ETS2/companies/bhv.dds new file mode 100644 index 00000000..f5816be8 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/bhv.dds differ diff --git a/TS SE Tool/img/ETS2/companies/bjork.dds b/TS SE Tool/img/ETS2/companies/bjork.dds new file mode 100644 index 00000000..b5032107 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/bjork.dds differ diff --git a/TS SE Tool/img/ETS2/companies/blt.dds b/TS SE Tool/img/ETS2/companies/blt.dds new file mode 100644 index 00000000..c1384b2a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/blt.dds differ diff --git a/TS SE Tool/img/ETS2/companies/blt_ru.dds b/TS SE Tool/img/ETS2/companies/blt_ru.dds new file mode 100644 index 00000000..c62cd5a1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/blt_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/blt_yacht.dds b/TS SE Tool/img/ETS2/companies/blt_yacht.dds new file mode 100644 index 00000000..85fcdd64 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/blt_yacht.dds differ diff --git a/TS SE Tool/img/ETS2/companies/blt_yacht_ru.dds b/TS SE Tool/img/ETS2/companies/blt_yacht_ru.dds new file mode 100644 index 00000000..2ea2381e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/blt_yacht_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/bltmetal.dds b/TS SE Tool/img/ETS2/companies/bltmetal.dds new file mode 100644 index 00000000..a29e0c41 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/bltmetal.dds differ diff --git a/TS SE Tool/img/ETS2/companies/bltmetal_ru.dds b/TS SE Tool/img/ETS2/companies/bltmetal_ru.dds new file mode 100644 index 00000000..f301052f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/bltmetal_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/boisserie.dds b/TS SE Tool/img/ETS2/companies/boisserie.dds new file mode 100644 index 00000000..78fc5bd4 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/boisserie.dds differ diff --git a/TS SE Tool/img/ETS2/companies/brawen.dds b/TS SE Tool/img/ETS2/companies/brawen.dds new file mode 100644 index 00000000..2a0654cf Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/brawen.dds differ diff --git a/TS SE Tool/img/ETS2/companies/c_navale.dds b/TS SE Tool/img/ETS2/companies/c_navale.dds new file mode 100644 index 00000000..965958ec Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/c_navale.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cantera.dds b/TS SE Tool/img/ETS2/companies/cantera.dds new file mode 100644 index 00000000..f990130b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cantera.dds differ diff --git a/TS SE Tool/img/ETS2/companies/canteras_ds.dds b/TS SE Tool/img/ETS2/companies/canteras_ds.dds new file mode 100644 index 00000000..bf7bac52 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/canteras_ds.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cargotras.dds b/TS SE Tool/img/ETS2/companies/cargotras.dds new file mode 100644 index 00000000..5dbaaf5f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cargotras.dds differ diff --git a/TS SE Tool/img/ETS2/companies/casa_olivera.dds b/TS SE Tool/img/ETS2/companies/casa_olivera.dds new file mode 100644 index 00000000..f3110d09 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/casa_olivera.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cemelt_fl_ru.dds b/TS SE Tool/img/ETS2/companies/cemelt_fl_ru.dds new file mode 100644 index 00000000..bfbe5862 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cemelt_fl_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cemelt_win.dds b/TS SE Tool/img/ETS2/companies/cemelt_win.dds new file mode 100644 index 00000000..a1440219 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cemelt_win.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cesare_smar.dds b/TS SE Tool/img/ETS2/companies/cesare_smar.dds new file mode 100644 index 00000000..0f3418b2 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cesare_smar.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cesta_sl.dds b/TS SE Tool/img/ETS2/companies/cesta_sl.dds new file mode 100644 index 00000000..618656af Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cesta_sl.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cgla.dds b/TS SE Tool/img/ETS2/companies/cgla.dds new file mode 100644 index 00000000..2acd30d9 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cgla.dds differ diff --git a/TS SE Tool/img/ETS2/companies/chimi.dds b/TS SE Tool/img/ETS2/companies/chimi.dds new file mode 100644 index 00000000..38450ddb Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/chimi.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cnp.dds b/TS SE Tool/img/ETS2/companies/cnp.dds new file mode 100644 index 00000000..0aabba11 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cnp.dds differ diff --git a/TS SE Tool/img/ETS2/companies/comoto.dds b/TS SE Tool/img/ETS2/companies/comoto.dds new file mode 100644 index 00000000..1b741d6a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/comoto.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cont_port.dds b/TS SE Tool/img/ETS2/companies/cont_port.dds new file mode 100644 index 00000000..0ecd5d5e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cont_port.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cont_port_it.dds b/TS SE Tool/img/ETS2/companies/cont_port_it.dds new file mode 100644 index 00000000..ace72e83 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cont_port_it.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cont_port_ru.dds b/TS SE Tool/img/ETS2/companies/cont_port_ru.dds new file mode 100644 index 00000000..84fdc26f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cont_port_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/cortica.dds b/TS SE Tool/img/ETS2/companies/cortica.dds new file mode 100644 index 00000000..78a06c68 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/cortica.dds differ diff --git a/TS SE Tool/img/ETS2/companies/costruzi.dds b/TS SE Tool/img/ETS2/companies/costruzi.dds new file mode 100644 index 00000000..f16d66c8 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/costruzi.dds differ diff --git a/TS SE Tool/img/ETS2/companies/dans_jardin.dds b/TS SE Tool/img/ETS2/companies/dans_jardin.dds new file mode 100644 index 00000000..83bfc4b4 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/dans_jardin.dds differ diff --git a/TS SE Tool/img/ETS2/companies/dobr_ferm_bg.dds b/TS SE Tool/img/ETS2/companies/dobr_ferm_bg.dds new file mode 100644 index 00000000..e64d89f3 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/dobr_ferm_bg.dds differ diff --git a/TS SE Tool/img/ETS2/companies/domdepo.dds b/TS SE Tool/img/ETS2/companies/domdepo.dds new file mode 100644 index 00000000..97442dde Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/domdepo.dds differ diff --git a/TS SE Tool/img/ETS2/companies/domdepo_ru.dds b/TS SE Tool/img/ETS2/companies/domdepo_ru.dds new file mode 100644 index 00000000..d072900e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/domdepo_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/drekkar.dds b/TS SE Tool/img/ETS2/companies/drekkar.dds new file mode 100644 index 00000000..b329ce49 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/drekkar.dds differ diff --git a/TS SE Tool/img/ETS2/companies/dulcis.dds b/TS SE Tool/img/ETS2/companies/dulcis.dds new file mode 100644 index 00000000..d25818f6 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/dulcis.dds differ diff --git a/TS SE Tool/img/ETS2/companies/eco.dds b/TS SE Tool/img/ETS2/companies/eco.dds new file mode 100644 index 00000000..4ddb853b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/eco.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ee_paper.dds b/TS SE Tool/img/ETS2/companies/ee_paper.dds new file mode 100644 index 00000000..c3602c52 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ee_paper.dds differ diff --git a/TS SE Tool/img/ETS2/companies/egres.dds b/TS SE Tool/img/ETS2/companies/egres.dds new file mode 100644 index 00000000..34b82fa6 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/egres.dds differ diff --git a/TS SE Tool/img/ETS2/companies/elcano.dds b/TS SE Tool/img/ETS2/companies/elcano.dds new file mode 100644 index 00000000..2b01eb0a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/elcano.dds differ diff --git a/TS SE Tool/img/ETS2/companies/engeron.dds b/TS SE Tool/img/ETS2/companies/engeron.dds new file mode 100644 index 00000000..bba1d503 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/engeron.dds differ diff --git a/TS SE Tool/img/ETS2/companies/eolo_lines.dds b/TS SE Tool/img/ETS2/companies/eolo_lines.dds new file mode 100644 index 00000000..f2f5963a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/eolo_lines.dds differ diff --git a/TS SE Tool/img/ETS2/companies/eppa.dds b/TS SE Tool/img/ETS2/companies/eppa.dds new file mode 100644 index 00000000..2c9790a6 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/eppa.dds differ diff --git a/TS SE Tool/img/ETS2/companies/euroacres.dds b/TS SE Tool/img/ETS2/companies/euroacres.dds new file mode 100644 index 00000000..7549a37b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/euroacres.dds differ diff --git a/TS SE Tool/img/ETS2/companies/eurogoodies.dds b/TS SE Tool/img/ETS2/companies/eurogoodies.dds new file mode 100644 index 00000000..e4c22253 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/eurogoodies.dds differ diff --git a/TS SE Tool/img/ETS2/companies/eviksi.dds b/TS SE Tool/img/ETS2/companies/eviksi.dds new file mode 100644 index 00000000..e4176262 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/eviksi.dds differ diff --git a/TS SE Tool/img/ETS2/companies/exomar.dds b/TS SE Tool/img/ETS2/companies/exomar.dds new file mode 100644 index 00000000..aad6cf76 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/exomar.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fallow.dds b/TS SE Tool/img/ETS2/companies/fallow.dds new file mode 100644 index 00000000..1b6ff34b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fallow.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fattoria_f.dds b/TS SE Tool/img/ETS2/companies/fattoria_f.dds new file mode 100644 index 00000000..14d2f931 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fattoria_f.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fcp.dds b/TS SE Tool/img/ETS2/companies/fcp.dds new file mode 100644 index 00000000..c3895b6e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fcp.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fintyre.dds b/TS SE Tool/img/ETS2/companies/fintyre.dds new file mode 100644 index 00000000..4ea57292 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fintyre.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fintyre_ru.dds b/TS SE Tool/img/ETS2/companies/fintyre_ru.dds new file mode 100644 index 00000000..8459316b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fintyre_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fle.dds b/TS SE Tool/img/ETS2/companies/fle.dds new file mode 100644 index 00000000..16779d6a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fle.dds differ diff --git a/TS SE Tool/img/ETS2/companies/fui.dds b/TS SE Tool/img/ETS2/companies/fui.dds new file mode 100644 index 00000000..a016bbed Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/fui.dds differ diff --git a/TS SE Tool/img/ETS2/companies/gallia_ferry.dds b/TS SE Tool/img/ETS2/companies/gallia_ferry.dds new file mode 100644 index 00000000..06c40bca Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/gallia_ferry.dds differ diff --git a/TS SE Tool/img/ETS2/companies/globeur.dds b/TS SE Tool/img/ETS2/companies/globeur.dds new file mode 100644 index 00000000..cf778e19 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/globeur.dds differ diff --git a/TS SE Tool/img/ETS2/companies/gnt.dds b/TS SE Tool/img/ETS2/companies/gnt.dds new file mode 100644 index 00000000..15e21a6f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/gnt.dds differ diff --git a/TS SE Tool/img/ETS2/companies/gomme_monde.dds b/TS SE Tool/img/ETS2/companies/gomme_monde.dds new file mode 100644 index 00000000..a9d01abf Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/gomme_monde.dds differ diff --git a/TS SE Tool/img/ETS2/companies/huerta.dds b/TS SE Tool/img/ETS2/companies/huerta.dds new file mode 100644 index 00000000..54aa500b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/huerta.dds differ diff --git a/TS SE Tool/img/ETS2/companies/huilant.dds b/TS SE Tool/img/ETS2/companies/huilant.dds new file mode 100644 index 00000000..7048943f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/huilant.dds differ diff --git a/TS SE Tool/img/ETS2/companies/iberatomica.dds b/TS SE Tool/img/ETS2/companies/iberatomica.dds new file mode 100644 index 00000000..1f6c92fd Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/iberatomica.dds differ diff --git a/TS SE Tool/img/ETS2/companies/iberialines.dds b/TS SE Tool/img/ETS2/companies/iberialines.dds new file mode 100644 index 00000000..710d7ea6 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/iberialines.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ibp.dds b/TS SE Tool/img/ETS2/companies/ibp.dds new file mode 100644 index 00000000..ed19f6c3 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ibp.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ika_bohag.dds b/TS SE Tool/img/ETS2/companies/ika_bohag.dds new file mode 100644 index 00000000..a24de27f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ika_bohag.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ika_ru.dds b/TS SE Tool/img/ETS2/companies/ika_ru.dds new file mode 100644 index 00000000..b3530ed3 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ika_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/imp_otel.dds b/TS SE Tool/img/ETS2/companies/imp_otel.dds new file mode 100644 index 00000000..02798d6b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/imp_otel.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ini.dds b/TS SE Tool/img/ETS2/companies/ini.dds new file mode 100644 index 00000000..5d398fed Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ini.dds differ diff --git a/TS SE Tool/img/ETS2/companies/itcc.dds b/TS SE Tool/img/ETS2/companies/itcc.dds new file mode 100644 index 00000000..445a0c4b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/itcc.dds differ diff --git a/TS SE Tool/img/ETS2/companies/kaarfor.dds b/TS SE Tool/img/ETS2/companies/kaarfor.dds new file mode 100644 index 00000000..26fe22f2 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/kaarfor.dds differ diff --git a/TS SE Tool/img/ETS2/companies/kamen_ru.dds b/TS SE Tool/img/ETS2/companies/kamen_ru.dds new file mode 100644 index 00000000..ebd769b0 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/kamen_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/kivi.dds b/TS SE Tool/img/ETS2/companies/kivi.dds new file mode 100644 index 00000000..6a3970fb Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/kivi.dds differ diff --git a/TS SE Tool/img/ETS2/companies/kolico.dds b/TS SE Tool/img/ETS2/companies/kolico.dds new file mode 100644 index 00000000..1783fc4b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/kolico.dds differ diff --git a/TS SE Tool/img/ETS2/companies/konstnr.dds b/TS SE Tool/img/ETS2/companies/konstnr.dds new file mode 100644 index 00000000..81475262 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/konstnr.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ladoga.dds b/TS SE Tool/img/ETS2/companies/ladoga.dds new file mode 100644 index 00000000..96778b36 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ladoga.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ladoga_ru.dds b/TS SE Tool/img/ETS2/companies/ladoga_ru.dds new file mode 100644 index 00000000..6a9016ac Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ladoga_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lateds.dds b/TS SE Tool/img/ETS2/companies/lateds.dds new file mode 100644 index 00000000..9b9607dc Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lateds.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lavish_food.dds b/TS SE Tool/img/ETS2/companies/lavish_food.dds new file mode 100644 index 00000000..5368bdf5 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lavish_food.dds differ diff --git a/TS SE Tool/img/ETS2/companies/libellula.dds b/TS SE Tool/img/ETS2/companies/libellula.dds new file mode 100644 index 00000000..a2e9b4e9 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/libellula.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lintukainen.dds b/TS SE Tool/img/ETS2/companies/lintukainen.dds new file mode 100644 index 00000000..62b207b0 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lintukainen.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lisette_log.dds b/TS SE Tool/img/ETS2/companies/lisette_log.dds new file mode 100644 index 00000000..09efceff Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lisette_log.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lkwlog.dds b/TS SE Tool/img/ETS2/companies/lkwlog.dds new file mode 100644 index 00000000..02370e69 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lkwlog.dds differ diff --git a/TS SE Tool/img/ETS2/companies/log_atlan.dds b/TS SE Tool/img/ETS2/companies/log_atlan.dds new file mode 100644 index 00000000..d318a4d7 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/log_atlan.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lognstick.dds b/TS SE Tool/img/ETS2/companies/lognstick.dds new file mode 100644 index 00000000..b57db4dc Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lognstick.dds differ diff --git a/TS SE Tool/img/ETS2/companies/low_field.dds b/TS SE Tool/img/ETS2/companies/low_field.dds new file mode 100644 index 00000000..3a08fe0d Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/low_field.dds differ diff --git a/TS SE Tool/img/ETS2/companies/lvr.dds b/TS SE Tool/img/ETS2/companies/lvr.dds new file mode 100644 index 00000000..f4708542 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/lvr.dds differ diff --git a/TS SE Tool/img/ETS2/companies/marina.dds b/TS SE Tool/img/ETS2/companies/marina.dds new file mode 100644 index 00000000..72d16f5e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/marina.dds differ diff --git a/TS SE Tool/img/ETS2/companies/marina_fr.dds b/TS SE Tool/img/ETS2/companies/marina_fr.dds new file mode 100644 index 00000000..2d807640 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/marina_fr.dds differ diff --git a/TS SE Tool/img/ETS2/companies/marina_it.dds b/TS SE Tool/img/ETS2/companies/marina_it.dds new file mode 100644 index 00000000..258c4a6e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/marina_it.dds differ diff --git a/TS SE Tool/img/ETS2/companies/marmo.dds b/TS SE Tool/img/ETS2/companies/marmo.dds new file mode 100644 index 00000000..b2743417 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/marmo.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ms_stein.dds b/TS SE Tool/img/ETS2/companies/ms_stein.dds new file mode 100644 index 00000000..c0739f19 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ms_stein.dds differ diff --git a/TS SE Tool/img/ETS2/companies/mvm_carriere.dds b/TS SE Tool/img/ETS2/companies/mvm_carriere.dds new file mode 100644 index 00000000..27e1b965 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/mvm_carriere.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nbfc.dds b/TS SE Tool/img/ETS2/companies/nbfc.dds new file mode 100644 index 00000000..6b8a250e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nbfc.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nch.dds b/TS SE Tool/img/ETS2/companies/nch.dds new file mode 100644 index 00000000..319fc1da Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nch.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nch_ru.dds b/TS SE Tool/img/ETS2/companies/nch_ru.dds new file mode 100644 index 00000000..bc809283 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nch_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nord_crown.dds b/TS SE Tool/img/ETS2/companies/nord_crown.dds new file mode 100644 index 00000000..f9924f55 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nord_crown.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nord_sten.dds b/TS SE Tool/img/ETS2/companies/nord_sten.dds new file mode 100644 index 00000000..9cdb5595 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nord_sten.dds differ diff --git a/TS SE Tool/img/ETS2/companies/norr_food.dds b/TS SE Tool/img/ETS2/companies/norr_food.dds new file mode 100644 index 00000000..17cd7a7a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/norr_food.dds differ diff --git a/TS SE Tool/img/ETS2/companies/norrsken.dds b/TS SE Tool/img/ETS2/companies/norrsken.dds new file mode 100644 index 00000000..a7538cdc Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/norrsken.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nos_pat.dds b/TS SE Tool/img/ETS2/companies/nos_pat.dds new file mode 100644 index 00000000..58b56623 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nos_pat.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nosko.dds b/TS SE Tool/img/ETS2/companies/nosko.dds new file mode 100644 index 00000000..f5416da1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nosko.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ns_chem.dds b/TS SE Tool/img/ETS2/companies/ns_chem.dds new file mode 100644 index 00000000..a5bd9a8e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ns_chem.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ns_chem_ru.dds b/TS SE Tool/img/ETS2/companies/ns_chem_ru.dds new file mode 100644 index 00000000..a3abe4ba Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ns_chem_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ns_oil.dds b/TS SE Tool/img/ETS2/companies/ns_oil.dds new file mode 100644 index 00000000..44cb54de Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ns_oil.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ns_oil_ru.dds b/TS SE Tool/img/ETS2/companies/ns_oil_ru.dds new file mode 100644 index 00000000..a2cb8079 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ns_oil_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/nucleon.dds b/TS SE Tool/img/ETS2/companies/nucleon.dds new file mode 100644 index 00000000..60603a3e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/nucleon.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ocean_sol.dds b/TS SE Tool/img/ETS2/companies/ocean_sol.dds new file mode 100644 index 00000000..a6f00b7b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ocean_sol.dds differ diff --git a/TS SE Tool/img/ETS2/companies/onnelik.dds b/TS SE Tool/img/ETS2/companies/onnelik.dds new file mode 100644 index 00000000..2bd0304e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/onnelik.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ortiz.dds b/TS SE Tool/img/ETS2/companies/ortiz.dds new file mode 100644 index 00000000..0726b299 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ortiz.dds differ diff --git a/TS SE Tool/img/ETS2/companies/piac.dds b/TS SE Tool/img/ETS2/companies/piac.dds new file mode 100644 index 00000000..4ec1e0e0 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/piac.dds differ diff --git a/TS SE Tool/img/ETS2/companies/pk_medved_ru.dds b/TS SE Tool/img/ETS2/companies/pk_medved_ru.dds new file mode 100644 index 00000000..d65dffca Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/pk_medved_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/polar_fish.dds b/TS SE Tool/img/ETS2/companies/polar_fish.dds new file mode 100644 index 00000000..b1948c1a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/polar_fish.dds differ diff --git a/TS SE Tool/img/ETS2/companies/polarislines.dds b/TS SE Tool/img/ETS2/companies/polarislines.dds new file mode 100644 index 00000000..300d2960 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/polarislines.dds differ diff --git a/TS SE Tool/img/ETS2/companies/port_de_conteneur.dds b/TS SE Tool/img/ETS2/companies/port_de_conteneur.dds new file mode 100644 index 00000000..e835eaa0 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/port_de_conteneur.dds differ diff --git a/TS SE Tool/img/ETS2/companies/posped.dds b/TS SE Tool/img/ETS2/companies/posped.dds new file mode 100644 index 00000000..e0da01b2 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/posped.dds differ diff --git a/TS SE Tool/img/ETS2/companies/pp_chimica.dds b/TS SE Tool/img/ETS2/companies/pp_chimica.dds new file mode 100644 index 00000000..b2f20408 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/pp_chimica.dds differ diff --git a/TS SE Tool/img/ETS2/companies/quadrelli.dds b/TS SE Tool/img/ETS2/companies/quadrelli.dds new file mode 100644 index 00000000..524ea4ce Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/quadrelli.dds differ diff --git a/TS SE Tool/img/ETS2/companies/quarry.dds b/TS SE Tool/img/ETS2/companies/quarry.dds new file mode 100644 index 00000000..1f8c5bf1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/quarry.dds differ diff --git a/TS SE Tool/img/ETS2/companies/radus.dds b/TS SE Tool/img/ETS2/companies/radus.dds new file mode 100644 index 00000000..3cd04949 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/radus.dds differ diff --git a/TS SE Tool/img/ETS2/companies/radus_ru.dds b/TS SE Tool/img/ETS2/companies/radus_ru.dds new file mode 100644 index 00000000..9d144651 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/radus_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/renar.dds b/TS SE Tool/img/ETS2/companies/renar.dds new file mode 100644 index 00000000..08c08755 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/renar.dds differ diff --git a/TS SE Tool/img/ETS2/companies/renat.dds b/TS SE Tool/img/ETS2/companies/renat.dds new file mode 100644 index 00000000..1722e4fc Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/renat.dds differ diff --git a/TS SE Tool/img/ETS2/companies/rimaf.dds b/TS SE Tool/img/ETS2/companies/rimaf.dds new file mode 100644 index 00000000..b449f740 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/rimaf.dds differ diff --git a/TS SE Tool/img/ETS2/companies/rock_eater.dds b/TS SE Tool/img/ETS2/companies/rock_eater.dds new file mode 100644 index 00000000..8247cf07 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/rock_eater.dds differ diff --git a/TS SE Tool/img/ETS2/companies/rosmark.dds b/TS SE Tool/img/ETS2/companies/rosmark.dds new file mode 100644 index 00000000..a1b7e7a1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/rosmark.dds differ diff --git a/TS SE Tool/img/ETS2/companies/rosmark_ru.dds b/TS SE Tool/img/ETS2/companies/rosmark_ru.dds new file mode 100644 index 00000000..45d77778 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/rosmark_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/rt_log.dds b/TS SE Tool/img/ETS2/companies/rt_log.dds new file mode 100644 index 00000000..d77851fc Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/rt_log.dds differ diff --git a/TS SE Tool/img/ETS2/companies/rump.dds b/TS SE Tool/img/ETS2/companies/rump.dds new file mode 100644 index 00000000..21c838c5 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/rump.dds differ diff --git a/TS SE Tool/img/ETS2/companies/sag_tre.dds b/TS SE Tool/img/ETS2/companies/sag_tre.dds new file mode 100644 index 00000000..d07039c7 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/sag_tre.dds differ diff --git a/TS SE Tool/img/ETS2/companies/sal.dds b/TS SE Tool/img/ETS2/companies/sal.dds new file mode 100644 index 00000000..f517d00c Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/sal.dds differ diff --git a/TS SE Tool/img/ETS2/companies/sal_fi.dds b/TS SE Tool/img/ETS2/companies/sal_fi.dds new file mode 100644 index 00000000..3fc3b51c Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/sal_fi.dds differ diff --git a/TS SE Tool/img/ETS2/companies/sanbuilders.dds b/TS SE Tool/img/ETS2/companies/sanbuilders.dds new file mode 100644 index 00000000..1a9b0edb Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/sanbuilders.dds differ diff --git a/TS SE Tool/img/ETS2/companies/scania.dds b/TS SE Tool/img/ETS2/companies/scania.dds new file mode 100644 index 00000000..baeaac93 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/scania.dds differ diff --git a/TS SE Tool/img/ETS2/companies/scs_paper.dds b/TS SE Tool/img/ETS2/companies/scs_paper.dds new file mode 100644 index 00000000..8af019dd Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/scs_paper.dds differ diff --git a/TS SE Tool/img/ETS2/companies/sellplan.dds b/TS SE Tool/img/ETS2/companies/sellplan.dds new file mode 100644 index 00000000..843b420d Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/sellplan.dds differ diff --git a/TS SE Tool/img/ETS2/companies/severoatm_ru.dds b/TS SE Tool/img/ETS2/companies/severoatm_ru.dds new file mode 100644 index 00000000..0d18f303 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/severoatm_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/skoda.dds b/TS SE Tool/img/ETS2/companies/skoda.dds new file mode 100644 index 00000000..7478f65d Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/skoda.dds differ diff --git a/TS SE Tool/img/ETS2/companies/spinelli.dds b/TS SE Tool/img/ETS2/companies/spinelli.dds new file mode 100644 index 00000000..7e492750 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/spinelli.dds differ diff --git a/TS SE Tool/img/ETS2/companies/sporklift.dds b/TS SE Tool/img/ETS2/companies/sporklift.dds new file mode 100644 index 00000000..f2bfca64 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/sporklift.dds differ diff --git a/TS SE Tool/img/ETS2/companies/st_roza_bg.dds b/TS SE Tool/img/ETS2/companies/st_roza_bg.dds new file mode 100644 index 00000000..36f05c55 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/st_roza_bg.dds differ diff --git a/TS SE Tool/img/ETS2/companies/stokes.dds b/TS SE Tool/img/ETS2/companies/stokes.dds new file mode 100644 index 00000000..5bdec441 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/stokes.dds differ diff --git a/TS SE Tool/img/ETS2/companies/subse.dds b/TS SE Tool/img/ETS2/companies/subse.dds new file mode 100644 index 00000000..66e54878 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/subse.dds differ diff --git a/TS SE Tool/img/ETS2/companies/supercesta.dds b/TS SE Tool/img/ETS2/companies/supercesta.dds new file mode 100644 index 00000000..55853eef Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/supercesta.dds differ diff --git a/TS SE Tool/img/ETS2/companies/suprema.dds b/TS SE Tool/img/ETS2/companies/suprema.dds new file mode 100644 index 00000000..e84fac61 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/suprema.dds differ diff --git a/TS SE Tool/img/ETS2/companies/suprema_ru.dds b/TS SE Tool/img/ETS2/companies/suprema_ru.dds new file mode 100644 index 00000000..bb0f2d93 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/suprema_ru.dds differ diff --git a/TS SE Tool/img/ETS2/companies/tdc_auto.dds b/TS SE Tool/img/ETS2/companies/tdc_auto.dds new file mode 100644 index 00000000..88ad91db Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/tdc_auto.dds differ diff --git a/TS SE Tool/img/ETS2/companies/te_logistica.dds b/TS SE Tool/img/ETS2/companies/te_logistica.dds new file mode 100644 index 00000000..3e82de1d Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/te_logistica.dds differ diff --git a/TS SE Tool/img/ETS2/companies/tesore_gust.dds b/TS SE Tool/img/ETS2/companies/tesore_gust.dds new file mode 100644 index 00000000..4e04635a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/tesore_gust.dds differ diff --git a/TS SE Tool/img/ETS2/companies/timberturtle.dds b/TS SE Tool/img/ETS2/companies/timberturtle.dds new file mode 100644 index 00000000..b9179d6a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/timberturtle.dds differ diff --git a/TS SE Tool/img/ETS2/companies/tm_istanbul.dds b/TS SE Tool/img/ETS2/companies/tm_istanbul.dds new file mode 100644 index 00000000..aea8e0e1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/tm_istanbul.dds differ diff --git a/TS SE Tool/img/ETS2/companies/tradeaux.dds b/TS SE Tool/img/ETS2/companies/tradeaux.dds new file mode 100644 index 00000000..65713284 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/tradeaux.dds differ diff --git a/TS SE Tool/img/ETS2/companies/trainfoundry.dds b/TS SE Tool/img/ETS2/companies/trainfoundry.dds new file mode 100644 index 00000000..0d4f456a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/trainfoundry.dds differ diff --git a/TS SE Tool/img/ETS2/companies/trameri.dds b/TS SE Tool/img/ETS2/companies/trameri.dds new file mode 100644 index 00000000..cb77dea1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/trameri.dds differ diff --git a/TS SE Tool/img/ETS2/companies/trans_cab.dds b/TS SE Tool/img/ETS2/companies/trans_cab.dds new file mode 100644 index 00000000..302afc04 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/trans_cab.dds differ diff --git a/TS SE Tool/img/ETS2/companies/transinet.dds b/TS SE Tool/img/ETS2/companies/transinet.dds new file mode 100644 index 00000000..8c8b2ea1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/transinet.dds differ diff --git a/TS SE Tool/img/ETS2/companies/tras_med.dds b/TS SE Tool/img/ETS2/companies/tras_med.dds new file mode 100644 index 00000000..24122c9a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/tras_med.dds differ diff --git a/TS SE Tool/img/ETS2/companies/tree_et.dds b/TS SE Tool/img/ETS2/companies/tree_et.dds new file mode 100644 index 00000000..3a2cfc06 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/tree_et.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ts_atlas.dds b/TS SE Tool/img/ETS2/companies/ts_atlas.dds new file mode 100644 index 00000000..89e092d1 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ts_atlas.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ttk_bg.dds b/TS SE Tool/img/ETS2/companies/ttk_bg.dds new file mode 100644 index 00000000..1d762497 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ttk_bg.dds differ diff --git a/TS SE Tool/img/ETS2/companies/ukko.dds b/TS SE Tool/img/ETS2/companies/ukko.dds new file mode 100644 index 00000000..1188e75b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/ukko.dds differ diff --git a/TS SE Tool/img/ETS2/companies/viljo_paper.dds b/TS SE Tool/img/ETS2/companies/viljo_paper.dds new file mode 100644 index 00000000..d7e4a09e Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/viljo_paper.dds differ diff --git a/TS SE Tool/img/ETS2/companies/viln_paper.dds b/TS SE Tool/img/ETS2/companies/viln_paper.dds new file mode 100644 index 00000000..97897b22 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/viln_paper.dds differ diff --git a/TS SE Tool/img/ETS2/companies/vitas_pwr.dds b/TS SE Tool/img/ETS2/companies/vitas_pwr.dds new file mode 100644 index 00000000..22ca85b0 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/vitas_pwr.dds differ diff --git a/TS SE Tool/img/ETS2/companies/voitureux.dds b/TS SE Tool/img/ETS2/companies/voitureux.dds new file mode 100644 index 00000000..6f0b09db Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/voitureux.dds differ diff --git a/TS SE Tool/img/ETS2/companies/volvo.dds b/TS SE Tool/img/ETS2/companies/volvo.dds new file mode 100644 index 00000000..ffe98d0f Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/volvo.dds differ diff --git a/TS SE Tool/img/ETS2/companies/vpc.dds b/TS SE Tool/img/ETS2/companies/vpc.dds new file mode 100644 index 00000000..8bae1a4a Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/vpc.dds differ diff --git a/TS SE Tool/img/ETS2/companies/wgcc.dds b/TS SE Tool/img/ETS2/companies/wgcc.dds new file mode 100644 index 00000000..3dc32ccb Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/wgcc.dds differ diff --git a/TS SE Tool/img/ETS2/companies/wilnet_trans.dds b/TS SE Tool/img/ETS2/companies/wilnet_trans.dds new file mode 100644 index 00000000..ff98705b Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/wilnet_trans.dds differ diff --git a/TS SE Tool/img/ETS2/companies/zelenye.dds b/TS SE Tool/img/ETS2/companies/zelenye.dds new file mode 100644 index 00000000..cbeb12a9 Binary files /dev/null and b/TS SE Tool/img/ETS2/companies/zelenye.dds differ diff --git a/TS SE Tool/img/ETS2/engine.dds b/TS SE Tool/img/ETS2/engine.dds new file mode 100644 index 00000000..b0658282 Binary files /dev/null and b/TS SE Tool/img/ETS2/engine.dds differ diff --git a/TS SE Tool/img/ETS2/game_n.dds b/TS SE Tool/img/ETS2/game_n.dds new file mode 100644 index 00000000..41172c73 Binary files /dev/null and b/TS SE Tool/img/ETS2/game_n.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/b_police.dds b/TS SE Tool/img/ETS2/lp/austria/b_police.dds new file mode 100644 index 00000000..a62cc08f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/b_police.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/b_police.mat b/TS SE Tool/img/ETS2/lp/austria/b_police.mat new file mode 100644 index 00000000..6f6f7805 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/b_police.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b_police.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/b_police.tobj b/TS SE Tool/img/ETS2/lp/austria/b_police.tobj new file mode 100644 index 00000000..200e99e6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/b_police.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/front.dds b/TS SE Tool/img/ETS2/lp/austria/front.dds new file mode 100644 index 00000000..08656355 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/front.mat b/TS SE Tool/img/ETS2/lp/austria/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/front.tobj b/TS SE Tool/img/ETS2/lp/austria/front.tobj new file mode 100644 index 00000000..b7d1846b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/g.dds b/TS SE Tool/img/ETS2/lp/austria/g.dds new file mode 100644 index 00000000..972cf092 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/g.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/g.mat b/TS SE Tool/img/ETS2/lp/austria/g.mat new file mode 100644 index 00000000..aa291669 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/g.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "g.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/g.tobj b/TS SE Tool/img/ETS2/lp/austria/g.tobj new file mode 100644 index 00000000..d4fa3520 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/g.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/i.dds b/TS SE Tool/img/ETS2/lp/austria/i.dds new file mode 100644 index 00000000..5472b55e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/i.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/i.mat b/TS SE Tool/img/ETS2/lp/austria/i.mat new file mode 100644 index 00000000..d56a76c6 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/i.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "i.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/i.tobj b/TS SE Tool/img/ETS2/lp/austria/i.tobj new file mode 100644 index 00000000..6fab960d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/i.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/k.dds b/TS SE Tool/img/ETS2/lp/austria/k.dds new file mode 100644 index 00000000..d50c006b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/k.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/k.mat b/TS SE Tool/img/ETS2/lp/austria/k.mat new file mode 100644 index 00000000..3837f386 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/k.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "k.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/k.tobj b/TS SE Tool/img/ETS2/lp/austria/k.tobj new file mode 100644 index 00000000..0c7365f9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/k.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/l.dds b/TS SE Tool/img/ETS2/lp/austria/l.dds new file mode 100644 index 00000000..4d1609dc Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/l.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/l.mat b/TS SE Tool/img/ETS2/lp/austria/l.mat new file mode 100644 index 00000000..a2c8f2ca --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/l.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "l.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/l.tobj b/TS SE Tool/img/ETS2/lp/austria/l.tobj new file mode 100644 index 00000000..8e557d7f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/l.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/ma.dds b/TS SE Tool/img/ETS2/lp/austria/ma.dds new file mode 100644 index 00000000..69788ae7 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/ma.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/ma.mat b/TS SE Tool/img/ETS2/lp/austria/ma.mat new file mode 100644 index 00000000..6412e37d --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/ma.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "ma.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/ma.tobj b/TS SE Tool/img/ETS2/lp/austria/ma.tobj new file mode 100644 index 00000000..2ec6b10d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/ma.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/police_front.mat b/TS SE Tool/img/ETS2/lp/austria/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/police_rear.mat b/TS SE Tool/img/ETS2/lp/austria/police_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/rear.mat b/TS SE Tool/img/ETS2/lp/austria/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/ri.dds b/TS SE Tool/img/ETS2/lp/austria/ri.dds new file mode 100644 index 00000000..3b1e3c3d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/ri.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/ri.mat b/TS SE Tool/img/ETS2/lp/austria/ri.mat new file mode 100644 index 00000000..e42fbcca --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/ri.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "ri.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/ri.tobj b/TS SE Tool/img/ETS2/lp/austria/ri.tobj new file mode 100644 index 00000000..71d82246 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/ri.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/s.dds b/TS SE Tool/img/ETS2/lp/austria/s.dds new file mode 100644 index 00000000..ebcce1d0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/s.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/s.mat b/TS SE Tool/img/ETS2/lp/austria/s.mat new file mode 100644 index 00000000..958151bd --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/s.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "s.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/s.tobj b/TS SE Tool/img/ETS2/lp/austria/s.tobj new file mode 100644 index 00000000..63d94e1f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/s.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/austria/trailer.mat b/TS SE Tool/img/ETS2/lp/austria/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/truck_front.mat b/TS SE Tool/img/ETS2/lp/austria/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/truck_rear.mat b/TS SE Tool/img/ETS2/lp/austria/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/w.dds b/TS SE Tool/img/ETS2/lp/austria/w.dds new file mode 100644 index 00000000..de3cd199 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/w.dds differ diff --git a/TS SE Tool/img/ETS2/lp/austria/w.mat b/TS SE Tool/img/ETS2/lp/austria/w.mat new file mode 100644 index 00000000..68850c4a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/austria/w.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "w.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/austria/w.tobj b/TS SE Tool/img/ETS2/lp/austria/w.tobj new file mode 100644 index 00000000..86594951 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/austria/w.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/belgium/front.dds b/TS SE Tool/img/ETS2/lp/belgium/front.dds new file mode 100644 index 00000000..f676f8ca Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/belgium/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/belgium/front.mat b/TS SE Tool/img/ETS2/lp/belgium/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/belgium/front.tobj b/TS SE Tool/img/ETS2/lp/belgium/front.tobj new file mode 100644 index 00000000..99333408 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/belgium/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/belgium/police_front.mat b/TS SE Tool/img/ETS2/lp/belgium/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/belgium/police_rear.mat b/TS SE Tool/img/ETS2/lp/belgium/police_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/belgium/rear.mat b/TS SE Tool/img/ETS2/lp/belgium/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/belgium/trailer.mat b/TS SE Tool/img/ETS2/lp/belgium/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/belgium/truck_front.mat b/TS SE Tool/img/ETS2/lp/belgium/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/belgium/truck_rear.mat b/TS SE Tool/img/ETS2/lp/belgium/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/belgium/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/front.mat b/TS SE Tool/img/ETS2/lp/bulgaria/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/bulgaria/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/rear.dds b/TS SE Tool/img/ETS2/lp/bulgaria/rear.dds new file mode 100644 index 00000000..74fb1575 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/bulgaria/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/rear.mat b/TS SE Tool/img/ETS2/lp/bulgaria/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/bulgaria/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/rear.tobj b/TS SE Tool/img/ETS2/lp/bulgaria/rear.tobj new file mode 100644 index 00000000..a95ddcdb Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/bulgaria/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/trailer.mat b/TS SE Tool/img/ETS2/lp/bulgaria/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/bulgaria/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/truck_front.mat b/TS SE Tool/img/ETS2/lp/bulgaria/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/bulgaria/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/bulgaria/truck_rear.mat b/TS SE Tool/img/ETS2/lp/bulgaria/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/bulgaria/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/b.dds b/TS SE Tool/img/ETS2/lp/czech/b.dds new file mode 100644 index 00000000..ea3596a0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/czech/b.dds differ diff --git a/TS SE Tool/img/ETS2/lp/czech/b.mat b/TS SE Tool/img/ETS2/lp/czech/b.mat new file mode 100644 index 00000000..2622b499 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/b.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/b.tobj b/TS SE Tool/img/ETS2/lp/czech/b.tobj new file mode 100644 index 00000000..05078e63 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/czech/b.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/czech/front.mat b/TS SE Tool/img/ETS2/lp/czech/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/frontb.dds b/TS SE Tool/img/ETS2/lp/czech/frontb.dds new file mode 100644 index 00000000..9e80c305 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/czech/frontb.dds differ diff --git a/TS SE Tool/img/ETS2/lp/czech/frontb.mat b/TS SE Tool/img/ETS2/lp/czech/frontb.mat new file mode 100644 index 00000000..418ab497 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/frontb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "frontb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/frontb.tobj b/TS SE Tool/img/ETS2/lp/czech/frontb.tobj new file mode 100644 index 00000000..47c90255 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/czech/frontb.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/czech/police_front.mat b/TS SE Tool/img/ETS2/lp/czech/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/police_frontb.mat b/TS SE Tool/img/ETS2/lp/czech/police_frontb.mat new file mode 100644 index 00000000..418ab497 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/police_frontb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "frontb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/police_rear.mat b/TS SE Tool/img/ETS2/lp/czech/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/police_rearb.mat b/TS SE Tool/img/ETS2/lp/czech/police_rearb.mat new file mode 100644 index 00000000..2622b499 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/police_rearb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/rear.dds b/TS SE Tool/img/ETS2/lp/czech/rear.dds new file mode 100644 index 00000000..5454aa63 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/czech/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/czech/rear.mat b/TS SE Tool/img/ETS2/lp/czech/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/rear.tobj b/TS SE Tool/img/ETS2/lp/czech/rear.tobj new file mode 100644 index 00000000..477813ec Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/czech/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/czech/rearb.mat b/TS SE Tool/img/ETS2/lp/czech/rearb.mat new file mode 100644 index 00000000..2622b499 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/rearb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/trailer.mat b/TS SE Tool/img/ETS2/lp/czech/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/trailerb.mat b/TS SE Tool/img/ETS2/lp/czech/trailerb.mat new file mode 100644 index 00000000..2622b499 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/trailerb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/truck_front.mat b/TS SE Tool/img/ETS2/lp/czech/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/truck_frontb.mat b/TS SE Tool/img/ETS2/lp/czech/truck_frontb.mat new file mode 100644 index 00000000..418ab497 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/truck_frontb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "frontb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/truck_rear.mat b/TS SE Tool/img/ETS2/lp/czech/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/czech/truck_rearb.mat b/TS SE Tool/img/ETS2/lp/czech/truck_rearb.mat new file mode 100644 index 00000000..2622b499 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/czech/truck_rearb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/front.mat b/TS SE Tool/img/ETS2/lp/denmark/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/police_front.mat b/TS SE Tool/img/ETS2/lp/denmark/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/police_rear.mat b/TS SE Tool/img/ETS2/lp/denmark/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/rear.dds b/TS SE Tool/img/ETS2/lp/denmark/rear.dds new file mode 100644 index 00000000..e17bacef Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/denmark/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/denmark/rear.mat b/TS SE Tool/img/ETS2/lp/denmark/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/rear.tobj b/TS SE Tool/img/ETS2/lp/denmark/rear.tobj new file mode 100644 index 00000000..8326dc12 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/denmark/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/denmark/trailer.mat b/TS SE Tool/img/ETS2/lp/denmark/trailer.mat new file mode 100644 index 00000000..2cd8ef29 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/truck_front.mat b/TS SE Tool/img/ETS2/lp/denmark/truck_front.mat new file mode 100644 index 00000000..2cd8ef29 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/truck_rear.dds b/TS SE Tool/img/ETS2/lp/denmark/truck_rear.dds new file mode 100644 index 00000000..507cc34f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/denmark/truck_rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/denmark/truck_rear.mat b/TS SE Tool/img/ETS2/lp/denmark/truck_rear.mat new file mode 100644 index 00000000..2cd8ef29 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/denmark/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "truck_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/denmark/truck_rear.tobj b/TS SE Tool/img/ETS2/lp/denmark/truck_rear.tobj new file mode 100644 index 00000000..b30fe069 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/denmark/truck_rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/estonia/front.mat b/TS SE Tool/img/ETS2/lp/estonia/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/estonia/police_front.mat b/TS SE Tool/img/ETS2/lp/estonia/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/estonia/police_rear.mat b/TS SE Tool/img/ETS2/lp/estonia/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/estonia/rear.dds b/TS SE Tool/img/ETS2/lp/estonia/rear.dds new file mode 100644 index 00000000..8c683ff6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/estonia/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/estonia/rear.mat b/TS SE Tool/img/ETS2/lp/estonia/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/estonia/rear.tobj b/TS SE Tool/img/ETS2/lp/estonia/rear.tobj new file mode 100644 index 00000000..45a44862 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/estonia/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/estonia/trailer.mat b/TS SE Tool/img/ETS2/lp/estonia/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/estonia/truck_front.mat b/TS SE Tool/img/ETS2/lp/estonia/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/estonia/truck_rear.mat b/TS SE Tool/img/ETS2/lp/estonia/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/estonia/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/front.mat b/TS SE Tool/img/ETS2/lp/finland/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/police_front.mat b/TS SE Tool/img/ETS2/lp/finland/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/police_rear.mat b/TS SE Tool/img/ETS2/lp/finland/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/rear.dds b/TS SE Tool/img/ETS2/lp/finland/rear.dds new file mode 100644 index 00000000..d732d977 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/finland/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/finland/rear.mat b/TS SE Tool/img/ETS2/lp/finland/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/rear.tobj b/TS SE Tool/img/ETS2/lp/finland/rear.tobj new file mode 100644 index 00000000..af30a3bf Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/finland/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/finland/trailer.mat b/TS SE Tool/img/ETS2/lp/finland/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/truck_front.mat b/TS SE Tool/img/ETS2/lp/finland/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/finland/truck_rear.mat b/TS SE Tool/img/ETS2/lp/finland/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/finland/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/01.dds b/TS SE Tool/img/ETS2/lp/france/01.dds new file mode 100644 index 00000000..5ef36d55 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/01.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/01.mat b/TS SE Tool/img/ETS2/lp/france/01.mat new file mode 100644 index 00000000..e84f6603 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/01.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "01.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/01.tobj b/TS SE Tool/img/ETS2/lp/france/01.tobj new file mode 100644 index 00000000..fa039547 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/01.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/02.dds b/TS SE Tool/img/ETS2/lp/france/02.dds new file mode 100644 index 00000000..66e6c940 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/02.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/02.mat b/TS SE Tool/img/ETS2/lp/france/02.mat new file mode 100644 index 00000000..7ba52d65 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/02.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "02.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/02.tobj b/TS SE Tool/img/ETS2/lp/france/02.tobj new file mode 100644 index 00000000..c2af792d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/02.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/03.dds b/TS SE Tool/img/ETS2/lp/france/03.dds new file mode 100644 index 00000000..287228e6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/03.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/03.mat b/TS SE Tool/img/ETS2/lp/france/03.mat new file mode 100644 index 00000000..1fd37dc4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/03.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "03.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/03.tobj b/TS SE Tool/img/ETS2/lp/france/03.tobj new file mode 100644 index 00000000..cff68544 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/03.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/04.dds b/TS SE Tool/img/ETS2/lp/france/04.dds new file mode 100644 index 00000000..5191467a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/04.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/04.mat b/TS SE Tool/img/ETS2/lp/france/04.mat new file mode 100644 index 00000000..46b6304f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/04.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "04.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/04.tobj b/TS SE Tool/img/ETS2/lp/france/04.tobj new file mode 100644 index 00000000..d5ad02ed Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/04.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/05.dds b/TS SE Tool/img/ETS2/lp/france/05.dds new file mode 100644 index 00000000..c136b2cc Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/05.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/05.mat b/TS SE Tool/img/ETS2/lp/france/05.mat new file mode 100644 index 00000000..e686c56f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/05.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "05.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/05.tobj b/TS SE Tool/img/ETS2/lp/france/05.tobj new file mode 100644 index 00000000..13f0f3b1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/05.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/06.dds b/TS SE Tool/img/ETS2/lp/france/06.dds new file mode 100644 index 00000000..7eeefed2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/06.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/06.mat b/TS SE Tool/img/ETS2/lp/france/06.mat new file mode 100644 index 00000000..2e0c07a6 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/06.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "06.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/06.tobj b/TS SE Tool/img/ETS2/lp/france/06.tobj new file mode 100644 index 00000000..5fe8a891 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/06.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/07.dds b/TS SE Tool/img/ETS2/lp/france/07.dds new file mode 100644 index 00000000..40948858 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/07.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/07.mat b/TS SE Tool/img/ETS2/lp/france/07.mat new file mode 100644 index 00000000..fad60672 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/07.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "07.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/07.tobj b/TS SE Tool/img/ETS2/lp/france/07.tobj new file mode 100644 index 00000000..c62d95b4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/07.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/08.dds b/TS SE Tool/img/ETS2/lp/france/08.dds new file mode 100644 index 00000000..64f6bdd2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/08.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/08.mat b/TS SE Tool/img/ETS2/lp/france/08.mat new file mode 100644 index 00000000..d3384660 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/08.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "08.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/08.tobj b/TS SE Tool/img/ETS2/lp/france/08.tobj new file mode 100644 index 00000000..c49198eb Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/08.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/09.dds b/TS SE Tool/img/ETS2/lp/france/09.dds new file mode 100644 index 00000000..70855518 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/09.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/09.mat b/TS SE Tool/img/ETS2/lp/france/09.mat new file mode 100644 index 00000000..e5917852 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/09.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "09.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/09.tobj b/TS SE Tool/img/ETS2/lp/france/09.tobj new file mode 100644 index 00000000..0ca35b6f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/09.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/10.dds b/TS SE Tool/img/ETS2/lp/france/10.dds new file mode 100644 index 00000000..53675f0b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/10.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/10.mat b/TS SE Tool/img/ETS2/lp/france/10.mat new file mode 100644 index 00000000..a3cf7a17 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/10.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "10.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/10.tobj b/TS SE Tool/img/ETS2/lp/france/10.tobj new file mode 100644 index 00000000..23f1332b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/10.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/11.dds b/TS SE Tool/img/ETS2/lp/france/11.dds new file mode 100644 index 00000000..0d0c53e3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/11.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/11.mat b/TS SE Tool/img/ETS2/lp/france/11.mat new file mode 100644 index 00000000..ebe94e12 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/11.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "11.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/11.tobj b/TS SE Tool/img/ETS2/lp/france/11.tobj new file mode 100644 index 00000000..fee9b7ed Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/11.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/12.dds b/TS SE Tool/img/ETS2/lp/france/12.dds new file mode 100644 index 00000000..89da4eb0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/12.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/12.mat b/TS SE Tool/img/ETS2/lp/france/12.mat new file mode 100644 index 00000000..27ae8ae0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/12.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "12.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/12.tobj b/TS SE Tool/img/ETS2/lp/france/12.tobj new file mode 100644 index 00000000..82513c6b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/12.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/13.dds b/TS SE Tool/img/ETS2/lp/france/13.dds new file mode 100644 index 00000000..b5cc3807 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/13.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/13.mat b/TS SE Tool/img/ETS2/lp/france/13.mat new file mode 100644 index 00000000..4c2c3f59 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/13.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "13.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/13.tobj b/TS SE Tool/img/ETS2/lp/france/13.tobj new file mode 100644 index 00000000..bb43247e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/13.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/14.dds b/TS SE Tool/img/ETS2/lp/france/14.dds new file mode 100644 index 00000000..f1a157e4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/14.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/14.mat b/TS SE Tool/img/ETS2/lp/france/14.mat new file mode 100644 index 00000000..a2aac49e --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/14.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "14.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/14.tobj b/TS SE Tool/img/ETS2/lp/france/14.tobj new file mode 100644 index 00000000..d3a9f4c0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/14.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/15.dds b/TS SE Tool/img/ETS2/lp/france/15.dds new file mode 100644 index 00000000..f049a3e1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/15.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/15.mat b/TS SE Tool/img/ETS2/lp/france/15.mat new file mode 100644 index 00000000..a54bb4ee --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/15.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "15.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/15.tobj b/TS SE Tool/img/ETS2/lp/france/15.tobj new file mode 100644 index 00000000..c0f966f4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/15.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/16.dds b/TS SE Tool/img/ETS2/lp/france/16.dds new file mode 100644 index 00000000..148c596a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/16.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/16.mat b/TS SE Tool/img/ETS2/lp/france/16.mat new file mode 100644 index 00000000..1895518f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/16.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "16.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/16.tobj b/TS SE Tool/img/ETS2/lp/france/16.tobj new file mode 100644 index 00000000..dddd7661 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/16.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/17.dds b/TS SE Tool/img/ETS2/lp/france/17.dds new file mode 100644 index 00000000..9c0a361a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/17.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/17.mat b/TS SE Tool/img/ETS2/lp/france/17.mat new file mode 100644 index 00000000..fd0ded19 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/17.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "17.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/17.tobj b/TS SE Tool/img/ETS2/lp/france/17.tobj new file mode 100644 index 00000000..6a676d96 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/17.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/18.dds b/TS SE Tool/img/ETS2/lp/france/18.dds new file mode 100644 index 00000000..7e90312e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/18.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/18.mat b/TS SE Tool/img/ETS2/lp/france/18.mat new file mode 100644 index 00000000..a7456f26 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/18.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "18.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/18.tobj b/TS SE Tool/img/ETS2/lp/france/18.tobj new file mode 100644 index 00000000..d42b2afd Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/18.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/19.dds b/TS SE Tool/img/ETS2/lp/france/19.dds new file mode 100644 index 00000000..59ce31aa Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/19.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/19.mat b/TS SE Tool/img/ETS2/lp/france/19.mat new file mode 100644 index 00000000..8a314633 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/19.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "19.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/19.tobj b/TS SE Tool/img/ETS2/lp/france/19.tobj new file mode 100644 index 00000000..50859fe5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/19.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/21.dds b/TS SE Tool/img/ETS2/lp/france/21.dds new file mode 100644 index 00000000..e54d8d97 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/21.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/21.mat b/TS SE Tool/img/ETS2/lp/france/21.mat new file mode 100644 index 00000000..3e21d877 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/21.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "21.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/21.tobj b/TS SE Tool/img/ETS2/lp/france/21.tobj new file mode 100644 index 00000000..445cd211 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/21.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/22.dds b/TS SE Tool/img/ETS2/lp/france/22.dds new file mode 100644 index 00000000..b50ebc41 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/22.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/22.mat b/TS SE Tool/img/ETS2/lp/france/22.mat new file mode 100644 index 00000000..6c582cd2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/22.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "22.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/22.tobj b/TS SE Tool/img/ETS2/lp/france/22.tobj new file mode 100644 index 00000000..b66bd533 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/22.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/23.dds b/TS SE Tool/img/ETS2/lp/france/23.dds new file mode 100644 index 00000000..4edcf6e8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/23.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/23.mat b/TS SE Tool/img/ETS2/lp/france/23.mat new file mode 100644 index 00000000..05e9268f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/23.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "23.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/23.tobj b/TS SE Tool/img/ETS2/lp/france/23.tobj new file mode 100644 index 00000000..08aaa40d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/23.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/24.dds b/TS SE Tool/img/ETS2/lp/france/24.dds new file mode 100644 index 00000000..a4e97925 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/24.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/24.mat b/TS SE Tool/img/ETS2/lp/france/24.mat new file mode 100644 index 00000000..b9ce1834 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/24.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "24.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/24.tobj b/TS SE Tool/img/ETS2/lp/france/24.tobj new file mode 100644 index 00000000..e19584a9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/24.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/25.dds b/TS SE Tool/img/ETS2/lp/france/25.dds new file mode 100644 index 00000000..718fa2a3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/25.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/25.mat b/TS SE Tool/img/ETS2/lp/france/25.mat new file mode 100644 index 00000000..57d2b51a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/25.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "25.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/25.tobj b/TS SE Tool/img/ETS2/lp/france/25.tobj new file mode 100644 index 00000000..f66b7c84 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/25.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/26.dds b/TS SE Tool/img/ETS2/lp/france/26.dds new file mode 100644 index 00000000..7062692c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/26.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/26.mat b/TS SE Tool/img/ETS2/lp/france/26.mat new file mode 100644 index 00000000..389e155a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/26.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "26.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/26.tobj b/TS SE Tool/img/ETS2/lp/france/26.tobj new file mode 100644 index 00000000..af8ec7f6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/26.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/27.dds b/TS SE Tool/img/ETS2/lp/france/27.dds new file mode 100644 index 00000000..3282553a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/27.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/27.mat b/TS SE Tool/img/ETS2/lp/france/27.mat new file mode 100644 index 00000000..66272440 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/27.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "27.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/27.tobj b/TS SE Tool/img/ETS2/lp/france/27.tobj new file mode 100644 index 00000000..57bdc8e4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/27.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/28.dds b/TS SE Tool/img/ETS2/lp/france/28.dds new file mode 100644 index 00000000..1dec6a54 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/28.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/28.mat b/TS SE Tool/img/ETS2/lp/france/28.mat new file mode 100644 index 00000000..84f1b877 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/28.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "28.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/28.tobj b/TS SE Tool/img/ETS2/lp/france/28.tobj new file mode 100644 index 00000000..e2bb05a0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/28.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/29.dds b/TS SE Tool/img/ETS2/lp/france/29.dds new file mode 100644 index 00000000..07101044 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/29.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/29.mat b/TS SE Tool/img/ETS2/lp/france/29.mat new file mode 100644 index 00000000..899d7ac1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/29.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "29.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/29.tobj b/TS SE Tool/img/ETS2/lp/france/29.tobj new file mode 100644 index 00000000..72aa3708 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/29.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/2a.dds b/TS SE Tool/img/ETS2/lp/france/2a.dds new file mode 100644 index 00000000..eb46cc22 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/2a.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/2a.mat b/TS SE Tool/img/ETS2/lp/france/2a.mat new file mode 100644 index 00000000..b1742bd9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/2a.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "2a.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/2a.tobj b/TS SE Tool/img/ETS2/lp/france/2a.tobj new file mode 100644 index 00000000..0e4316b4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/2a.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/2b.dds b/TS SE Tool/img/ETS2/lp/france/2b.dds new file mode 100644 index 00000000..cd9aa596 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/2b.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/2b.mat b/TS SE Tool/img/ETS2/lp/france/2b.mat new file mode 100644 index 00000000..fc78e41d --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/2b.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "2b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/2b.tobj b/TS SE Tool/img/ETS2/lp/france/2b.tobj new file mode 100644 index 00000000..f8314865 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/2b.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/30.dds b/TS SE Tool/img/ETS2/lp/france/30.dds new file mode 100644 index 00000000..dafc168a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/30.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/30.mat b/TS SE Tool/img/ETS2/lp/france/30.mat new file mode 100644 index 00000000..342d8c52 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/30.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "30.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/30.tobj b/TS SE Tool/img/ETS2/lp/france/30.tobj new file mode 100644 index 00000000..d54cd354 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/30.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/31.dds b/TS SE Tool/img/ETS2/lp/france/31.dds new file mode 100644 index 00000000..d2dff170 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/31.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/31.mat b/TS SE Tool/img/ETS2/lp/france/31.mat new file mode 100644 index 00000000..156b426e --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/31.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "31.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/31.tobj b/TS SE Tool/img/ETS2/lp/france/31.tobj new file mode 100644 index 00000000..e95d4803 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/31.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/32.dds b/TS SE Tool/img/ETS2/lp/france/32.dds new file mode 100644 index 00000000..008449c6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/32.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/32.mat b/TS SE Tool/img/ETS2/lp/france/32.mat new file mode 100644 index 00000000..86016f1b --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/32.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "32.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/32.tobj b/TS SE Tool/img/ETS2/lp/france/32.tobj new file mode 100644 index 00000000..84e78c00 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/32.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/33.dds b/TS SE Tool/img/ETS2/lp/france/33.dds new file mode 100644 index 00000000..5c56b9c1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/33.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/33.mat b/TS SE Tool/img/ETS2/lp/france/33.mat new file mode 100644 index 00000000..454924d2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/33.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "33.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/33.tobj b/TS SE Tool/img/ETS2/lp/france/33.tobj new file mode 100644 index 00000000..7fd0cc93 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/33.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/34.dds b/TS SE Tool/img/ETS2/lp/france/34.dds new file mode 100644 index 00000000..8b9e9e8a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/34.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/34.mat b/TS SE Tool/img/ETS2/lp/france/34.mat new file mode 100644 index 00000000..06b3ec51 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/34.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "34.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/34.tobj b/TS SE Tool/img/ETS2/lp/france/34.tobj new file mode 100644 index 00000000..fcc91cf4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/34.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/35.dds b/TS SE Tool/img/ETS2/lp/france/35.dds new file mode 100644 index 00000000..81eb6b20 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/35.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/35.mat b/TS SE Tool/img/ETS2/lp/france/35.mat new file mode 100644 index 00000000..7f5d3d36 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/35.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "35.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/35.tobj b/TS SE Tool/img/ETS2/lp/france/35.tobj new file mode 100644 index 00000000..97eda9ee Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/35.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/36.dds b/TS SE Tool/img/ETS2/lp/france/36.dds new file mode 100644 index 00000000..ea87fef3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/36.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/36.mat b/TS SE Tool/img/ETS2/lp/france/36.mat new file mode 100644 index 00000000..1eaf69c6 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/36.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "36.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/36.tobj b/TS SE Tool/img/ETS2/lp/france/36.tobj new file mode 100644 index 00000000..961af9b8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/36.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/37.dds b/TS SE Tool/img/ETS2/lp/france/37.dds new file mode 100644 index 00000000..2bbd09e1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/37.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/37.mat b/TS SE Tool/img/ETS2/lp/france/37.mat new file mode 100644 index 00000000..41b1300a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/37.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "37.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/37.tobj b/TS SE Tool/img/ETS2/lp/france/37.tobj new file mode 100644 index 00000000..7ac587ab Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/37.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/38.dds b/TS SE Tool/img/ETS2/lp/france/38.dds new file mode 100644 index 00000000..30e6ec33 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/38.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/38.mat b/TS SE Tool/img/ETS2/lp/france/38.mat new file mode 100644 index 00000000..b791edd9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/38.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "38.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/38.tobj b/TS SE Tool/img/ETS2/lp/france/38.tobj new file mode 100644 index 00000000..62e198a5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/38.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/39.dds b/TS SE Tool/img/ETS2/lp/france/39.dds new file mode 100644 index 00000000..3ecd9dfe Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/39.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/39.mat b/TS SE Tool/img/ETS2/lp/france/39.mat new file mode 100644 index 00000000..d7330dc5 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/39.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "39.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/39.tobj b/TS SE Tool/img/ETS2/lp/france/39.tobj new file mode 100644 index 00000000..3d4c9af4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/39.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/40.dds b/TS SE Tool/img/ETS2/lp/france/40.dds new file mode 100644 index 00000000..e01819e9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/40.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/40.mat b/TS SE Tool/img/ETS2/lp/france/40.mat new file mode 100644 index 00000000..a1b2a64a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/40.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "40.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/40.tobj b/TS SE Tool/img/ETS2/lp/france/40.tobj new file mode 100644 index 00000000..25e9f6b9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/40.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/41.dds b/TS SE Tool/img/ETS2/lp/france/41.dds new file mode 100644 index 00000000..f317b584 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/41.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/41.mat b/TS SE Tool/img/ETS2/lp/france/41.mat new file mode 100644 index 00000000..72044e1d --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/41.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "41.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/41.tobj b/TS SE Tool/img/ETS2/lp/france/41.tobj new file mode 100644 index 00000000..8597c17e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/41.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/42.dds b/TS SE Tool/img/ETS2/lp/france/42.dds new file mode 100644 index 00000000..a164a43f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/42.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/42.mat b/TS SE Tool/img/ETS2/lp/france/42.mat new file mode 100644 index 00000000..8ff3ae08 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/42.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "42.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/42.tobj b/TS SE Tool/img/ETS2/lp/france/42.tobj new file mode 100644 index 00000000..51ee9c62 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/42.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/43.dds b/TS SE Tool/img/ETS2/lp/france/43.dds new file mode 100644 index 00000000..88855c34 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/43.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/43.mat b/TS SE Tool/img/ETS2/lp/france/43.mat new file mode 100644 index 00000000..e1bf61e0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/43.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "43.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/43.tobj b/TS SE Tool/img/ETS2/lp/france/43.tobj new file mode 100644 index 00000000..5874a7b9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/43.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/44.dds b/TS SE Tool/img/ETS2/lp/france/44.dds new file mode 100644 index 00000000..d5378e48 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/44.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/44.mat b/TS SE Tool/img/ETS2/lp/france/44.mat new file mode 100644 index 00000000..57dee53c --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/44.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "44.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/44.tobj b/TS SE Tool/img/ETS2/lp/france/44.tobj new file mode 100644 index 00000000..d801e6f1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/44.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/45.dds b/TS SE Tool/img/ETS2/lp/france/45.dds new file mode 100644 index 00000000..a162e2d2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/45.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/45.mat b/TS SE Tool/img/ETS2/lp/france/45.mat new file mode 100644 index 00000000..bc475211 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/45.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "45.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/45.tobj b/TS SE Tool/img/ETS2/lp/france/45.tobj new file mode 100644 index 00000000..e9f9243a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/45.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/46.dds b/TS SE Tool/img/ETS2/lp/france/46.dds new file mode 100644 index 00000000..80719b3b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/46.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/46.mat b/TS SE Tool/img/ETS2/lp/france/46.mat new file mode 100644 index 00000000..c28391c4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/46.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "46.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/46.tobj b/TS SE Tool/img/ETS2/lp/france/46.tobj new file mode 100644 index 00000000..88214f30 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/46.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/47.dds b/TS SE Tool/img/ETS2/lp/france/47.dds new file mode 100644 index 00000000..62971c2a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/47.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/47.mat b/TS SE Tool/img/ETS2/lp/france/47.mat new file mode 100644 index 00000000..f41c662e --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/47.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "47.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/47.tobj b/TS SE Tool/img/ETS2/lp/france/47.tobj new file mode 100644 index 00000000..0b64bb25 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/47.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/48.dds b/TS SE Tool/img/ETS2/lp/france/48.dds new file mode 100644 index 00000000..d7b056de Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/48.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/48.mat b/TS SE Tool/img/ETS2/lp/france/48.mat new file mode 100644 index 00000000..3f20e0dd --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/48.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "48.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/48.tobj b/TS SE Tool/img/ETS2/lp/france/48.tobj new file mode 100644 index 00000000..e9b74a9b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/48.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/49.dds b/TS SE Tool/img/ETS2/lp/france/49.dds new file mode 100644 index 00000000..7f1be12e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/49.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/49.mat b/TS SE Tool/img/ETS2/lp/france/49.mat new file mode 100644 index 00000000..d6fb07f9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/49.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "49.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/49.tobj b/TS SE Tool/img/ETS2/lp/france/49.tobj new file mode 100644 index 00000000..20e212f8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/49.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/50.dds b/TS SE Tool/img/ETS2/lp/france/50.dds new file mode 100644 index 00000000..5b84877f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/50.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/50.mat b/TS SE Tool/img/ETS2/lp/france/50.mat new file mode 100644 index 00000000..c617e531 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/50.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "50.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/50.tobj b/TS SE Tool/img/ETS2/lp/france/50.tobj new file mode 100644 index 00000000..40e0b2c8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/50.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/51.dds b/TS SE Tool/img/ETS2/lp/france/51.dds new file mode 100644 index 00000000..b0b94b80 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/51.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/51.mat b/TS SE Tool/img/ETS2/lp/france/51.mat new file mode 100644 index 00000000..8b327504 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/51.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "51.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/51.tobj b/TS SE Tool/img/ETS2/lp/france/51.tobj new file mode 100644 index 00000000..9bc10528 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/51.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/52.dds b/TS SE Tool/img/ETS2/lp/france/52.dds new file mode 100644 index 00000000..76786f37 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/52.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/52.mat b/TS SE Tool/img/ETS2/lp/france/52.mat new file mode 100644 index 00000000..6e37bf99 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/52.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "52.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/52.tobj b/TS SE Tool/img/ETS2/lp/france/52.tobj new file mode 100644 index 00000000..8647c66d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/52.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/53.dds b/TS SE Tool/img/ETS2/lp/france/53.dds new file mode 100644 index 00000000..ba777328 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/53.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/53.mat b/TS SE Tool/img/ETS2/lp/france/53.mat new file mode 100644 index 00000000..7ba0689a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/53.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "53.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/53.tobj b/TS SE Tool/img/ETS2/lp/france/53.tobj new file mode 100644 index 00000000..d26a0352 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/53.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/54.dds b/TS SE Tool/img/ETS2/lp/france/54.dds new file mode 100644 index 00000000..01b47c16 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/54.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/54.mat b/TS SE Tool/img/ETS2/lp/france/54.mat new file mode 100644 index 00000000..4835fefd --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/54.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "54.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/54.tobj b/TS SE Tool/img/ETS2/lp/france/54.tobj new file mode 100644 index 00000000..901c9927 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/54.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/55.dds b/TS SE Tool/img/ETS2/lp/france/55.dds new file mode 100644 index 00000000..b837fd3f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/55.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/55.mat b/TS SE Tool/img/ETS2/lp/france/55.mat new file mode 100644 index 00000000..bd652170 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/55.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "55.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/55.tobj b/TS SE Tool/img/ETS2/lp/france/55.tobj new file mode 100644 index 00000000..e0c24f0a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/55.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/56.dds b/TS SE Tool/img/ETS2/lp/france/56.dds new file mode 100644 index 00000000..f8f25e02 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/56.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/56.mat b/TS SE Tool/img/ETS2/lp/france/56.mat new file mode 100644 index 00000000..2ae7e7ee --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/56.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "56.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/56.tobj b/TS SE Tool/img/ETS2/lp/france/56.tobj new file mode 100644 index 00000000..97095ddb Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/56.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/57.dds b/TS SE Tool/img/ETS2/lp/france/57.dds new file mode 100644 index 00000000..8b2bfc35 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/57.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/57.mat b/TS SE Tool/img/ETS2/lp/france/57.mat new file mode 100644 index 00000000..d9c9006c --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/57.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "57.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/57.tobj b/TS SE Tool/img/ETS2/lp/france/57.tobj new file mode 100644 index 00000000..ed8147e4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/57.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/58.dds b/TS SE Tool/img/ETS2/lp/france/58.dds new file mode 100644 index 00000000..e4067779 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/58.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/58.mat b/TS SE Tool/img/ETS2/lp/france/58.mat new file mode 100644 index 00000000..b0eb7aa1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/58.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "58.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/58.tobj b/TS SE Tool/img/ETS2/lp/france/58.tobj new file mode 100644 index 00000000..0d1529fc Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/58.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/59.dds b/TS SE Tool/img/ETS2/lp/france/59.dds new file mode 100644 index 00000000..2be1c528 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/59.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/59.mat b/TS SE Tool/img/ETS2/lp/france/59.mat new file mode 100644 index 00000000..eaca55fb --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/59.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "59.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/59.tobj b/TS SE Tool/img/ETS2/lp/france/59.tobj new file mode 100644 index 00000000..ebd20bcf Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/59.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/60.dds b/TS SE Tool/img/ETS2/lp/france/60.dds new file mode 100644 index 00000000..caf29715 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/60.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/60.mat b/TS SE Tool/img/ETS2/lp/france/60.mat new file mode 100644 index 00000000..56ea77a8 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/60.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "60.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/60.tobj b/TS SE Tool/img/ETS2/lp/france/60.tobj new file mode 100644 index 00000000..9bba3048 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/60.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/61.dds b/TS SE Tool/img/ETS2/lp/france/61.dds new file mode 100644 index 00000000..5cc8c47b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/61.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/61.mat b/TS SE Tool/img/ETS2/lp/france/61.mat new file mode 100644 index 00000000..bffad89b --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/61.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "61.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/61.tobj b/TS SE Tool/img/ETS2/lp/france/61.tobj new file mode 100644 index 00000000..2a08f169 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/61.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/62.dds b/TS SE Tool/img/ETS2/lp/france/62.dds new file mode 100644 index 00000000..b0895af7 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/62.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/62.mat b/TS SE Tool/img/ETS2/lp/france/62.mat new file mode 100644 index 00000000..92d6d365 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/62.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "62.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/62.tobj b/TS SE Tool/img/ETS2/lp/france/62.tobj new file mode 100644 index 00000000..3f2291ea Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/62.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/63.dds b/TS SE Tool/img/ETS2/lp/france/63.dds new file mode 100644 index 00000000..69adbf19 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/63.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/63.mat b/TS SE Tool/img/ETS2/lp/france/63.mat new file mode 100644 index 00000000..1b47415e --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/63.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "63.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/63.tobj b/TS SE Tool/img/ETS2/lp/france/63.tobj new file mode 100644 index 00000000..89b95ffb Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/63.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/64.dds b/TS SE Tool/img/ETS2/lp/france/64.dds new file mode 100644 index 00000000..5eb1bf9d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/64.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/64.mat b/TS SE Tool/img/ETS2/lp/france/64.mat new file mode 100644 index 00000000..1973b9a7 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/64.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "64.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/64.tobj b/TS SE Tool/img/ETS2/lp/france/64.tobj new file mode 100644 index 00000000..6d7c05e4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/64.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/65.dds b/TS SE Tool/img/ETS2/lp/france/65.dds new file mode 100644 index 00000000..613c1227 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/65.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/65.mat b/TS SE Tool/img/ETS2/lp/france/65.mat new file mode 100644 index 00000000..00d377b4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/65.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "65.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/65.tobj b/TS SE Tool/img/ETS2/lp/france/65.tobj new file mode 100644 index 00000000..960136e7 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/65.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/66.dds b/TS SE Tool/img/ETS2/lp/france/66.dds new file mode 100644 index 00000000..dea5dcf8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/66.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/66.mat b/TS SE Tool/img/ETS2/lp/france/66.mat new file mode 100644 index 00000000..36a21ec3 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/66.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "66.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/66.tobj b/TS SE Tool/img/ETS2/lp/france/66.tobj new file mode 100644 index 00000000..b2ce62d2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/66.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/67.dds b/TS SE Tool/img/ETS2/lp/france/67.dds new file mode 100644 index 00000000..abcf3994 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/67.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/67.mat b/TS SE Tool/img/ETS2/lp/france/67.mat new file mode 100644 index 00000000..45137a60 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/67.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "67.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/67.tobj b/TS SE Tool/img/ETS2/lp/france/67.tobj new file mode 100644 index 00000000..e9d7d95d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/67.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/68.dds b/TS SE Tool/img/ETS2/lp/france/68.dds new file mode 100644 index 00000000..4630670b Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/68.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/68.mat b/TS SE Tool/img/ETS2/lp/france/68.mat new file mode 100644 index 00000000..74ca56c8 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/68.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "68.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/68.tobj b/TS SE Tool/img/ETS2/lp/france/68.tobj new file mode 100644 index 00000000..e74cc95d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/68.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/69.dds b/TS SE Tool/img/ETS2/lp/france/69.dds new file mode 100644 index 00000000..fc2e0955 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/69.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/69.mat b/TS SE Tool/img/ETS2/lp/france/69.mat new file mode 100644 index 00000000..d0229c3f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/69.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "69.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/69.tobj b/TS SE Tool/img/ETS2/lp/france/69.tobj new file mode 100644 index 00000000..e82f1ad3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/69.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/70.dds b/TS SE Tool/img/ETS2/lp/france/70.dds new file mode 100644 index 00000000..6c18561d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/70.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/70.mat b/TS SE Tool/img/ETS2/lp/france/70.mat new file mode 100644 index 00000000..3187b3d0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/70.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "70.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/70.tobj b/TS SE Tool/img/ETS2/lp/france/70.tobj new file mode 100644 index 00000000..0d2f57fa Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/70.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/71.dds b/TS SE Tool/img/ETS2/lp/france/71.dds new file mode 100644 index 00000000..ebf53c7f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/71.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/71.mat b/TS SE Tool/img/ETS2/lp/france/71.mat new file mode 100644 index 00000000..29864d44 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/71.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "71.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/71.tobj b/TS SE Tool/img/ETS2/lp/france/71.tobj new file mode 100644 index 00000000..dd727b17 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/71.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/72.dds b/TS SE Tool/img/ETS2/lp/france/72.dds new file mode 100644 index 00000000..b14bfa94 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/72.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/72.mat b/TS SE Tool/img/ETS2/lp/france/72.mat new file mode 100644 index 00000000..680f640d --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/72.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "72.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/72.tobj b/TS SE Tool/img/ETS2/lp/france/72.tobj new file mode 100644 index 00000000..f04849f2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/72.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/73.dds b/TS SE Tool/img/ETS2/lp/france/73.dds new file mode 100644 index 00000000..926bf692 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/73.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/73.mat b/TS SE Tool/img/ETS2/lp/france/73.mat new file mode 100644 index 00000000..10aad971 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/73.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "73.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/73.tobj b/TS SE Tool/img/ETS2/lp/france/73.tobj new file mode 100644 index 00000000..2d95653a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/73.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/74.dds b/TS SE Tool/img/ETS2/lp/france/74.dds new file mode 100644 index 00000000..0eb2cff1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/74.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/74.mat b/TS SE Tool/img/ETS2/lp/france/74.mat new file mode 100644 index 00000000..da3235cc --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/74.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "74.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/74.tobj b/TS SE Tool/img/ETS2/lp/france/74.tobj new file mode 100644 index 00000000..704ddd06 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/74.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/75.dds b/TS SE Tool/img/ETS2/lp/france/75.dds new file mode 100644 index 00000000..68c0eab4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/75.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/75.mat b/TS SE Tool/img/ETS2/lp/france/75.mat new file mode 100644 index 00000000..0dac049a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/75.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "75.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/75.tobj b/TS SE Tool/img/ETS2/lp/france/75.tobj new file mode 100644 index 00000000..27c38cf6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/75.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/76.dds b/TS SE Tool/img/ETS2/lp/france/76.dds new file mode 100644 index 00000000..f0f95d57 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/76.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/76.mat b/TS SE Tool/img/ETS2/lp/france/76.mat new file mode 100644 index 00000000..7da97aea --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/76.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "76.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/76.tobj b/TS SE Tool/img/ETS2/lp/france/76.tobj new file mode 100644 index 00000000..0819b10e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/76.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/77.dds b/TS SE Tool/img/ETS2/lp/france/77.dds new file mode 100644 index 00000000..447a024a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/77.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/77.mat b/TS SE Tool/img/ETS2/lp/france/77.mat new file mode 100644 index 00000000..a720c837 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/77.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "77.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/77.tobj b/TS SE Tool/img/ETS2/lp/france/77.tobj new file mode 100644 index 00000000..15348ab3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/77.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/78.dds b/TS SE Tool/img/ETS2/lp/france/78.dds new file mode 100644 index 00000000..9ac9e319 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/78.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/78.mat b/TS SE Tool/img/ETS2/lp/france/78.mat new file mode 100644 index 00000000..bed263f0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/78.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "78.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/78.tobj b/TS SE Tool/img/ETS2/lp/france/78.tobj new file mode 100644 index 00000000..56ab0fab Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/78.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/79.dds b/TS SE Tool/img/ETS2/lp/france/79.dds new file mode 100644 index 00000000..891c4fa2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/79.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/79.mat b/TS SE Tool/img/ETS2/lp/france/79.mat new file mode 100644 index 00000000..820c79c5 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/79.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "79.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/79.tobj b/TS SE Tool/img/ETS2/lp/france/79.tobj new file mode 100644 index 00000000..2d62b0d5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/79.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/80.dds b/TS SE Tool/img/ETS2/lp/france/80.dds new file mode 100644 index 00000000..3a326aeb Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/80.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/80.mat b/TS SE Tool/img/ETS2/lp/france/80.mat new file mode 100644 index 00000000..a0271643 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/80.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "80.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/80.tobj b/TS SE Tool/img/ETS2/lp/france/80.tobj new file mode 100644 index 00000000..617d461c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/80.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/81.dds b/TS SE Tool/img/ETS2/lp/france/81.dds new file mode 100644 index 00000000..fab199f5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/81.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/81.mat b/TS SE Tool/img/ETS2/lp/france/81.mat new file mode 100644 index 00000000..74b76944 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/81.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "81.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/81.tobj b/TS SE Tool/img/ETS2/lp/france/81.tobj new file mode 100644 index 00000000..d41adebd Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/81.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/82.dds b/TS SE Tool/img/ETS2/lp/france/82.dds new file mode 100644 index 00000000..e1a4ff2c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/82.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/82.mat b/TS SE Tool/img/ETS2/lp/france/82.mat new file mode 100644 index 00000000..79825897 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/82.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "82.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/82.tobj b/TS SE Tool/img/ETS2/lp/france/82.tobj new file mode 100644 index 00000000..82ddff56 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/82.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/83.dds b/TS SE Tool/img/ETS2/lp/france/83.dds new file mode 100644 index 00000000..6ad3b8a1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/83.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/83.mat b/TS SE Tool/img/ETS2/lp/france/83.mat new file mode 100644 index 00000000..cbb6dc2a --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/83.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "83.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/83.tobj b/TS SE Tool/img/ETS2/lp/france/83.tobj new file mode 100644 index 00000000..f78f20d3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/83.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/84.dds b/TS SE Tool/img/ETS2/lp/france/84.dds new file mode 100644 index 00000000..6e5c52b2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/84.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/84.mat b/TS SE Tool/img/ETS2/lp/france/84.mat new file mode 100644 index 00000000..5fa556e8 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/84.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "84.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/84.tobj b/TS SE Tool/img/ETS2/lp/france/84.tobj new file mode 100644 index 00000000..8ce54ec5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/84.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/85.dds b/TS SE Tool/img/ETS2/lp/france/85.dds new file mode 100644 index 00000000..0dfbfc09 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/85.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/85.mat b/TS SE Tool/img/ETS2/lp/france/85.mat new file mode 100644 index 00000000..f5607097 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/85.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "85.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/85.tobj b/TS SE Tool/img/ETS2/lp/france/85.tobj new file mode 100644 index 00000000..a3d1f9bd Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/85.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/86.dds b/TS SE Tool/img/ETS2/lp/france/86.dds new file mode 100644 index 00000000..3826abf5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/86.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/86.mat b/TS SE Tool/img/ETS2/lp/france/86.mat new file mode 100644 index 00000000..26e70bc8 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/86.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "86.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/86.tobj b/TS SE Tool/img/ETS2/lp/france/86.tobj new file mode 100644 index 00000000..756a5252 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/86.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/87.dds b/TS SE Tool/img/ETS2/lp/france/87.dds new file mode 100644 index 00000000..4e0786f4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/87.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/87.mat b/TS SE Tool/img/ETS2/lp/france/87.mat new file mode 100644 index 00000000..da4c94ae --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/87.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "87.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/87.tobj b/TS SE Tool/img/ETS2/lp/france/87.tobj new file mode 100644 index 00000000..ac78e90c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/87.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/88.dds b/TS SE Tool/img/ETS2/lp/france/88.dds new file mode 100644 index 00000000..0a3ed8e0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/88.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/88.mat b/TS SE Tool/img/ETS2/lp/france/88.mat new file mode 100644 index 00000000..6b362024 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/88.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "88.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/88.tobj b/TS SE Tool/img/ETS2/lp/france/88.tobj new file mode 100644 index 00000000..52fb8a02 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/88.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/89.dds b/TS SE Tool/img/ETS2/lp/france/89.dds new file mode 100644 index 00000000..f9b7fbf1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/89.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/89.mat b/TS SE Tool/img/ETS2/lp/france/89.mat new file mode 100644 index 00000000..a9eeea80 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/89.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "89.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/89.tobj b/TS SE Tool/img/ETS2/lp/france/89.tobj new file mode 100644 index 00000000..d1eb42dd Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/89.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/90.dds b/TS SE Tool/img/ETS2/lp/france/90.dds new file mode 100644 index 00000000..0651a69e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/90.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/90.mat b/TS SE Tool/img/ETS2/lp/france/90.mat new file mode 100644 index 00000000..d955f3e1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/90.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "90.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/90.tobj b/TS SE Tool/img/ETS2/lp/france/90.tobj new file mode 100644 index 00000000..a1f4c282 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/90.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/91.dds b/TS SE Tool/img/ETS2/lp/france/91.dds new file mode 100644 index 00000000..7f775a1c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/91.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/91.mat b/TS SE Tool/img/ETS2/lp/france/91.mat new file mode 100644 index 00000000..b45f46cc --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/91.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "91.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/91.tobj b/TS SE Tool/img/ETS2/lp/france/91.tobj new file mode 100644 index 00000000..bc52ca1f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/91.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/92.dds b/TS SE Tool/img/ETS2/lp/france/92.dds new file mode 100644 index 00000000..0bd3215e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/92.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/92.mat b/TS SE Tool/img/ETS2/lp/france/92.mat new file mode 100644 index 00000000..c01f6059 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/92.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "92.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/92.tobj b/TS SE Tool/img/ETS2/lp/france/92.tobj new file mode 100644 index 00000000..a5b99524 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/92.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/93.dds b/TS SE Tool/img/ETS2/lp/france/93.dds new file mode 100644 index 00000000..e38318c3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/93.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/93.mat b/TS SE Tool/img/ETS2/lp/france/93.mat new file mode 100644 index 00000000..f4d31bfa --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/93.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "93.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/93.tobj b/TS SE Tool/img/ETS2/lp/france/93.tobj new file mode 100644 index 00000000..4115eff2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/93.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/94.dds b/TS SE Tool/img/ETS2/lp/france/94.dds new file mode 100644 index 00000000..a2e2783f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/94.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/94.mat b/TS SE Tool/img/ETS2/lp/france/94.mat new file mode 100644 index 00000000..d5a53aab --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/94.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "94.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/94.tobj b/TS SE Tool/img/ETS2/lp/france/94.tobj new file mode 100644 index 00000000..4f5c6b6c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/94.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/95.dds b/TS SE Tool/img/ETS2/lp/france/95.dds new file mode 100644 index 00000000..4c73cc1a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/95.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/95.mat b/TS SE Tool/img/ETS2/lp/france/95.mat new file mode 100644 index 00000000..7c222001 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/95.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "95.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/95.tobj b/TS SE Tool/img/ETS2/lp/france/95.tobj new file mode 100644 index 00000000..c48f2576 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/95.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/front.mat b/TS SE Tool/img/ETS2/lp/france/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/police_front.mat b/TS SE Tool/img/ETS2/lp/france/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/police_rear.mat b/TS SE Tool/img/ETS2/lp/france/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/rear.dds b/TS SE Tool/img/ETS2/lp/france/rear.dds new file mode 100644 index 00000000..f78c1500 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/france/rear.mat b/TS SE Tool/img/ETS2/lp/france/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/rear.tobj b/TS SE Tool/img/ETS2/lp/france/rear.tobj new file mode 100644 index 00000000..4c38d5f3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/france/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/france/trailer.mat b/TS SE Tool/img/ETS2/lp/france/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/truck_front.mat b/TS SE Tool/img/ETS2/lp/france/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/france/truck_rear.mat b/TS SE Tool/img/ETS2/lp/france/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/france/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/b.dds b/TS SE Tool/img/ETS2/lp/germany/b.dds new file mode 100644 index 00000000..545a5c9a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b.dds differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b.mat b/TS SE Tool/img/ETS2/lp/germany/b.mat new file mode 100644 index 00000000..2622b499 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/b.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/b.tobj b/TS SE Tool/img/ETS2/lp/germany/b.tobj new file mode 100644 index 00000000..dcab578f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_1.dds b/TS SE Tool/img/ETS2/lp/germany/b_1.dds new file mode 100644 index 00000000..f8a9d8ba Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_1.dds differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_1.mat b/TS SE Tool/img/ETS2/lp/germany/b_1.mat new file mode 100644 index 00000000..7fdf4395 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/b_1.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b_1.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/b_1.tobj b/TS SE Tool/img/ETS2/lp/germany/b_1.tobj new file mode 100644 index 00000000..4b6e6d95 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_1.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_2.dds b/TS SE Tool/img/ETS2/lp/germany/b_2.dds new file mode 100644 index 00000000..34c6e172 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_2.dds differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_2.mat b/TS SE Tool/img/ETS2/lp/germany/b_2.mat new file mode 100644 index 00000000..a5d7f557 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/b_2.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b_2.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/b_2.tobj b/TS SE Tool/img/ETS2/lp/germany/b_2.tobj new file mode 100644 index 00000000..e7b24808 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_2.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_3.mat b/TS SE Tool/img/ETS2/lp/germany/b_3.mat new file mode 100644 index 00000000..a5d7f557 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/b_3.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b_2.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/b_3.tobj b/TS SE Tool/img/ETS2/lp/germany/b_3.tobj new file mode 100644 index 00000000..e7b24808 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_3.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_police.dds b/TS SE Tool/img/ETS2/lp/germany/b_police.dds new file mode 100644 index 00000000..919f393c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_police.dds differ diff --git a/TS SE Tool/img/ETS2/lp/germany/b_police.mat b/TS SE Tool/img/ETS2/lp/germany/b_police.mat new file mode 100644 index 00000000..ba4567b1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/b_police.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "b_police.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/b_police.tobj b/TS SE Tool/img/ETS2/lp/germany/b_police.tobj new file mode 100644 index 00000000..9e73e2c4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/b_police.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/germany/front.dds b/TS SE Tool/img/ETS2/lp/germany/front.dds new file mode 100644 index 00000000..476e4982 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/germany/front.mat b/TS SE Tool/img/ETS2/lp/germany/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/front.tobj b/TS SE Tool/img/ETS2/lp/germany/front.tobj new file mode 100644 index 00000000..20dfb02a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/germany/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/germany/police_front.mat b/TS SE Tool/img/ETS2/lp/germany/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/police_rear.mat b/TS SE Tool/img/ETS2/lp/germany/police_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/rear.mat b/TS SE Tool/img/ETS2/lp/germany/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/trailer.mat b/TS SE Tool/img/ETS2/lp/germany/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/truck_front.mat b/TS SE Tool/img/ETS2/lp/germany/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/germany/truck_rear.mat b/TS SE Tool/img/ETS2/lp/germany/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/germany/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/bt.dds b/TS SE Tool/img/ETS2/lp/hungary/bt.dds new file mode 100644 index 00000000..003bc828 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/bt.dds differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/bt.mat b/TS SE Tool/img/ETS2/lp/hungary/bt.mat new file mode 100644 index 00000000..10ce8327 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/bt.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "bt.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/bt.tobj b/TS SE Tool/img/ETS2/lp/hungary/bt.tobj new file mode 100644 index 00000000..ad47a5c6 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/bt.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/front.dds b/TS SE Tool/img/ETS2/lp/hungary/front.dds new file mode 100644 index 00000000..c2052446 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/front.mat b/TS SE Tool/img/ETS2/lp/hungary/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/front.tobj b/TS SE Tool/img/ETS2/lp/hungary/front.tobj new file mode 100644 index 00000000..52b0dbf7 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/frontb.dds b/TS SE Tool/img/ETS2/lp/hungary/frontb.dds new file mode 100644 index 00000000..2cab2921 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/frontb.dds differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/frontb.mat b/TS SE Tool/img/ETS2/lp/hungary/frontb.mat new file mode 100644 index 00000000..418ab497 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/frontb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "frontb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/frontb.tobj b/TS SE Tool/img/ETS2/lp/hungary/frontb.tobj new file mode 100644 index 00000000..02534446 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/frontb.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/police_front.mat b/TS SE Tool/img/ETS2/lp/hungary/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/police_rear.mat b/TS SE Tool/img/ETS2/lp/hungary/police_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/rear.mat b/TS SE Tool/img/ETS2/lp/hungary/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/rearb.dds b/TS SE Tool/img/ETS2/lp/hungary/rearb.dds new file mode 100644 index 00000000..40fc3062 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/rearb.dds differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/rearb.mat b/TS SE Tool/img/ETS2/lp/hungary/rearb.mat new file mode 100644 index 00000000..105b4bce --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/rearb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rearb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/rearb.tobj b/TS SE Tool/img/ETS2/lp/hungary/rearb.tobj new file mode 100644 index 00000000..f99550ac Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/hungary/rearb.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/hungary/trailer.mat b/TS SE Tool/img/ETS2/lp/hungary/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/truck_front.mat b/TS SE Tool/img/ETS2/lp/hungary/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/truck_frontb.mat b/TS SE Tool/img/ETS2/lp/hungary/truck_frontb.mat new file mode 100644 index 00000000..418ab497 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/truck_frontb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "frontb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/truck_rear.mat b/TS SE Tool/img/ETS2/lp/hungary/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/hungary/truck_rearb.mat b/TS SE Tool/img/ETS2/lp/hungary/truck_rearb.mat new file mode 100644 index 00000000..105b4bce --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/hungary/truck_rearb.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rearb.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/front.dds b/TS SE Tool/img/ETS2/lp/italy/front.dds new file mode 100644 index 00000000..977fd465 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/italy/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/italy/front.mat b/TS SE Tool/img/ETS2/lp/italy/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/front.tobj b/TS SE Tool/img/ETS2/lp/italy/front.tobj new file mode 100644 index 00000000..cd0c4c2d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/italy/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/italy/police_front.mat b/TS SE Tool/img/ETS2/lp/italy/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/police_rear.mat b/TS SE Tool/img/ETS2/lp/italy/police_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/rear.mat b/TS SE Tool/img/ETS2/lp/italy/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/trailer.mat b/TS SE Tool/img/ETS2/lp/italy/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/truck_front.mat b/TS SE Tool/img/ETS2/lp/italy/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/italy/truck_rear.mat b/TS SE Tool/img/ETS2/lp/italy/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/italy/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/front.mat b/TS SE Tool/img/ETS2/lp/latvia/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/police_front.mat b/TS SE Tool/img/ETS2/lp/latvia/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/police_rear.mat b/TS SE Tool/img/ETS2/lp/latvia/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/rear.dds b/TS SE Tool/img/ETS2/lp/latvia/rear.dds new file mode 100644 index 00000000..c6f2e787 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/latvia/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/latvia/rear.mat b/TS SE Tool/img/ETS2/lp/latvia/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/rear.tobj b/TS SE Tool/img/ETS2/lp/latvia/rear.tobj new file mode 100644 index 00000000..c33754dc Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/latvia/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/latvia/trailer.mat b/TS SE Tool/img/ETS2/lp/latvia/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/truck_front.mat b/TS SE Tool/img/ETS2/lp/latvia/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/latvia/truck_rear.mat b/TS SE Tool/img/ETS2/lp/latvia/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/latvia/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/front.mat b/TS SE Tool/img/ETS2/lp/lithuania/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/police_front.mat b/TS SE Tool/img/ETS2/lp/lithuania/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/police_rear.mat b/TS SE Tool/img/ETS2/lp/lithuania/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/rear.dds b/TS SE Tool/img/ETS2/lp/lithuania/rear.dds new file mode 100644 index 00000000..34efc668 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/lithuania/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/lithuania/rear.mat b/TS SE Tool/img/ETS2/lp/lithuania/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/rear.tobj b/TS SE Tool/img/ETS2/lp/lithuania/rear.tobj new file mode 100644 index 00000000..d8be8248 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/lithuania/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/lithuania/trailer.mat b/TS SE Tool/img/ETS2/lp/lithuania/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/truck_front.mat b/TS SE Tool/img/ETS2/lp/lithuania/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/lithuania/truck_rear.mat b/TS SE Tool/img/ETS2/lp/lithuania/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/lithuania/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/front.mat b/TS SE Tool/img/ETS2/lp/luxembourg/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/police_front.mat b/TS SE Tool/img/ETS2/lp/luxembourg/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/police_rear.mat b/TS SE Tool/img/ETS2/lp/luxembourg/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/rear.dds b/TS SE Tool/img/ETS2/lp/luxembourg/rear.dds new file mode 100644 index 00000000..d3467139 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/luxembourg/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/rear.mat b/TS SE Tool/img/ETS2/lp/luxembourg/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/rear.tobj b/TS SE Tool/img/ETS2/lp/luxembourg/rear.tobj new file mode 100644 index 00000000..4d611a15 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/luxembourg/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/trailer.mat b/TS SE Tool/img/ETS2/lp/luxembourg/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/truck_front.mat b/TS SE Tool/img/ETS2/lp/luxembourg/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/luxembourg/truck_rear.mat b/TS SE Tool/img/ETS2/lp/luxembourg/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/luxembourg/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/front.mat b/TS SE Tool/img/ETS2/lp/netherlands/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/police_front.mat b/TS SE Tool/img/ETS2/lp/netherlands/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/police_rear.mat b/TS SE Tool/img/ETS2/lp/netherlands/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/rear.dds b/TS SE Tool/img/ETS2/lp/netherlands/rear.dds new file mode 100644 index 00000000..06604816 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/netherlands/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/netherlands/rear.mat b/TS SE Tool/img/ETS2/lp/netherlands/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/rear.tobj b/TS SE Tool/img/ETS2/lp/netherlands/rear.tobj new file mode 100644 index 00000000..6577a0a1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/netherlands/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/netherlands/trailer.mat b/TS SE Tool/img/ETS2/lp/netherlands/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/truck_front.mat b/TS SE Tool/img/ETS2/lp/netherlands/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/netherlands/truck_rear.mat b/TS SE Tool/img/ETS2/lp/netherlands/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/netherlands/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/front.mat b/TS SE Tool/img/ETS2/lp/norway/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/police_front.mat b/TS SE Tool/img/ETS2/lp/norway/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/police_rear.mat b/TS SE Tool/img/ETS2/lp/norway/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/rear.dds b/TS SE Tool/img/ETS2/lp/norway/rear.dds new file mode 100644 index 00000000..a74093e0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/norway/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/norway/rear.mat b/TS SE Tool/img/ETS2/lp/norway/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/rear.tobj b/TS SE Tool/img/ETS2/lp/norway/rear.tobj new file mode 100644 index 00000000..b3b7ef53 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/norway/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/norway/trailer.mat b/TS SE Tool/img/ETS2/lp/norway/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/truck_front.mat b/TS SE Tool/img/ETS2/lp/norway/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/norway/truck_rear.mat b/TS SE Tool/img/ETS2/lp/norway/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/norway/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/front.mat b/TS SE Tool/img/ETS2/lp/poland/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/police_front.mat b/TS SE Tool/img/ETS2/lp/poland/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/police_rear.mat b/TS SE Tool/img/ETS2/lp/poland/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/rear.dds b/TS SE Tool/img/ETS2/lp/poland/rear.dds new file mode 100644 index 00000000..e30420cf Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/poland/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/poland/rear.mat b/TS SE Tool/img/ETS2/lp/poland/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/rear.tobj b/TS SE Tool/img/ETS2/lp/poland/rear.tobj new file mode 100644 index 00000000..1a2be662 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/poland/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/poland/trailer.mat b/TS SE Tool/img/ETS2/lp/poland/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/truck_front.mat b/TS SE Tool/img/ETS2/lp/poland/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/poland/truck_rear.mat b/TS SE Tool/img/ETS2/lp/poland/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/poland/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/portugal/front.dds b/TS SE Tool/img/ETS2/lp/portugal/front.dds new file mode 100644 index 00000000..481e4bf7 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/portugal/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/portugal/front.mat b/TS SE Tool/img/ETS2/lp/portugal/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/portugal/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/portugal/front.tobj b/TS SE Tool/img/ETS2/lp/portugal/front.tobj new file mode 100644 index 00000000..7f337a70 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/portugal/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/portugal/rear.mat b/TS SE Tool/img/ETS2/lp/portugal/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/portugal/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/portugal/trailer.mat b/TS SE Tool/img/ETS2/lp/portugal/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/portugal/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/portugal/truck_front.mat b/TS SE Tool/img/ETS2/lp/portugal/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/portugal/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/portugal/truck_rear.mat b/TS SE Tool/img/ETS2/lp/portugal/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/portugal/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/romania/front.mat b/TS SE Tool/img/ETS2/lp/romania/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/romania/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/romania/rear.dds b/TS SE Tool/img/ETS2/lp/romania/rear.dds new file mode 100644 index 00000000..84a3dea8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/romania/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/romania/rear.mat b/TS SE Tool/img/ETS2/lp/romania/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/romania/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/romania/rear.tobj b/TS SE Tool/img/ETS2/lp/romania/rear.tobj new file mode 100644 index 00000000..8b5b6879 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/romania/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/romania/trailer.mat b/TS SE Tool/img/ETS2/lp/romania/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/romania/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/romania/truck_front.mat b/TS SE Tool/img/ETS2/lp/romania/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/romania/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/romania/truck_rear.mat b/TS SE Tool/img/ETS2/lp/romania/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/romania/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/front.mat b/TS SE Tool/img/ETS2/lp/russia/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/police_front.mat b/TS SE Tool/img/ETS2/lp/russia/police_front.mat new file mode 100644 index 00000000..cfc2dd48 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/police_rear.dds b/TS SE Tool/img/ETS2/lp/russia/police_rear.dds new file mode 100644 index 00000000..584d7963 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/russia/police_rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/russia/police_rear.mat b/TS SE Tool/img/ETS2/lp/russia/police_rear.mat new file mode 100644 index 00000000..cfc2dd48 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/police_rear.tobj b/TS SE Tool/img/ETS2/lp/russia/police_rear.tobj new file mode 100644 index 00000000..e18e61cb Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/russia/police_rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/russia/rear.dds b/TS SE Tool/img/ETS2/lp/russia/rear.dds new file mode 100644 index 00000000..1fb67e39 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/russia/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/russia/rear.mat b/TS SE Tool/img/ETS2/lp/russia/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/rear.tobj b/TS SE Tool/img/ETS2/lp/russia/rear.tobj new file mode 100644 index 00000000..3acfda76 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/russia/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/russia/trailer.mat b/TS SE Tool/img/ETS2/lp/russia/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/truck_front.mat b/TS SE Tool/img/ETS2/lp/russia/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/russia/truck_rear.mat b/TS SE Tool/img/ETS2/lp/russia/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/russia/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/front.mat b/TS SE Tool/img/ETS2/lp/slovakia/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/police_front.mat b/TS SE Tool/img/ETS2/lp/slovakia/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/police_rear.mat b/TS SE Tool/img/ETS2/lp/slovakia/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/rear.dds b/TS SE Tool/img/ETS2/lp/slovakia/rear.dds new file mode 100644 index 00000000..3459e0f0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/slovakia/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/slovakia/rear.mat b/TS SE Tool/img/ETS2/lp/slovakia/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/rear.tobj b/TS SE Tool/img/ETS2/lp/slovakia/rear.tobj new file mode 100644 index 00000000..30022cf5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/slovakia/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/slovakia/trailer.mat b/TS SE Tool/img/ETS2/lp/slovakia/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/truck_front.mat b/TS SE Tool/img/ETS2/lp/slovakia/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/slovakia/truck_rear.mat b/TS SE Tool/img/ETS2/lp/slovakia/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/slovakia/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/spain/front.dds b/TS SE Tool/img/ETS2/lp/spain/front.dds new file mode 100644 index 00000000..c2391a19 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/spain/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/spain/front.mat b/TS SE Tool/img/ETS2/lp/spain/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/spain/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/spain/front.tobj b/TS SE Tool/img/ETS2/lp/spain/front.tobj new file mode 100644 index 00000000..4bc0314f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/spain/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/spain/police_basq.dds b/TS SE Tool/img/ETS2/lp/spain/police_basq.dds new file mode 100644 index 00000000..1becf7d2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/spain/police_basq.dds differ diff --git a/TS SE Tool/img/ETS2/lp/spain/police_basq.mat b/TS SE Tool/img/ETS2/lp/spain/police_basq.mat new file mode 100644 index 00000000..63644dd4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/spain/police_basq.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_basq.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/spain/police_basq.tobj b/TS SE Tool/img/ETS2/lp/spain/police_basq.tobj new file mode 100644 index 00000000..0015a880 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/spain/police_basq.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/spain/rear.mat b/TS SE Tool/img/ETS2/lp/spain/rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/spain/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/spain/trailer.mat b/TS SE Tool/img/ETS2/lp/spain/trailer.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/spain/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/spain/truck_front.mat b/TS SE Tool/img/ETS2/lp/spain/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/spain/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/spain/truck_rear.mat b/TS SE Tool/img/ETS2/lp/spain/truck_rear.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/spain/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/front.mat b/TS SE Tool/img/ETS2/lp/sweden/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/police_front.mat b/TS SE Tool/img/ETS2/lp/sweden/police_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/police_rear.mat b/TS SE Tool/img/ETS2/lp/sweden/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/rear.dds b/TS SE Tool/img/ETS2/lp/sweden/rear.dds new file mode 100644 index 00000000..d74ee236 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/sweden/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/sweden/rear.mat b/TS SE Tool/img/ETS2/lp/sweden/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/rear.tobj b/TS SE Tool/img/ETS2/lp/sweden/rear.tobj new file mode 100644 index 00000000..145f907d Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/sweden/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/sweden/trailer.mat b/TS SE Tool/img/ETS2/lp/sweden/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/truck_front.mat b/TS SE Tool/img/ETS2/lp/sweden/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/sweden/truck_rear.mat b/TS SE Tool/img/ETS2/lp/sweden/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/sweden/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front.dds b/TS SE Tool/img/ETS2/lp/switzerland/front.dds new file mode 100644 index 00000000..43fc6073 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front.mat b/TS SE Tool/img/ETS2/lp/switzerland/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front.tobj b/TS SE Tool/img/ETS2/lp/switzerland/front.tobj new file mode 100644 index 00000000..51e1abdd Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/front_be.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/front_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_empty.dds b/TS SE Tool/img/ETS2/lp/switzerland/front_empty.dds new file mode 100644 index 00000000..aabed96c Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/front_empty.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_empty.tobj b/TS SE Tool/img/ETS2/lp/switzerland/front_empty.tobj new file mode 100644 index 00000000..e4e8c002 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/front_empty.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/front_ge.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/front_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/front_gr.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/front_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/front_vs.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/front_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/front_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/front_zh.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/front_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_front.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_front_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_front_be.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_front_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_front_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_front_ge.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_front_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_front_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_front_gr.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_front_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_front_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_front_vs.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_front_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_front_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_front_zh.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_front_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_rear.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_rear_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_be.mat new file mode 100644 index 00000000..2cd27571 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_be.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_rear_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_ge.mat new file mode 100644 index 00000000..943947b2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_ge.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_rear_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_gr.mat new file mode 100644 index 00000000..cbe9b70f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_gr.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_rear_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_vs.mat new file mode 100644 index 00000000..411aa0d0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_vs.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/police_rear_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_zh.mat new file mode 100644 index 00000000..9016848f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/police_rear_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_zh.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear.dds b/TS SE Tool/img/ETS2/lp/switzerland/rear.dds new file mode 100644 index 00000000..c1220b9a Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear.mat b/TS SE Tool/img/ETS2/lp/switzerland/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear.tobj b/TS SE Tool/img/ETS2/lp/switzerland/rear.tobj new file mode 100644 index 00000000..6b90536f Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_be.dds b/TS SE Tool/img/ETS2/lp/switzerland/rear_be.dds new file mode 100644 index 00000000..148d6df3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_be.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/rear_be.mat new file mode 100644 index 00000000..2cd27571 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/rear_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_be.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_be.tobj b/TS SE Tool/img/ETS2/lp/switzerland/rear_be.tobj new file mode 100644 index 00000000..cf3025f9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_be.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.dds b/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.dds new file mode 100644 index 00000000..5a7d4b34 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.mat new file mode 100644 index 00000000..943947b2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_ge.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.tobj b/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.tobj new file mode 100644 index 00000000..2325a187 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_ge.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.dds b/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.dds new file mode 100644 index 00000000..9d1de57e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.mat new file mode 100644 index 00000000..cbe9b70f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_gr.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.tobj b/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.tobj new file mode 100644 index 00000000..57b0dbea Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_gr.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.dds b/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.dds new file mode 100644 index 00000000..94f331e0 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.mat new file mode 100644 index 00000000..411aa0d0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_vs.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.tobj b/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.tobj new file mode 100644 index 00000000..b2e1d142 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_vs.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.dds b/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.dds new file mode 100644 index 00000000..69dc6559 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.dds differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.mat new file mode 100644 index 00000000..9016848f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_zh.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.tobj b/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.tobj new file mode 100644 index 00000000..20312d8e Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/switzerland/rear_zh.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/switzerland/trailer.mat b/TS SE Tool/img/ETS2/lp/switzerland/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/trailer_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/trailer_be.mat new file mode 100644 index 00000000..2cd27571 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/trailer_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_be.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/trailer_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/trailer_ge.mat new file mode 100644 index 00000000..943947b2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/trailer_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_ge.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/trailer_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/trailer_gr.mat new file mode 100644 index 00000000..cbe9b70f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/trailer_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_gr.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/trailer_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/trailer_vs.mat new file mode 100644 index 00000000..411aa0d0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/trailer_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_vs.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/trailer_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/trailer_zh.mat new file mode 100644 index 00000000..9016848f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/trailer_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_zh.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_front.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_front_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_be.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_front_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_ge.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_front_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_gr.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_front_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_vs.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_front_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_zh.mat new file mode 100644 index 00000000..eac22b40 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_front_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front_empty.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_rear.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_be.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_be.mat new file mode 100644 index 00000000..2cd27571 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_be.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_be.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_ge.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_ge.mat new file mode 100644 index 00000000..943947b2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_ge.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_ge.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_gr.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_gr.mat new file mode 100644 index 00000000..cbe9b70f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_gr.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_gr.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_vs.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_vs.mat new file mode 100644 index 00000000..411aa0d0 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_vs.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_vs.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_zh.mat b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_zh.mat new file mode 100644 index 00000000..9016848f --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/switzerland/truck_rear_zh.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear_zh.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/duty_rear.dds b/TS SE Tool/img/ETS2/lp/turkey/duty_rear.dds new file mode 100644 index 00000000..a2b2e878 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/turkey/duty_rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/turkey/duty_rear.mat b/TS SE Tool/img/ETS2/lp/turkey/duty_rear.mat new file mode 100644 index 00000000..93081b23 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/duty_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "duty_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/duty_rear.tobj b/TS SE Tool/img/ETS2/lp/turkey/duty_rear.tobj new file mode 100644 index 00000000..268a0110 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/turkey/duty_rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/turkey/front.mat b/TS SE Tool/img/ETS2/lp/turkey/front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/police_rear.dds b/TS SE Tool/img/ETS2/lp/turkey/police_rear.dds new file mode 100644 index 00000000..52a4c648 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/turkey/police_rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/turkey/police_rear.mat b/TS SE Tool/img/ETS2/lp/turkey/police_rear.mat new file mode 100644 index 00000000..cfc2dd48 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "police_rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/police_rear.tobj b/TS SE Tool/img/ETS2/lp/turkey/police_rear.tobj new file mode 100644 index 00000000..b2927a88 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/turkey/police_rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/turkey/rear.dds b/TS SE Tool/img/ETS2/lp/turkey/rear.dds new file mode 100644 index 00000000..447f8f67 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/turkey/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/turkey/rear.mat b/TS SE Tool/img/ETS2/lp/turkey/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/rear.tobj b/TS SE Tool/img/ETS2/lp/turkey/rear.tobj new file mode 100644 index 00000000..bf9b79e1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/turkey/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/turkey/trailer.mat b/TS SE Tool/img/ETS2/lp/turkey/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/truck_front.mat b/TS SE Tool/img/ETS2/lp/turkey/truck_front.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/turkey/truck_rear.mat b/TS SE Tool/img/ETS2/lp/turkey/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/turkey/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/front.dds b/TS SE Tool/img/ETS2/lp/uk/front.dds new file mode 100644 index 00000000..dc589cd4 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/uk/front.dds differ diff --git a/TS SE Tool/img/ETS2/lp/uk/front.mat b/TS SE Tool/img/ETS2/lp/uk/front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/front.tobj b/TS SE Tool/img/ETS2/lp/uk/front.tobj new file mode 100644 index 00000000..4c98f244 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/uk/front.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/uk/police_front.mat b/TS SE Tool/img/ETS2/lp/uk/police_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/police_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/police_rear.mat b/TS SE Tool/img/ETS2/lp/uk/police_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/police_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/rear.dds b/TS SE Tool/img/ETS2/lp/uk/rear.dds new file mode 100644 index 00000000..e519d516 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/uk/rear.dds differ diff --git a/TS SE Tool/img/ETS2/lp/uk/rear.mat b/TS SE Tool/img/ETS2/lp/uk/rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/rear.tobj b/TS SE Tool/img/ETS2/lp/uk/rear.tobj new file mode 100644 index 00000000..8e8001d8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lp/uk/rear.tobj differ diff --git a/TS SE Tool/img/ETS2/lp/uk/trailer.mat b/TS SE Tool/img/ETS2/lp/uk/trailer.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/trailer.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/truck_front.mat b/TS SE Tool/img/ETS2/lp/uk/truck_front.mat new file mode 100644 index 00000000..1a2c1c02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/truck_front.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "front.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lp/uk/truck_rear.mat b/TS SE Tool/img/ETS2/lp/uk/truck_rear.mat new file mode 100644 index 00000000..08aa9a45 --- /dev/null +++ b/TS SE Tool/img/ETS2/lp/uk/truck_rear.mat @@ -0,0 +1,5 @@ +material : "ui" +{ + texture : "rear.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/austria.font b/TS SE Tool/img/ETS2/lpFont/austria.font new file mode 100644 index 00000000..2f3156f9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/austria.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 21 +# Max advance: 22 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 1 + +vert_span:24 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/austria_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 15, 98, 0, 0, 0, 23, 7, 0 # ' ' / 'SPACE' +x002d, 120, 1, 6, 3, 2, 10, 10, 0 # '-' / 'HYPHEN-MINUS' +x0030, 28, 1, 13, 23, 1, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 42, 1, 8, 23, 1, 0, 10, 0 # '1' / 'DIGIT ONE' +x0032, 51, 1, 12, 23, 1, 0, 14, 0 # '2' / 'DIGIT TWO' +x0033, 64, 1, 13, 23, 1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 78, 1, 13, 23, 1, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 92, 1, 13, 23, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 106, 1, 13, 23, 1, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 1, 26, 13, 23, 1, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 15, 26, 13, 23, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 29, 26, 13, 23, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 43, 26, 12, 23, 1, 0, 14, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 56, 26, 13, 23, 1, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 70, 26, 13, 23, 1, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 84, 26, 13, 23, 1, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 98, 26, 13, 23, 1, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 112, 26, 13, 23, 1, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 50, 13, 23, 1, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 15, 50, 13, 23, 1, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 29, 50, 4, 23, 2, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 34, 50, 13, 23, 1, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 48, 50, 11, 23, 1, 0, 13, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 60, 50, 13, 23, 1, 0, 14, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 74, 50, 16, 23, 1, 0, 18, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 91, 50, 13, 23, 1, 0, 15, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 105, 50, 13, 23, 1, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 1, 74, 13, 23, 1, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 15, 74, 14, 23, 1, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 1, 13, 24, 1, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 30, 74, 12, 23, 1, 0, 14, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 43, 74, 12, 23, 1, 0, 14, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 56, 74, 13, 23, 1, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 15, 1, 12, 24, 1, 0, 14, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 70, 74, 21, 23, 0, 0, 22, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 92, 74, 11, 23, 1, 0, 13, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 104, 74, 11, 23, 1, 0, 13, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 1, 98, 13, 23, 1, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/austria_0.dds b/TS SE Tool/img/ETS2/lpFont/austria_0.dds new file mode 100644 index 00000000..e2230721 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/austria_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/austria_0.mat b/TS SE Tool/img/ETS2/lpFont/austria_0.mat new file mode 100644 index 00000000..d4b9486d --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/austria_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/austria_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/austria_0.tobj b/TS SE Tool/img/ETS2/lpFont/austria_0.tobj new file mode 100644 index 00000000..353e8730 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/austria_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/belgium.font b/TS SE Tool/img/ETS2/lpFont/belgium.font new file mode 100644 index 00000000..b451069d --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/belgium.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 15 +# Max advance: 17 +# Typical height 'above the line': 24 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 1 + +vert_span:24 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/belgium_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 46, 100, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 118, 1, 7, 3, 1, 10, 10, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 14, 24, 1, 0, 17, 0 # '0' / 'DIGIT ZERO' +x0031, 16, 1, 10, 24, 1, 0, 13, 0 # '1' / 'DIGIT ONE' +x0032, 27, 1, 14, 24, 1, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 92, 51, 14, 23, 1, 0, 17, 0 # '3' / 'DIGIT THREE' +x0034, 42, 1, 14, 24, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 57, 1, 14, 24, 1, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 72, 1, 14, 24, 1, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 107, 51, 14, 23, 1, 0, 16, 0 # '7' / 'DIGIT SEVEN' +x0038, 1, 76, 14, 23, 1, 0, 17, 0 # '8' / 'DIGIT EIGHT' +x0039, 16, 76, 14, 23, 1, 0, 17, 0 # '9' / 'DIGIT NINE' +x0041, 31, 76, 14, 23, 1, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 87, 1, 15, 24, 1, 0, 17, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 46, 76, 14, 23, 1, 0, 17, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 103, 1, 14, 24, 1, 0, 17, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 61, 76, 14, 23, 2, 0, 17, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 1, 26, 14, 24, 2, 0, 17, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 16, 26, 14, 24, 1, 0, 17, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 76, 76, 14, 23, 2, 0, 17, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 26, 4, 23, 2, 0, 9, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 91, 76, 14, 23, 1, 0, 17, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 31, 26, 14, 24, 1, 0, 16, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 46, 26, 14, 24, 2, 0, 17, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 61, 26, 14, 24, 2, 0, 17, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 76, 26, 14, 24, 2, 0, 17, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 91, 26, 14, 24, 1, 0, 17, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 106, 26, 15, 24, 1, 0, 17, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 51, 14, 24, 1, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 16, 51, 14, 24, 2, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 31, 51, 14, 24, 1, 0, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 106, 76, 14, 23, 1, 0, 17, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 46, 51, 15, 24, 1, 0, 17, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 62, 51, 14, 24, 1, 0, 17, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 77, 51, 14, 24, 1, 0, 17, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 1, 100, 14, 23, 1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 16, 100, 14, 23, 1, 0, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 31, 100, 14, 23, 1, 0, 17, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/belgium_0.dds b/TS SE Tool/img/ETS2/lpFont/belgium_0.dds new file mode 100644 index 00000000..9a23957e Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/belgium_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/belgium_0.mat b/TS SE Tool/img/ETS2/lpFont/belgium_0.mat new file mode 100644 index 00000000..4314a7a4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/belgium_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/belgium_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/belgium_0.tobj b/TS SE Tool/img/ETS2/lpFont/belgium_0.tobj new file mode 100644 index 00000000..69cf40ca Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/belgium_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/bulgaria.font b/TS SE Tool/img/ETS2/lpFont/bulgaria.font new file mode 100644 index 00000000..90c911d1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/bulgaria.font @@ -0,0 +1,58 @@ +# SCS Font +# Max width: 14 +# Max advance: 15 +# Typical height 'above the line': 22 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/bulgaria_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 59, 48, 0, 0, 0, 23, 9, 0 # ' ' / 'SPACE' +x0030, 14, 1, 12, 22, 1, 1, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 27, 1, 7, 22, 2, 1, 12, 0 # '1' / 'DIGIT ONE' +x0032, 35, 1, 12, 22, 1, 1, 14, 0 # '2' / 'DIGIT TWO' +x0033, 1, 1, 12, 23, 1, 0, 14, 0 # '3' / 'DIGIT THREE' +x0034, 48, 1, 12, 22, 1, 1, 14, 0 # '4' / 'DIGIT FOUR' +x0035, 61, 1, 12, 22, 1, 1, 14, 0 # '5' / 'DIGIT FIVE' +x0036, 74, 1, 12, 22, 1, 1, 14, 0 # '6' / 'DIGIT SIX' +x0037, 87, 1, 13, 22, 0, 1, 14, 0 # '7' / 'DIGIT SEVEN' +x0038, 101, 1, 12, 22, 1, 1, 14, 0 # '8' / 'DIGIT EIGHT' +x0039, 114, 1, 12, 22, 1, 1, 14, 0 # '9' / 'DIGIT NINE' +x0041, 1, 25, 14, 22, 0, 1, 14, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 16, 25, 13, 22, 1, 1, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 30, 25, 13, 22, 1, 1, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0045, 44, 25, 13, 22, 1, 1, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0048, 58, 25, 13, 22, 1, 1, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x004b, 72, 25, 14, 22, 1, 1, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004d, 87, 25, 13, 22, 1, 1, 15, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004f, 101, 25, 13, 22, 1, 1, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 1, 48, 13, 22, 1, 1, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0054, 15, 48, 13, 22, 1, 1, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0058, 29, 48, 14, 22, 0, 1, 14, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 44, 48, 14, 22, 0, 1, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' + +# kerning... + +kern: x0032, x0032, -2 # '2' -> '2' +kern: x0042, x0059, -2 # 'B' -> 'Y' +kern: x0058, x0042, -2 # 'X' -> 'B' +kern: x0059, x0042, -2 # 'Y' -> 'B' +kern: x0059, x0054, -1 # 'Y' -> 'T' diff --git a/TS SE Tool/img/ETS2/lpFont/bulgaria_0.dds b/TS SE Tool/img/ETS2/lpFont/bulgaria_0.dds new file mode 100644 index 00000000..756fa219 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/bulgaria_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/bulgaria_0.mat b/TS SE Tool/img/ETS2/lpFont/bulgaria_0.mat new file mode 100644 index 00000000..2eb9bcd2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/bulgaria_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/bulgaria_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/bulgaria_0.tobj b/TS SE Tool/img/ETS2/lpFont/bulgaria_0.tobj new file mode 100644 index 00000000..4fb325be Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/bulgaria_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/czech.font b/TS SE Tool/img/ETS2/lpFont/czech.font new file mode 100644 index 00000000..756287e1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/czech.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 21 +# Max advance: 24 +# Typical height 'above the line': 24 (height of letter 'M') +# Max pixels 'above the line': 27 +# Max pixels 'below the line': 0 + +vert_span:27 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/czech_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 116, 76, 0, 0, 0, 27, 12, 0 # ' ' / 'SPACE' +x002d, 104, 76, 11, 4, 2, 9, 15, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 12, 24, 3, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 14, 1, 7, 24, 4, 0, 14, 0 # '1' / 'DIGIT ONE' +x0032, 22, 1, 12, 24, 3, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 35, 1, 12, 24, 3, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 48, 1, 12, 24, 2, 0, 14, 0 # '4' / 'DIGIT FOUR' +x0035, 61, 1, 12, 24, 3, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 74, 1, 12, 24, 3, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 87, 1, 12, 24, 3, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 100, 1, 12, 24, 3, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 113, 1, 12, 24, 3, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 1, 26, 13, 24, 2, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 15, 26, 12, 24, 3, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 28, 26, 12, 24, 3, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 41, 26, 12, 24, 3, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 54, 26, 12, 24, 3, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 67, 26, 12, 24, 3, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 80, 26, 12, 24, 3, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 93, 26, 12, 24, 3, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 106, 26, 4, 24, 3, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 111, 26, 12, 24, 3, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 1, 51, 13, 24, 2, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 15, 51, 12, 24, 3, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 28, 51, 15, 24, 3, 0, 18, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 44, 51, 13, 24, 2, 0, 15, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 58, 51, 12, 24, 3, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 71, 51, 12, 24, 3, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 84, 51, 12, 24, 3, 0, 15, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 97, 51, 12, 24, 3, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 110, 51, 12, 24, 3, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 1, 76, 12, 24, 3, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 14, 76, 12, 24, 3, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 27, 76, 13, 24, 2, 0, 15, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 41, 76, 21, 24, 2, 0, 24, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 63, 76, 13, 24, 2, 0, 15, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 77, 76, 13, 24, 2, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 91, 76, 12, 24, 3, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/czech_0.dds b/TS SE Tool/img/ETS2/lpFont/czech_0.dds new file mode 100644 index 00000000..d05ca814 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/czech_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/czech_0.mat b/TS SE Tool/img/ETS2/lpFont/czech_0.mat new file mode 100644 index 00000000..752393a4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/czech_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/czech_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/czech_0.tobj b/TS SE Tool/img/ETS2/lpFont/czech_0.tobj new file mode 100644 index 00000000..0d99f307 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/czech_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/denmark.font b/TS SE Tool/img/ETS2/lpFont/denmark.font new file mode 100644 index 00000000..f7908855 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/denmark.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 14 +# Max advance: 16 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/denmark_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 120, 73, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 112, 73, 7, 3, 2, 10, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 0, 0, 14, 23, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 45, 98, 8, 23, 2, 0, 13, 0 # '1' / 'DIGIT ONE' +x0032, 24, 1, 13, 23, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 38, 1, 13, 23, 1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 51, 1, 13, 23, 1, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 66, 1, 13, 23, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 80, 1, 13, 23, 1, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 13, 23, 1, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 108, 1, 13, 23, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 25, 13, 23, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 15, 25, 13, 23, 1, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 30, 25, 13, 23, 1, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 43, 25, 13, 23, 1, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 57, 25, 13, 23, 1, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 71, 25, 13, 23, 1, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 86, 25, 13, 23, 1, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 99, 25, 13, 23, 1, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 113, 25, 13, 23, 1, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 1, 4, 23, 2, 0, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 2, 49, 12, 23, 1, 0, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 15, 49, 13, 23, 1, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 29, 49, 13, 23, 1, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 21, 98, 16, 23, 1, 0, 18, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 58, 49, 14, 23, 1, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 73, 49, 13, 23, 1, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 87, 49, 13, 23, 1, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 58, 98, 16, 25, 1, 0, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 73, 13, 23, 1, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 15, 73, 13, 23, 1, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 29, 73, 13, 23, 1, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 43, 73, 13, 23, 1, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 57, 73, 13, 23, 1, 0, 15, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 98, 19, 23, 1, 0, 21, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 85, 73, 13, 23, 1, 0, 15, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 115, 49, 12, 23, 1, 0, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 99, 73, 12, 23, 1, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/denmark_0.dds b/TS SE Tool/img/ETS2/lpFont/denmark_0.dds new file mode 100644 index 00000000..4d233933 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/denmark_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/denmark_0.mat b/TS SE Tool/img/ETS2/lpFont/denmark_0.mat new file mode 100644 index 00000000..054f37ce --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/denmark_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/denmark_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/denmark_0.tobj b/TS SE Tool/img/ETS2/lpFont/denmark_0.tobj new file mode 100644 index 00000000..1d913070 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/denmark_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/estonia.font b/TS SE Tool/img/ETS2/lpFont/estonia.font new file mode 100644 index 00000000..c34eb43c --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/estonia.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 25 +# Max advance: 25 +# Typical height 'above the line': 21 (height of letter 'M') +# Max pixels 'above the line': 21 +# Max pixels 'below the line': 1 + +vert_span:22 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/estonia_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 89, 90, 0, 0, 0, 21, 7, 0 # ' ' / 'SPACE' +x002d, 79, 90, 9, 3, 2, 11, 13, 0 # '-' / 'HYPHEN-MINUS' +x0030, 20, 1, 13, 21, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 34, 1, 7, 21, 2, 0, 10, 0 # '1' / 'DIGIT ONE' +x0032, 42, 1, 13, 21, 1, 0, 14, 0 # '2' / 'DIGIT TWO' +x0033, 56, 1, 14, 21, 0, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 71, 1, 14, 21, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 86, 1, 13, 21, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 100, 1, 12, 21, 1, 0, 14, 0 # '6' / 'DIGIT SIX' +x0037, 113, 1, 12, 21, 2, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 1, 24, 13, 21, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 15, 24, 12, 21, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 28, 24, 19, 21, 0, 0, 19, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 48, 24, 15, 21, 2, 0, 18, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 64, 24, 15, 21, 2, 0, 17, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 80, 24, 16, 21, 2, 0, 19, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 97, 24, 14, 21, 2, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 112, 24, 14, 21, 2, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 46, 16, 21, 2, 0, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 18, 46, 15, 21, 2, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 34, 46, 4, 21, 2, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 39, 46, 14, 21, -1, 0, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 54, 46, 17, 21, 2, 0, 18, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 72, 46, 14, 21, 2, 0, 16, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 87, 46, 19, 21, 2, 0, 22, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 107, 46, 16, 21, 2, 0, 20, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 1, 68, 16, 21, 2, 0, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 18, 68, 15, 21, 2, 0, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 1, 18, 22, 2, 0, 19, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 34, 68, 16, 21, 2, 0, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 51, 68, 17, 21, 0, 0, 17, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 69, 68, 15, 21, 1, 0, 17, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 85, 68, 16, 21, 2, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 102, 68, 17, 21, 0, 0, 17, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 90, 25, 21, 0, 0, 25, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 27, 90, 18, 21, -1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 46, 90, 17, 21, -1, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 64, 90, 14, 21, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/estonia_0.dds b/TS SE Tool/img/ETS2/lpFont/estonia_0.dds new file mode 100644 index 00000000..5b21d9a9 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/estonia_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/estonia_0.mat b/TS SE Tool/img/ETS2/lpFont/estonia_0.mat new file mode 100644 index 00000000..7884e4fe --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/estonia_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/estonia_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/estonia_0.tobj b/TS SE Tool/img/ETS2/lpFont/estonia_0.tobj new file mode 100644 index 00000000..152d08c1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/estonia_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/finland.font b/TS SE Tool/img/ETS2/lpFont/finland.font new file mode 100644 index 00000000..e9b2fcc9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/finland.font @@ -0,0 +1,69 @@ +# SCS Font +# Max width: 16 +# Max advance: 18 +# Typical height 'above the line': 22 (height of letter 'M') +# Max pixels 'above the line': 22 +# Max pixels 'below the line': 1 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/finland_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 58, 91, 0, 0, 0, 22, 7, 0 # ' ' / 'SPACE' +x002d, 118, 47, 4, 4, 4, 9, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 44, 1, 13, 21, 2, 1, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 58, 1, 4, 21, 4, 1, 10, 0 # '1' / 'DIGIT ONE' +x0032, 63, 1, 15, 21, 2, 1, 17, 0 # '2' / 'DIGIT TWO' +x0033, 79, 1, 14, 21, 2, 1, 17, 0 # '3' / 'DIGIT THREE' +x0034, 94, 1, 15, 21, 1, 1, 18, 0 # '4' / 'DIGIT FOUR' +x0035, 110, 1, 15, 21, 2, 1, 17, 0 # '5' / 'DIGIT FIVE' +x0036, 15, 1, 13, 22, 2, 0, 17, 0 # '6' / 'DIGIT SIX' +x0037, 1, 25, 13, 21, 2, 1, 16, 0 # '7' / 'DIGIT SEVEN' +x0038, 15, 25, 12, 21, 2, 1, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 28, 25, 13, 21, 2, 1, 17, 0 # '9' / 'DIGIT NINE' +x0041, 42, 25, 14, 21, 1, 1, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 57, 25, 13, 21, 2, 1, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 71, 25, 13, 21, 2, 1, 16, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 85, 25, 14, 21, 2, 1, 17, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 100, 25, 12, 21, 2, 1, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 113, 25, 11, 21, 2, 1, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 47, 13, 21, 2, 1, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 15, 47, 13, 21, 2, 1, 16, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 29, 47, 4, 21, 4, 1, 10, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 34, 47, 13, 21, 2, 1, 16, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 48, 47, 13, 21, 2, 1, 16, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 62, 47, 13, 21, 2, 1, 17, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 29, 1, 14, 22, 2, 0, 17, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 1, 1, 13, 23, 2, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 76, 47, 13, 21, 2, 1, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 90, 47, 13, 21, 2, 1, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 104, 47, 13, 21, 2, 1, 17, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 69, 13, 21, 2, 1, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 15, 69, 13, 21, 2, 1, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 29, 69, 13, 21, 2, 1, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 43, 69, 13, 21, 2, 1, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 57, 69, 14, 21, 1, 1, 17, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 72, 69, 16, 21, 1, 1, 18, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 89, 69, 14, 21, 1, 1, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 104, 69, 13, 21, 2, 1, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 1, 91, 13, 21, 2, 1, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' +x00c4, 15, 91, 13, 21, 2, 1, 16, 0 # 'Ä' / 'LATIN CAPITAL LETTER A WITH DIAERESIS' +x00c5, 29, 91, 14, 21, 1, 1, 16, 0 # 'Å' / 'LATIN CAPITAL LETTER A WITH RING ABOVE' +x00d6, 44, 91, 13, 21, 2, 1, 16, 0 # 'Ö' / 'LATIN CAPITAL LETTER O WITH DIAERESIS' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/finland_0.dds b/TS SE Tool/img/ETS2/lpFont/finland_0.dds new file mode 100644 index 00000000..cdc70d6c Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/finland_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/finland_0.mat b/TS SE Tool/img/ETS2/lpFont/finland_0.mat new file mode 100644 index 00000000..a8db52d1 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/finland_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/finland_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/finland_0.tobj b/TS SE Tool/img/ETS2/lpFont/finland_0.tobj new file mode 100644 index 00000000..d081baeb Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/finland_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/france.font b/TS SE Tool/img/ETS2/lpFont/france.font new file mode 100644 index 00000000..59af7f02 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/france.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 14 +# Max advance: 16 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/france_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 120, 73, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 113, 73, 7, 3, 2, 10, 8, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 13, 23, 1, 0, 13, 0 # '0' / 'DIGIT ZERO' +x0031, 15, 1, 8, 23, 2, 0, 12, 0 # '1' / 'DIGIT ONE' +x0032, 24, 1, 13, 23, 1, 0, 14, 0 # '2' / 'DIGIT TWO' +x0033, 38, 1, 13, 23, 1, 0, 14, 0 # '3' / 'DIGIT THREE' +x0034, 52, 1, 13, 23, 1, 0, 14, 0 # '4' / 'DIGIT FOUR' +x0035, 66, 1, 13, 23, 1, 0, 14, 0 # '5' / 'DIGIT FIVE' +x0036, 80, 1, 13, 23, 1, 0, 14, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 13, 23, 1, 0, 14, 0 # '7' / 'DIGIT SEVEN' +x0038, 108, 1, 13, 23, 1, 0, 14, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 25, 13, 23, 1, 0, 14, 0 # '9' / 'DIGIT NINE' +x0041, 15, 25, 13, 23, 1, 0, 14, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 29, 25, 13, 23, 1, 0, 14, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 43, 25, 13, 23, 1, 0, 14, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 57, 25, 13, 23, 1, 0, 14, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 71, 25, 13, 23, 1, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 85, 25, 13, 23, 1, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 99, 25, 13, 23, 1, 0, 14, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 113, 25, 13, 23, 1, 0, 14, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 1, 4, 23, 2, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 1, 49, 13, 23, 1, 0, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 15, 49, 13, 23, 1, 0, 14, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 29, 49, 13, 23, 1, 0, 14, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 43, 49, 14, 23, 1, 0, 15, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 58, 49, 14, 23, 1, 0, 15, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 73, 49, 13, 23, 1, 0, 14, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 87, 49, 13, 23, 1, 0, 14, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 101, 49, 13, 23, 1, 0, 14, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 73, 13, 23, 1, 0, 14, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 15, 73, 13, 23, 1, 0, 14, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 29, 73, 13, 23, 1, 0, 14, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 43, 73, 13, 23, 1, 0, 14, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 57, 73, 13, 23, 1, 0, 14, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 71, 73, 13, 23, 1, 0, 14, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 85, 73, 13, 23, 1, 0, 14, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 115, 49, 12, 23, 1, 0, 13, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 99, 73, 12, 23, 1, 0, 14, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/france_0.dds b/TS SE Tool/img/ETS2/lpFont/france_0.dds new file mode 100644 index 00000000..dbadca35 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/france_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/france_0.mat b/TS SE Tool/img/ETS2/lpFont/france_0.mat new file mode 100644 index 00000000..9d6da523 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/france_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/france_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/france_0.tobj b/TS SE Tool/img/ETS2/lpFont/france_0.tobj new file mode 100644 index 00000000..d754d5b2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/france_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/germany.font b/TS SE Tool/img/ETS2/lpFont/germany.font new file mode 100644 index 00000000..01001b85 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/germany.font @@ -0,0 +1,69 @@ +# SCS Font +# Max width: 16 +# Max advance: 16 +# Typical height 'above the line': 22 (height of letter 'M') +# Max pixels 'above the line': 22 +# Max pixels 'below the line': 0 + +vert_span:22 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/germany_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 90, 93, 0, 0, 0, 22, 7, 0 # ' ' / 'SPACE' +x002d, 73, 93, 16, 3, 0, 9, 16, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 12, 22, 2, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 14, 1, 13, 22, 2, 0, 15, 0 # '1' / 'DIGIT ONE' +x0032, 90, 70, 13, 21, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 28, 1, 13, 22, 1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 42, 1, 13, 22, 2, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 56, 1, 12, 22, 2, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 69, 1, 12, 22, 2, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 104, 70, 12, 21, 2, 1, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 82, 1, 12, 22, 2, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 93, 12, 21, 2, 1, 15, 0 # '9' / 'DIGIT NINE' +x0041, 95, 1, 14, 22, 1, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 110, 1, 14, 22, 1, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 1, 24, 13, 22, 1, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 15, 24, 14, 22, 0, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 30, 24, 14, 22, 2, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 45, 24, 14, 22, 1, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 60, 24, 13, 22, 1, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 74, 24, 13, 22, 1, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 88, 24, 11, 22, 3, 0, 14, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 100, 24, 13, 22, 1, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 1, 47, 14, 22, 1, 0, 16, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 114, 24, 13, 22, 2, 0, 16, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 16, 47, 14, 22, 1, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 31, 47, 14, 22, 1, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 46, 47, 13, 22, 1, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 60, 47, 15, 22, 1, 0, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 76, 47, 13, 22, 1, 0, 15, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 90, 47, 14, 22, 1, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 105, 47, 15, 22, 0, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 14, 93, 14, 21, 1, 1, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 1, 70, 13, 22, 1, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 15, 70, 14, 22, 1, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 30, 70, 14, 22, 1, 0, 15, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 45, 70, 14, 22, 1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 60, 70, 14, 22, 1, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 75, 70, 14, 22, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' +x00c4, 29, 93, 14, 21, 1, 1, 16, 0 # 'Ä' / 'LATIN CAPITAL LETTER A WITH DIAERESIS' +x00d6, 44, 93, 14, 21, 1, 1, 16, 0 # 'Ö' / 'LATIN CAPITAL LETTER O WITH DIAERESIS' +x00dc, 59, 93, 13, 21, 2, 1, 16, 0 # 'Ü' / 'LATIN CAPITAL LETTER U WITH DIAERESIS' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/germany_0.dds b/TS SE Tool/img/ETS2/lpFont/germany_0.dds new file mode 100644 index 00000000..0e6fac03 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/germany_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/germany_0.mat b/TS SE Tool/img/ETS2/lpFont/germany_0.mat new file mode 100644 index 00000000..191c7c99 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/germany_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/germany_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/germany_0.tobj b/TS SE Tool/img/ETS2/lpFont/germany_0.tobj new file mode 100644 index 00000000..b9bbd3a5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/germany_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/hungary.font b/TS SE Tool/img/ETS2/lpFont/hungary.font new file mode 100644 index 00000000..dea8bbef --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/hungary.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 17 +# Max advance: 20 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/hungary_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 69, 97, 0, 0, 0, 23, 4, 0 # ' ' / 'SPACE' +x002d, 116, 1, 6, 3, 2, 10, 10, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 12, 23, 2, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 14, 1, 6, 23, 5, 0, 16, 0 # '1' / 'DIGIT ONE' +x0032, 21, 1, 12, 23, 2, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 34, 1, 13, 23, 2, 0, 17, 0 # '3' / 'DIGIT THREE' +x0034, 48, 1, 12, 23, 2, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 61, 1, 12, 23, 2, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 74, 1, 13, 23, 2, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 88, 1, 13, 23, 2, 0, 17, 0 # '7' / 'DIGIT SEVEN' +x0038, 102, 1, 13, 23, 2, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 25, 13, 23, 1, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 15, 25, 16, 23, 2, 0, 20, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 32, 25, 15, 23, 2, 0, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 48, 25, 15, 23, 2, 0, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 64, 25, 15, 23, 2, 0, 19, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 80, 25, 16, 23, 2, 0, 20, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 97, 25, 16, 23, 2, 0, 20, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 49, 15, 23, 2, 0, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 49, 15, 23, 2, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 123, 1, 3, 23, 8, 0, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 33, 49, 15, 23, 2, 0, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 49, 49, 16, 23, 2, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 66, 49, 15, 23, 2, 0, 19, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 82, 49, 15, 23, 2, 0, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 98, 49, 15, 23, 2, 0, 19, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 1, 73, 15, 23, 2, 0, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 17, 73, 15, 23, 2, 0, 19, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 33, 73, 15, 23, 2, 0, 19, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 49, 73, 15, 23, 2, 0, 19, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 65, 73, 15, 23, 2, 0, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 81, 73, 15, 23, 2, 0, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 97, 73, 15, 23, 2, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 1, 97, 16, 23, 2, 0, 20, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 113, 73, 14, 23, 3, 0, 20, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 18, 97, 16, 23, 2, 0, 20, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 35, 97, 17, 23, 1, 0, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 53, 97, 15, 23, 2, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/hungary_0.dds b/TS SE Tool/img/ETS2/lpFont/hungary_0.dds new file mode 100644 index 00000000..bd43ddae Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/hungary_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/hungary_0.mat b/TS SE Tool/img/ETS2/lpFont/hungary_0.mat new file mode 100644 index 00000000..0d9b802f --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/hungary_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/hungary_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/hungary_0.tobj b/TS SE Tool/img/ETS2/lpFont/hungary_0.tobj new file mode 100644 index 00000000..89bdb5c3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/hungary_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/italy.font b/TS SE Tool/img/ETS2/lpFont/italy.font new file mode 100644 index 00000000..7998dbe2 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/italy.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 13 +# Max advance: 16 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/italy_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 91, 73, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 83, 73, 7, 3, 2, 10, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 11, 23, 2, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 13, 1, 6, 23, 3, 0, 14, 0 # '1' / 'DIGIT ONE' +x0032, 20, 1, 12, 23, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 33, 1, 12, 23, 1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 46, 1, 13, 23, 2, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 60, 1, 13, 23, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 74, 1, 12, 23, 2, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 87, 1, 12, 23, 2, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 100, 1, 11, 23, 2, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 112, 1, 11, 23, 2, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 1, 25, 13, 23, 1, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 15, 25, 12, 23, 2, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 28, 25, 12, 23, 2, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 41, 25, 11, 23, 2, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 53, 25, 12, 23, 2, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 66, 25, 13, 23, 1, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 80, 25, 11, 23, 2, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 92, 25, 11, 23, 2, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 124, 1, 3, 23, 5, 0, 15, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 104, 25, 12, 23, 1, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 1, 49, 13, 23, 1, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 15, 49, 12, 23, 2, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 28, 49, 12, 23, 2, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 41, 49, 13, 23, 2, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 55, 49, 11, 23, 2, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 67, 49, 13, 23, 1, 0, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 117, 25, 10, 23, 2, 0, 14, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 81, 49, 12, 23, 2, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 94, 49, 12, 23, 1, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 107, 49, 13, 23, 1, 0, 14, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 1, 73, 12, 23, 2, 0, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 14, 73, 13, 23, 1, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 28, 73, 13, 23, 1, 0, 16, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 42, 73, 12, 23, 2, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 55, 73, 13, 23, 1, 0, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 69, 73, 13, 23, 1, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/italy_0.dds b/TS SE Tool/img/ETS2/lpFont/italy_0.dds new file mode 100644 index 00000000..39c7b7d8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/italy_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/italy_0.mat b/TS SE Tool/img/ETS2/lpFont/italy_0.mat new file mode 100644 index 00000000..3689cacd --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/italy_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/italy_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/italy_0.tobj b/TS SE Tool/img/ETS2/lpFont/italy_0.tobj new file mode 100644 index 00000000..61d82dba Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/italy_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/latvia.font b/TS SE Tool/img/ETS2/lpFont/latvia.font new file mode 100644 index 00000000..dc5bf5b4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/latvia.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 25 +# Max advance: 25 +# Typical height 'above the line': 21 (height of letter 'M') +# Max pixels 'above the line': 21 +# Max pixels 'below the line': 0 + +vert_span:21 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/latvia_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 89, 89, 0, 0, 0, 21, 7, 0 # ' ' / 'SPACE' +x002d, 79, 89, 9, 4, 1, 11, 12, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 13, 21, 1, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 15, 1, 7, 21, 2, 0, 10, 0 # '1' / 'DIGIT ONE' +x0032, 23, 1, 13, 21, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 37, 1, 14, 21, 0, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 52, 1, 14, 21, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 67, 1, 13, 21, 0, 0, 14, 0 # '5' / 'DIGIT FIVE' +x0036, 81, 1, 12, 21, 1, 0, 14, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 12, 21, 1, 0, 14, 0 # '7' / 'DIGIT SEVEN' +x0038, 107, 1, 13, 21, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 23, 12, 21, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 14, 23, 20, 21, -1, 0, 19, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 35, 23, 15, 21, 2, 0, 18, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 51, 23, 15, 21, 1, 0, 16, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 67, 23, 15, 21, 2, 0, 19, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 83, 23, 14, 21, 2, 0, 17, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 98, 23, 14, 21, 2, 0, 17, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 45, 16, 21, 1, 0, 18, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 18, 45, 15, 21, 2, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 121, 1, 4, 21, 2, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 34, 45, 13, 21, 0, 0, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 48, 45, 17, 21, 2, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 113, 23, 14, 21, 2, 0, 17, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 66, 45, 19, 21, 2, 0, 23, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 86, 45, 16, 21, 2, 0, 20, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 103, 45, 15, 21, 1, 0, 18, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 1, 67, 15, 21, 2, 0, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 17, 67, 18, 21, 1, 0, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 36, 67, 16, 21, 2, 0, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 53, 67, 17, 21, -1, 0, 17, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 71, 67, 15, 21, 0, 0, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 87, 67, 15, 21, 2, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 103, 67, 18, 21, -1, 0, 17, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 89, 25, 21, 0, 0, 25, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 27, 89, 18, 21, -1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 46, 89, 17, 21, -1, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 64, 89, 14, 21, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/latvia_0.dds b/TS SE Tool/img/ETS2/lpFont/latvia_0.dds new file mode 100644 index 00000000..bdb1c2ca Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/latvia_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/latvia_0.mat b/TS SE Tool/img/ETS2/lpFont/latvia_0.mat new file mode 100644 index 00000000..96312a89 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/latvia_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/latvia_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/latvia_0.tobj b/TS SE Tool/img/ETS2/lpFont/latvia_0.tobj new file mode 100644 index 00000000..97fa220a Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/latvia_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/lithuania.font b/TS SE Tool/img/ETS2/lpFont/lithuania.font new file mode 100644 index 00000000..79d607a9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/lithuania.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 25 +# Max advance: 25 +# Typical height 'above the line': 21 (height of letter 'M') +# Max pixels 'above the line': 21 +# Max pixels 'below the line': 0 + +vert_span:21 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/lithuania_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 89, 89, 0, 0, 0, 21, 7, 0 # ' ' / 'SPACE' +x002d, 79, 89, 9, 4, 1, 11, 12, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 13, 21, 1, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 15, 1, 7, 21, 2, 0, 10, 0 # '1' / 'DIGIT ONE' +x0032, 23, 1, 13, 21, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 37, 1, 14, 21, 0, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 52, 1, 14, 21, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 67, 1, 13, 21, 0, 0, 14, 0 # '5' / 'DIGIT FIVE' +x0036, 81, 1, 12, 21, 1, 0, 14, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 12, 21, 1, 0, 14, 0 # '7' / 'DIGIT SEVEN' +x0038, 107, 1, 13, 21, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 23, 12, 21, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 14, 23, 20, 21, -1, 0, 19, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 35, 23, 15, 21, 2, 0, 18, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 51, 23, 15, 21, 1, 0, 16, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 67, 23, 15, 21, 2, 0, 19, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 83, 23, 14, 21, 2, 0, 17, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 98, 23, 14, 21, 2, 0, 17, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 45, 16, 21, 1, 0, 18, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 18, 45, 15, 21, 2, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 121, 1, 4, 21, 2, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 34, 45, 13, 21, 0, 0, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 48, 45, 17, 21, 2, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 113, 23, 14, 21, 2, 0, 17, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 66, 45, 19, 21, 2, 0, 23, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 86, 45, 16, 21, 2, 0, 20, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 103, 45, 15, 21, 1, 0, 18, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 1, 67, 15, 21, 2, 0, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 17, 67, 18, 21, 1, 0, 18, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 36, 67, 16, 21, 2, 0, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 53, 67, 17, 21, -1, 0, 17, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 71, 67, 15, 21, 0, 0, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 87, 67, 15, 21, 2, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 103, 67, 18, 21, -1, 0, 17, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 89, 25, 21, 0, 0, 25, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 27, 89, 18, 21, -1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 46, 89, 17, 21, -1, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 64, 89, 14, 21, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/lithuania_0.dds b/TS SE Tool/img/ETS2/lpFont/lithuania_0.dds new file mode 100644 index 00000000..bdb1c2ca Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/lithuania_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/lithuania_0.mat b/TS SE Tool/img/ETS2/lpFont/lithuania_0.mat new file mode 100644 index 00000000..876fdf06 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/lithuania_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/lithuania_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/lithuania_0.tobj b/TS SE Tool/img/ETS2/lpFont/lithuania_0.tobj new file mode 100644 index 00000000..8a8c5c28 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/lithuania_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/luxembourg.font b/TS SE Tool/img/ETS2/lpFont/luxembourg.font new file mode 100644 index 00000000..6f00719c --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/luxembourg.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 14 +# Max advance: 16 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/luxembourg_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 120, 73, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 112, 73, 7, 3, 2, 10, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 13, 23, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 15, 1, 8, 23, 2, 0, 13, 0 # '1' / 'DIGIT ONE' +x0032, 24, 1, 13, 23, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 38, 1, 13, 23, 1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 52, 1, 13, 23, 1, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 66, 1, 13, 23, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 80, 1, 13, 23, 1, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 13, 23, 1, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 108, 1, 13, 23, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 25, 13, 23, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 15, 25, 13, 23, 1, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 29, 25, 13, 23, 1, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 43, 25, 13, 23, 1, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 57, 25, 13, 23, 1, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 71, 25, 13, 23, 1, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 85, 25, 13, 23, 1, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 99, 25, 13, 23, 1, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 113, 25, 13, 23, 1, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 1, 4, 23, 2, 0, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 1, 49, 13, 23, 1, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 15, 49, 13, 23, 1, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 29, 49, 13, 23, 1, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 43, 49, 14, 23, 1, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 58, 49, 14, 23, 1, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 73, 49, 13, 23, 1, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 87, 49, 13, 23, 1, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 101, 49, 13, 23, 1, 0, 15, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 73, 13, 23, 1, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 15, 73, 13, 23, 1, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 29, 73, 13, 23, 1, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 43, 73, 13, 23, 1, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 57, 73, 13, 23, 1, 0, 15, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 71, 73, 13, 23, 1, 0, 15, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 85, 73, 13, 23, 1, 0, 15, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 115, 49, 12, 23, 1, 0, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 99, 73, 12, 23, 1, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/luxembourg_0.dds b/TS SE Tool/img/ETS2/lpFont/luxembourg_0.dds new file mode 100644 index 00000000..dbadca35 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/luxembourg_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/luxembourg_0.mat b/TS SE Tool/img/ETS2/lpFont/luxembourg_0.mat new file mode 100644 index 00000000..484354d4 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/luxembourg_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/luxembourg_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/luxembourg_0.tobj b/TS SE Tool/img/ETS2/lpFont/luxembourg_0.tobj new file mode 100644 index 00000000..f98a2b2f Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/luxembourg_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/netherlands.font b/TS SE Tool/img/ETS2/lpFont/netherlands.font new file mode 100644 index 00000000..8c8cf583 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/netherlands.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 18 +# Max advance: 22 +# Typical height 'above the line': 21 (height of letter 'M') +# Max pixels 'above the line': 21 +# Max pixels 'below the line': 1 + +vert_span:22 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/netherlands_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 31, 90, 0, 0, 0, 21, 10, 0 # ' ' / 'SPACE' +x002d, 121, 46, 6, 3, 2, 8, 10, 0 # '-' / 'HYPHEN-MINUS' +x0030, 17, 1, 15, 21, 2, 0, 19, 0 # '0' / 'DIGIT ZERO' +x0031, 33, 1, 7, 21, 2, 0, 11, 0 # '1' / 'DIGIT ONE' +x0032, 41, 1, 13, 21, 2, 0, 17, 0 # '2' / 'DIGIT TWO' +x0033, 55, 1, 13, 21, 2, 0, 17, 0 # '3' / 'DIGIT THREE' +x0034, 69, 1, 15, 21, 1, 0, 18, 0 # '4' / 'DIGIT FOUR' +x0035, 85, 1, 14, 21, 2, 0, 18, 0 # '5' / 'DIGIT FIVE' +x0036, 100, 1, 14, 21, 2, 0, 18, 0 # '6' / 'DIGIT SIX' +x0037, 1, 24, 13, 21, 2, 0, 17, 0 # '7' / 'DIGIT SEVEN' +x0038, 15, 24, 14, 21, 2, 0, 18, 0 # '8' / 'DIGIT EIGHT' +x0039, 30, 24, 14, 21, 2, 0, 18, 0 # '9' / 'DIGIT NINE' +x0041, 45, 24, 18, 21, 1, 0, 21, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 64, 24, 14, 21, 3, 0, 18, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 79, 24, 13, 21, 2, 0, 17, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 93, 24, 15, 21, 2, 0, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 115, 1, 12, 21, 3, 0, 17, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 109, 24, 12, 21, 3, 0, 17, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 46, 15, 21, 2, 0, 18, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 46, 14, 21, 2, 0, 18, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 24, 4, 21, 3, 0, 9, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 32, 46, 11, 21, 2, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 1, 1, 15, 22, 2, 0, 18, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 44, 46, 12, 21, 3, 0, 17, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 57, 46, 18, 21, 2, 0, 22, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 76, 46, 14, 21, 2, 0, 18, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 91, 46, 15, 21, 2, 0, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 107, 46, 13, 21, 3, 0, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 68, 16, 21, 2, 0, 19, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 18, 68, 15, 21, 2, 0, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 34, 68, 14, 21, 2, 0, 18, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 49, 68, 13, 21, 2, 0, 17, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 63, 68, 14, 21, 2, 0, 18, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 78, 68, 15, 21, 2, 0, 18, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 94, 68, 15, 21, 2, 0, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 110, 68, 16, 21, 1, 0, 18, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 1, 90, 15, 21, 1, 0, 17, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 17, 90, 13, 21, 2, 0, 17, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/netherlands_0.dds b/TS SE Tool/img/ETS2/lpFont/netherlands_0.dds new file mode 100644 index 00000000..8d3b57b5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/netherlands_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/netherlands_0.mat b/TS SE Tool/img/ETS2/lpFont/netherlands_0.mat new file mode 100644 index 00000000..76b8c754 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/netherlands_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/netherlands_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/netherlands_0.tobj b/TS SE Tool/img/ETS2/lpFont/netherlands_0.tobj new file mode 100644 index 00000000..f3a982b3 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/netherlands_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/norway.font b/TS SE Tool/img/ETS2/lpFont/norway.font new file mode 100644 index 00000000..4e60d326 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/norway.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 24 +# Max advance: 24 +# Typical height 'above the line': 25 (height of letter 'M') +# Max pixels 'above the line': 25 +# Max pixels 'below the line': 4 + +vert_span:29 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/norway_0.mat, 128, 256 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 31, 109, 0, 0, 0, 25, 11, 0 # ' ' / 'SPACE' +x002d, 118, 83, 8, 4, 1, 13, 9, 0 # '-' / 'HYPHEN-MINUS' +x0030, 18, 1, 13, 25, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 32, 1, 9, 25, 2, 0, 15, 0 # '1' / 'DIGIT ONE' +x0032, 42, 1, 13, 25, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 56, 1, 12, 25, 1, 0, 14, 0 # '3' / 'DIGIT THREE' +x0034, 69, 1, 15, 25, 0, 0, 14, 0 # '4' / 'DIGIT FOUR' +x0035, 85, 1, 13, 25, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 99, 1, 13, 25, 1, 0, 14, 0 # '6' / 'DIGIT SIX' +x0037, 113, 1, 13, 25, 1, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 1, 31, 13, 25, 1, 0, 14, 0 # '8' / 'DIGIT EIGHT' +x0039, 15, 31, 13, 25, 1, 0, 14, 0 # '9' / 'DIGIT NINE' +x0041, 29, 31, 16, 25, 0, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 46, 31, 14, 25, 2, 0, 17, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 61, 31, 13, 25, 1, 0, 13, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 75, 31, 14, 25, 2, 0, 17, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 90, 31, 11, 25, 2, 0, 13, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 102, 31, 11, 25, 2, 0, 13, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 57, 14, 25, 1, 0, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 16, 57, 14, 25, 2, 0, 17, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 31, 57, 4, 25, 2, 0, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 36, 57, 9, 25, 0, 0, 11, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 46, 57, 14, 25, 2, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 61, 57, 11, 25, 2, 0, 13, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 73, 57, 19, 25, 2, 0, 23, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 93, 57, 14, 25, 2, 0, 17, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 108, 57, 15, 25, 1, 0, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 114, 31, 13, 25, 2, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 1, 16, 29, 1, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 83, 14, 25, 2, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 16, 83, 13, 25, 1, 0, 14, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 30, 83, 14, 25, 0, 0, 13, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 45, 83, 14, 25, 2, 0, 17, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 60, 83, 16, 25, 0, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 77, 83, 24, 25, 0, 0, 24, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 102, 83, 15, 25, 0, 0, 14, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 1, 109, 15, 25, 0, 0, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 17, 109, 13, 25, 1, 0, 14, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/norway_0.dds b/TS SE Tool/img/ETS2/lpFont/norway_0.dds new file mode 100644 index 00000000..0adebc8a Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/norway_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/norway_0.mat b/TS SE Tool/img/ETS2/lpFont/norway_0.mat new file mode 100644 index 00000000..d6286023 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/norway_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/norway_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/norway_0.tobj b/TS SE Tool/img/ETS2/lpFont/norway_0.tobj new file mode 100644 index 00000000..61fe58f5 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/norway_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/poland.font b/TS SE Tool/img/ETS2/lpFont/poland.font new file mode 100644 index 00000000..aa6e906e --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/poland.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 17 +# Max advance: 19 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/poland_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 51, 97, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 118, 1, 7, 3, 2, 10, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 12, 23, 2, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 14, 1, 8, 23, 3, 0, 16, 0 # '1' / 'DIGIT ONE' +x0032, 23, 1, 13, 23, 1, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 37, 1, 13, 23, 1, 0, 16, 0 # '3' / 'DIGIT THREE' +x0034, 51, 1, 13, 23, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 65, 1, 13, 23, 1, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 79, 1, 12, 23, 2, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 92, 1, 13, 23, 1, 0, 16, 0 # '7' / 'DIGIT SEVEN' +x0038, 106, 1, 11, 23, 2, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 25, 12, 23, 2, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 14, 25, 16, 23, 2, 0, 19, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 31, 25, 15, 23, 2, 0, 19, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 47, 25, 16, 23, 2, 0, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 64, 25, 15, 23, 2, 0, 19, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 80, 25, 16, 23, 2, 0, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 97, 25, 16, 23, 2, 0, 19, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 49, 15, 23, 2, 0, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 17, 49, 15, 23, 2, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 33, 49, 4, 23, 8, 0, 19, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 38, 49, 10, 23, 4, 0, 19, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 49, 49, 16, 23, 2, 0, 19, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 114, 25, 13, 23, 3, 0, 19, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 66, 49, 15, 23, 2, 0, 19, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 82, 49, 15, 23, 2, 0, 19, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 98, 49, 15, 23, 2, 0, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 1, 73, 15, 23, 2, 0, 19, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 114, 49, 13, 13, 3, 5, 19, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 17, 73, 15, 23, 2, 0, 19, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 33, 73, 15, 23, 2, 0, 19, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 49, 73, 15, 23, 2, 0, 19, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 65, 73, 15, 23, 2, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 81, 73, 16, 23, 2, 0, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 98, 73, 16, 23, 2, 0, 19, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 1, 97, 15, 23, 2, 0, 19, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 17, 97, 15, 23, 2, 0, 19, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 33, 97, 17, 23, 1, 0, 19, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/poland_0.dds b/TS SE Tool/img/ETS2/lpFont/poland_0.dds new file mode 100644 index 00000000..a070fd85 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/poland_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/poland_0.mat b/TS SE Tool/img/ETS2/lpFont/poland_0.mat new file mode 100644 index 00000000..eb7fe59f --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/poland_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/poland_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/poland_0.tobj b/TS SE Tool/img/ETS2/lpFont/poland_0.tobj new file mode 100644 index 00000000..3bc7acf2 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/poland_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/portugal.font b/TS SE Tool/img/ETS2/lpFont/portugal.font new file mode 100644 index 00000000..dec7b9cc --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/portugal.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 14 +# Max advance: 17 +# Typical height 'above the line': 22 (height of letter 'M') +# Max pixels 'above the line': 22 +# Max pixels 'below the line': 1 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/portugal_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 117, 71, 0, 0, 0, 22, 13, 0 # ' ' / 'SPACE' +x002d, 113, 71, 3, 3, 4, 10, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 16, 1, 13, 22, 0, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 30, 1, 6, 22, 0, 0, 9, 0 # '1' / 'DIGIT ONE' +x0032, 37, 1, 13, 22, 0, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 51, 1, 13, 22, -1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 65, 1, 12, 22, 0, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 78, 1, 13, 22, 0, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 92, 1, 13, 22, 0, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 106, 1, 14, 22, 0, 0, 17, 0 # '7' / 'DIGIT SEVEN' +x0038, 1, 25, 13, 22, 0, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 15, 25, 13, 22, 0, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 29, 25, 13, 22, 0, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 43, 25, 13, 22, 0, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 57, 25, 12, 22, 0, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 70, 25, 13, 22, 0, 0, 16, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 84, 25, 13, 22, 0, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 98, 25, 13, 22, 0, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 112, 25, 13, 22, 0, 0, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 1, 48, 13, 22, 0, 0, 16, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 121, 1, 3, 22, 0, 0, 6, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 15, 48, 13, 22, 0, 0, 16, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 29, 48, 13, 22, 0, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 43, 48, 13, 22, 0, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 57, 48, 13, 22, 0, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 71, 48, 13, 22, 0, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 85, 48, 13, 22, 0, 0, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 99, 48, 12, 22, 0, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 1, 14, 23, 0, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 112, 48, 12, 22, 0, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 1, 71, 13, 22, 0, 0, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 15, 71, 12, 22, 0, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 28, 71, 13, 22, 0, 0, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 42, 71, 13, 22, 0, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 56, 71, 14, 22, 0, 0, 16, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 71, 71, 13, 22, 0, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 85, 71, 13, 22, 1, 0, 17, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 99, 71, 13, 22, 0, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/portugal_0.dds b/TS SE Tool/img/ETS2/lpFont/portugal_0.dds new file mode 100644 index 00000000..a0eda5b8 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/portugal_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/portugal_0.mat b/TS SE Tool/img/ETS2/lpFont/portugal_0.mat new file mode 100644 index 00000000..cf3b1b0f --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/portugal_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/portugal_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/portugal_0.tobj b/TS SE Tool/img/ETS2/lpFont/portugal_0.tobj new file mode 100644 index 00000000..80735dfb Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/portugal_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/romania.font b/TS SE Tool/img/ETS2/lpFont/romania.font new file mode 100644 index 00000000..3cd1e595 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/romania.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 25 +# Max advance: 25 +# Typical height 'above the line': 21 (height of letter 'M') +# Max pixels 'above the line': 21 +# Max pixels 'below the line': 1 + +vert_span:22 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/romania_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 89, 90, 0, 0, 0, 21, 7, 0 # ' ' / 'SPACE' +x002d, 79, 90, 9, 3, 2, 11, 13, 0 # '-' / 'HYPHEN-MINUS' +x0030, 20, 1, 13, 21, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 34, 1, 7, 21, 2, 0, 10, 0 # '1' / 'DIGIT ONE' +x0032, 42, 1, 13, 21, 1, 0, 14, 0 # '2' / 'DIGIT TWO' +x0033, 56, 1, 14, 21, 0, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 71, 1, 14, 21, 1, 0, 16, 0 # '4' / 'DIGIT FOUR' +x0035, 86, 1, 13, 21, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 100, 1, 12, 21, 1, 0, 14, 0 # '6' / 'DIGIT SIX' +x0037, 113, 1, 12, 21, 2, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 1, 24, 13, 21, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 15, 24, 12, 21, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 28, 24, 19, 21, 0, 0, 19, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 48, 24, 15, 21, 2, 0, 18, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 64, 24, 15, 21, 2, 0, 17, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 80, 24, 16, 21, 2, 0, 19, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 97, 24, 14, 21, 2, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 112, 24, 14, 21, 2, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 46, 16, 21, 2, 0, 19, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 18, 46, 15, 21, 2, 0, 19, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 34, 46, 4, 21, 2, 0, 7, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 39, 46, 14, 21, -1, 0, 14, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 54, 46, 17, 21, 2, 0, 18, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 72, 46, 14, 21, 2, 0, 16, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 87, 46, 19, 21, 2, 0, 22, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 107, 46, 16, 21, 2, 0, 20, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 1, 68, 16, 21, 2, 0, 19, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 18, 68, 15, 21, 2, 0, 18, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 1, 18, 22, 2, 0, 19, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 34, 68, 16, 21, 2, 0, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 51, 68, 17, 21, 0, 0, 17, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 69, 68, 15, 21, 1, 0, 17, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 85, 68, 16, 21, 2, 0, 19, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 102, 68, 17, 21, 0, 0, 17, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 90, 25, 21, 0, 0, 25, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 27, 90, 18, 21, -1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 46, 90, 17, 21, -1, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 64, 90, 14, 21, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/romania_0.dds b/TS SE Tool/img/ETS2/lpFont/romania_0.dds new file mode 100644 index 00000000..c3fea758 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/romania_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/romania_0.mat b/TS SE Tool/img/ETS2/lpFont/romania_0.mat new file mode 100644 index 00000000..c352d507 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/romania_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/romania_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/romania_0.tobj b/TS SE Tool/img/ETS2/lpFont/romania_0.tobj new file mode 100644 index 00000000..75284781 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/romania_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/russia.font b/TS SE Tool/img/ETS2/lpFont/russia.font new file mode 100644 index 00000000..99e78155 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/russia.font @@ -0,0 +1,52 @@ +# SCS Font +# Max width: 21 +# Max advance: 25 +# Typical height 'above the line': 26 (height of letter 'M') +# Max pixels 'above the line': 34 +# Max pixels 'below the line': 2 + +vert_span:36 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/russia_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 106, 99, 0, 0, 0, 34, 16, 0 # ' ' / 'SPACE' +x0030, 43, 1, 19, 34, 1, 0, 21, 0 # '0' / 'DIGIT ZERO' +x0031, 63, 1, 15, 34, 0, 0, 16, 0 # '1' / 'DIGIT ONE' +x0032, 79, 1, 19, 34, 1, 0, 21, 0 # '2' / 'DIGIT TWO' +x0033, 1, 1, 20, 35, 1, 0, 21, 0 # '3' / 'DIGIT THREE' +x0034, 99, 1, 18, 34, 0, 0, 19, 0 # '4' / 'DIGIT FOUR' +x0035, 22, 1, 20, 35, 1, 1, 23, 0 # '5' / 'DIGIT FIVE' +x0036, 1, 37, 20, 34, 1, 0, 22, 0 # '6' / 'DIGIT SIX' +x0037, 22, 37, 19, 34, 1, 0, 21, 0 # '7' / 'DIGIT SEVEN' +x0038, 42, 37, 20, 34, 1, 0, 22, 0 # '8' / 'DIGIT EIGHT' +x0039, 63, 37, 20, 34, 1, 0, 22, 0 # '9' / 'DIGIT NINE' +x0041, 105, 37, 19, 26, 1, 8, 21, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 1, 72, 18, 26, 2, 8, 22, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 20, 72, 18, 26, 1, 8, 19, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 39, 72, 20, 26, 2, 8, 25, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 60, 72, 14, 26, 3, 8, 19, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0048, 75, 72, 18, 26, 2, 8, 22, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x004b, 94, 72, 17, 26, 2, 8, 21, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004d, 1, 99, 21, 26, 1, 8, 24, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004f, 23, 99, 21, 26, 1, 8, 23, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 45, 99, 17, 26, 2, 8, 20, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0054, 63, 99, 20, 26, 1, 8, 22, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0058, 84, 99, 21, 26, 1, 8, 22, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 84, 37, 20, 27, 1, 7, 21, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/russia_0.dds b/TS SE Tool/img/ETS2/lpFont/russia_0.dds new file mode 100644 index 00000000..ee794e09 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/russia_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/russia_0.mat b/TS SE Tool/img/ETS2/lpFont/russia_0.mat new file mode 100644 index 00000000..5afd0b59 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/russia_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/russia_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/russia_0.tobj b/TS SE Tool/img/ETS2/lpFont/russia_0.tobj new file mode 100644 index 00000000..1b0d6c15 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/russia_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/slovakia.font b/TS SE Tool/img/ETS2/lpFont/slovakia.font new file mode 100644 index 00000000..29bf178e --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/slovakia.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 21 +# Max advance: 24 +# Typical height 'above the line': 24 (height of letter 'M') +# Max pixels 'above the line': 27 +# Max pixels 'below the line': 0 + +vert_span:27 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/slovakia_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 15, 101, 0, 0, 0, 27, 12, 0 # ' ' / 'SPACE' +x002d, 116, 51, 11, 3, 2, 10, 15, 0 # '-' / 'HYPHEN-MINUS' +x0030, 1, 1, 13, 24, 2, 0, 15, 0 # '0' / 'DIGIT ZERO' +x0031, 15, 1, 8, 24, 3, 0, 14, 0 # '1' / 'DIGIT ONE' +x0032, 24, 1, 13, 24, 2, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 38, 1, 13, 24, 2, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 52, 1, 13, 24, 2, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 66, 1, 13, 24, 2, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 80, 1, 13, 24, 2, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 13, 24, 2, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 108, 1, 13, 24, 2, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 26, 13, 24, 2, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 15, 26, 13, 24, 2, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 29, 26, 13, 24, 2, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 43, 26, 13, 24, 2, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 57, 26, 13, 24, 2, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 71, 26, 13, 24, 2, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 85, 26, 13, 24, 2, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 99, 26, 13, 24, 2, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 113, 26, 13, 24, 2, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 1, 4, 24, 2, 0, 6, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 1, 51, 13, 24, 2, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 15, 51, 13, 24, 2, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 29, 51, 13, 24, 2, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 43, 51, 16, 24, 2, 0, 18, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 60, 51, 13, 24, 2, 0, 15, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 74, 51, 13, 24, 2, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 88, 51, 13, 24, 2, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 102, 51, 13, 24, 2, 0, 15, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 76, 13, 24, 2, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 15, 76, 13, 24, 2, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 29, 76, 13, 24, 2, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 43, 76, 13, 24, 2, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 57, 76, 13, 24, 2, 0, 15, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 71, 76, 21, 24, 2, 0, 24, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 93, 76, 13, 24, 2, 0, 15, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 107, 76, 13, 24, 2, 0, 15, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 1, 101, 13, 24, 2, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/slovakia_0.dds b/TS SE Tool/img/ETS2/lpFont/slovakia_0.dds new file mode 100644 index 00000000..e3f8d8ce Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/slovakia_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/slovakia_0.mat b/TS SE Tool/img/ETS2/lpFont/slovakia_0.mat new file mode 100644 index 00000000..f11b1eee --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/slovakia_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/slovakia_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/slovakia_0.tobj b/TS SE Tool/img/ETS2/lpFont/slovakia_0.tobj new file mode 100644 index 00000000..47784527 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/slovakia_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/spain.font b/TS SE Tool/img/ETS2/lpFont/spain.font new file mode 100644 index 00000000..719d920d --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/spain.font @@ -0,0 +1,68 @@ +# SCS Font +# Max width: 15 +# Max advance: 17 +# Typical height 'above the line': 22 (height of letter 'M') +# Max pixels 'above the line': 22 +# Max pixels 'below the line': 2 + +vert_span:24 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/spain_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 14, 95, 0, 0, 0, 22, 13, 0 # ' ' / 'SPACE' +x002d, 1, 95, 12, 3, 0, 10, 15, 0 # '-' / 'HYPHEN-MINUS' +x0030, 45, 1, 13, 22, 0, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 59, 1, 6, 22, 0, 0, 9, 0 # '1' / 'DIGIT ONE' +x0032, 66, 1, 13, 22, 0, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 80, 1, 14, 22, -1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 95, 1, 12, 22, 0, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 16, 1, 14, 23, 0, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 108, 1, 13, 22, 0, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 1, 26, 14, 22, 0, 0, 17, 0 # '7' / 'DIGIT SEVEN' +x0038, 16, 26, 13, 22, 0, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 30, 26, 13, 22, 0, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 44, 26, 13, 22, 0, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 58, 26, 13, 22, 0, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 72, 26, 12, 22, 0, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 85, 26, 13, 22, 0, 0, 16, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 99, 26, 13, 22, 0, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 113, 26, 13, 22, 0, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 1, 49, 13, 22, 0, 0, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 15, 49, 13, 22, 0, 0, 16, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 1, 3, 22, 0, 0, 6, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 29, 49, 13, 22, 0, 0, 16, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 43, 49, 13, 22, 0, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 57, 49, 13, 22, 0, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 71, 49, 13, 22, 0, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 31, 1, 13, 23, 0, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 85, 49, 13, 22, 0, 0, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 99, 49, 12, 22, 0, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 1, 14, 24, 0, 0, 16, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 112, 49, 12, 22, 0, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 1, 72, 13, 22, 0, 0, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 15, 72, 12, 22, 0, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 28, 72, 13, 22, 0, 0, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 42, 72, 13, 22, 0, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 56, 72, 14, 22, 0, 0, 16, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 71, 72, 15, 22, -1, 0, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 87, 72, 14, 22, -1, 0, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 102, 72, 13, 22, 0, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/spain_0.dds b/TS SE Tool/img/ETS2/lpFont/spain_0.dds new file mode 100644 index 00000000..692b4b02 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/spain_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/spain_0.mat b/TS SE Tool/img/ETS2/lpFont/spain_0.mat new file mode 100644 index 00000000..c4bf1d5c --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/spain_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/spain_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/spain_0.tobj b/TS SE Tool/img/ETS2/lpFont/spain_0.tobj new file mode 100644 index 00000000..d79d1f59 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/spain_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/sweden.font b/TS SE Tool/img/ETS2/lpFont/sweden.font new file mode 100644 index 00000000..4ca3d7a5 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/sweden.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 14 +# Max advance: 16 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 0 + +vert_span:23 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/sweden_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 120, 73, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002d, 112, 73, 7, 3, 2, 10, 11, 0 # '-' / 'HYPHEN-MINUS' +x0030, 0, 0, 14, 23, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 45, 98, 8, 23, 2, 0, 13, 0 # '1' / 'DIGIT ONE' +x0032, 24, 1, 13, 23, 1, 0, 15, 0 # '2' / 'DIGIT TWO' +x0033, 38, 1, 13, 23, 1, 0, 15, 0 # '3' / 'DIGIT THREE' +x0034, 52, 1, 13, 23, 1, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 66, 1, 13, 23, 1, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 80, 1, 13, 23, 1, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 94, 1, 13, 23, 1, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 108, 1, 13, 23, 1, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 1, 25, 13, 23, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 15, 25, 13, 23, 1, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 29, 25, 13, 23, 1, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 43, 25, 13, 23, 1, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 57, 25, 13, 23, 1, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 71, 25, 13, 23, 1, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 85, 25, 13, 23, 1, 0, 16, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 99, 25, 13, 23, 1, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 113, 25, 13, 23, 1, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 122, 1, 4, 23, 2, 0, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 1, 49, 13, 23, 1, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 15, 49, 13, 23, 1, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 29, 49, 13, 23, 1, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 21, 98, 16, 23, 1, 0, 16, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 57, 49, 14, 23, 1, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 72, 49, 13, 23, 1, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 87, 49, 13, 23, 1, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 59, 98, 15, 25, 1, 0, 15, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 1, 73, 13, 23, 1, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 15, 73, 13, 23, 1, 0, 15, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 29, 73, 13, 23, 1, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 43, 73, 13, 23, 1, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 57, 73, 13, 23, 1, 0, 15, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 98, 18, 23, 1, 0, 15, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 85, 73, 13, 23, 1, 0, 15, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 115, 49, 12, 23, 1, 0, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 99, 73, 12, 23, 1, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/sweden_0.dds b/TS SE Tool/img/ETS2/lpFont/sweden_0.dds new file mode 100644 index 00000000..4717aaa7 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/sweden_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/sweden_0.mat b/TS SE Tool/img/ETS2/lpFont/sweden_0.mat new file mode 100644 index 00000000..703afad5 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/sweden_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/sweden_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/sweden_0.tobj b/TS SE Tool/img/ETS2/lpFont/sweden_0.tobj new file mode 100644 index 00000000..ac9c753c Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/sweden_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/switzerland.font b/TS SE Tool/img/ETS2/lpFont/switzerland.font new file mode 100644 index 00000000..23169b1c --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/switzerland.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 15 +# Max advance: 18 +# Typical height 'above the line': 23 (height of letter 'M') +# Max pixels 'above the line': 23 +# Max pixels 'below the line': 1 + +vert_span:24 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/switzerland_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 97, 73, 0, 0, 0, 23, 8, 0 # ' ' / 'SPACE' +x002e, 119, 1, 6, 6, 2, 8, 12, 0 # '.' / 'FULL STOP' +x0030, 1, 1, 12, 23, 1, 0, 14, 0 # '0' / 'DIGIT ZERO' +x0031, 117, 49, 10, 22, 1, 1, 13, 0 # '1' / 'DIGIT ONE' +x0032, 71, 73, 12, 22, 1, 1, 15, 0 # '2' / 'DIGIT TWO' +x0033, 84, 73, 12, 22, 1, 1, 14, 0 # '3' / 'DIGIT THREE' +x0034, 14, 1, 12, 23, 1, 0, 14, 0 # '4' / 'DIGIT FOUR' +x0035, 27, 1, 12, 23, 2, 0, 15, 0 # '5' / 'DIGIT FIVE' +x0036, 40, 1, 13, 23, 1, 0, 15, 0 # '6' / 'DIGIT SIX' +x0037, 54, 1, 13, 23, 1, 0, 15, 0 # '7' / 'DIGIT SEVEN' +x0038, 68, 1, 11, 23, 2, 0, 15, 0 # '8' / 'DIGIT EIGHT' +x0039, 80, 1, 12, 23, 1, 1, 15, 0 # '9' / 'DIGIT NINE' +x0041, 93, 1, 13, 23, 1, 0, 15, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 107, 1, 11, 23, 2, 0, 15, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 1, 25, 12, 23, 2, 0, 15, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 14, 25, 11, 23, 2, 0, 15, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 26, 25, 12, 23, 2, 0, 15, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 39, 25, 12, 23, 2, 0, 15, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 52, 25, 11, 23, 2, 0, 15, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 64, 25, 11, 23, 2, 0, 15, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 76, 25, 3, 23, 2, 0, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 80, 25, 12, 23, 1, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 93, 25, 12, 23, 2, 0, 15, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 106, 25, 12, 23, 2, 0, 15, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 1, 49, 15, 23, 1, 0, 18, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 17, 49, 11, 23, 2, 0, 15, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 29, 49, 11, 23, 2, 0, 15, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 41, 49, 11, 23, 2, 0, 15, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 53, 49, 11, 23, 2, 0, 15, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 65, 49, 11, 23, 2, 0, 15, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 77, 49, 13, 23, 0, 0, 14, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 91, 49, 13, 23, 1, 0, 15, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 105, 49, 11, 23, 2, 0, 15, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 1, 73, 12, 23, 1, 0, 15, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 14, 73, 15, 23, 2, 0, 18, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 30, 73, 12, 23, 1, 0, 15, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 43, 73, 13, 23, 1, 0, 14, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 57, 73, 13, 23, 1, 0, 15, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/switzerland_0.dds b/TS SE Tool/img/ETS2/lpFont/switzerland_0.dds new file mode 100644 index 00000000..c3c72cba Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/switzerland_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/switzerland_0.mat b/TS SE Tool/img/ETS2/lpFont/switzerland_0.mat new file mode 100644 index 00000000..32718635 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/switzerland_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/switzerland_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/switzerland_0.tobj b/TS SE Tool/img/ETS2/lpFont/switzerland_0.tobj new file mode 100644 index 00000000..714a0f39 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/switzerland_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/turkey.font b/TS SE Tool/img/ETS2/lpFont/turkey.font new file mode 100644 index 00000000..5c3c5d5e --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/turkey.font @@ -0,0 +1,67 @@ +# SCS Font +# Max width: 19 +# Max advance: 22 +# Typical height 'above the line': 24 (height of letter 'M') +# Max pixels 'above the line': 24 +# Max pixels 'below the line': 1 + +vert_span:25 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +default_scale:1.000000 # default font scale in reference resolution + +image:/font/license_plate/turkey_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 74, 102, 0, 0, 0, 24, 8, 0 # ' ' / 'SPACE' +x0030, 21, 1, 13, 24, 2, 0, 17, 0 # '0' / 'DIGIT ZERO' +x0031, 35, 1, 7, 24, 4, 0, 16, 0 # '1' / 'DIGIT ONE' +x0032, 43, 1, 13, 24, 1, 0, 16, 0 # '2' / 'DIGIT TWO' +x0033, 57, 1, 14, 24, 1, 0, 17, 0 # '3' / 'DIGIT THREE' +x0034, 72, 1, 13, 24, 1, 0, 15, 0 # '4' / 'DIGIT FOUR' +x0035, 86, 1, 14, 24, 1, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 101, 1, 13, 24, 2, 0, 17, 0 # '6' / 'DIGIT SIX' +x0037, 1, 27, 13, 24, 2, 0, 16, 0 # '7' / 'DIGIT SEVEN' +x0038, 15, 27, 14, 24, 1, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 30, 27, 13, 24, 1, 0, 15, 0 # '9' / 'DIGIT NINE' +x0041, 44, 27, 17, 24, 1, 0, 19, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 62, 27, 14, 24, 1, 0, 17, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 77, 27, 14, 24, 2, 0, 18, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 92, 27, 14, 24, 2, 0, 18, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 107, 27, 14, 24, 1, 0, 16, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 1, 52, 14, 24, 2, 0, 17, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 16, 52, 14, 24, 1, 0, 16, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 31, 52, 15, 24, 1, 0, 17, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 115, 1, 4, 24, 2, 0, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 47, 52, 14, 24, 0, 0, 15, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 62, 52, 14, 24, 2, 0, 18, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 77, 52, 15, 24, 1, 0, 17, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 93, 52, 17, 24, 2, 0, 20, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 111, 52, 16, 24, 1, 0, 19, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 1, 77, 13, 24, 2, 0, 17, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 15, 77, 14, 24, 1, 0, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 1, 1, 19, 25, 2, 0, 20, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 30, 77, 15, 24, 1, 0, 18, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 46, 77, 15, 24, 1, 0, 17, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 62, 77, 16, 24, 1, 0, 18, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 79, 77, 14, 24, 2, 0, 18, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 94, 77, 19, 24, 0, 0, 19, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 1, 102, 17, 24, 3, 0, 22, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 19, 102, 19, 24, -1, 0, 17, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 39, 102, 18, 24, 0, 0, 18, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 58, 102, 15, 24, 1, 0, 17, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/turkey_0.dds b/TS SE Tool/img/ETS2/lpFont/turkey_0.dds new file mode 100644 index 00000000..40609b35 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/turkey_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/turkey_0.mat b/TS SE Tool/img/ETS2/lpFont/turkey_0.mat new file mode 100644 index 00000000..ba8ee4f9 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/turkey_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/turkey_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/turkey_0.tobj b/TS SE Tool/img/ETS2/lpFont/turkey_0.tobj new file mode 100644 index 00000000..ef9fcbc1 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/turkey_0.tobj differ diff --git a/TS SE Tool/img/ETS2/lpFont/uk.font b/TS SE Tool/img/ETS2/lpFont/uk.font new file mode 100644 index 00000000..fa121680 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/uk.font @@ -0,0 +1,66 @@ +# SCS Font +# Max width: 15 +# Max advance: 17 +# Typical height 'above the line': 21 (height of letter 'M') +# Max pixels 'above the line': 21 +# Max pixels 'below the line': 1 + +vert_span:22 # max difference between lowest and highest pixel in any two glyphs +line_spacing:0 # suggested number of pixels to put between lines + +image:/font/license_plate/uk_0.mat, 128, 128 + +# P_x: starting column of glyph rectangle in the font bitmap +# P_y: starting row of glyph rectangle in the font bitmap +# W: width of the glyph rectangle +# H: height of the glyph rectangle +# L: left offset of the rectangle when placing it relative to current 'pen position' +# (negative value can be thought of as 'hard' kerning, but is used at the beginning of line too!) +# T: top offset of the rectangle when placing it relative to current 'pen position' +# (the 'pen' is expected to be at the level of topmost pixel of highest glyph) +# A: advance of the 'pen' for rendering of the following glyph +# I: image index + +#NUM, P_x, P_y, W, H, L, T, A, I # character / glyph name + +x0020, 16, 90, 0, 0, 0, 21, 9, 0 # ' ' / 'SPACE' +x002d, 17, 90, 0, 0, 0, 21, 9, 0 # '-' / 'HYPHEN-MINUS' +x0030, 46, 1, 12, 21, 2, 0, 16, 0 # '0' / 'DIGIT ZERO' +x0031, 115, 46, 5, 20, 1, 1, 7, 0 # '1' / 'DIGIT ONE' +x0032, 45, 68, 15, 20, 1, 1, 17, 0 # '2' / 'DIGIT TWO' +x0033, 61, 68, 14, 20, 1, 1, 16, 0 # '3' / 'DIGIT THREE' +x0034, 76, 68, 14, 20, 1, 1, 17, 0 # '4' / 'DIGIT FOUR' +x0035, 59, 1, 14, 21, 1, 0, 16, 0 # '5' / 'DIGIT FIVE' +x0036, 74, 1, 12, 21, 2, 0, 16, 0 # '6' / 'DIGIT SIX' +x0037, 87, 1, 14, 21, 1, 0, 17, 0 # '7' / 'DIGIT SEVEN' +x0038, 102, 1, 12, 21, 2, 0, 16, 0 # '8' / 'DIGIT EIGHT' +x0039, 115, 1, 12, 21, 2, 0, 16, 0 # '9' / 'DIGIT NINE' +x0041, 1, 1, 14, 22, 1, 0, 16, 0 # 'A' / 'LATIN CAPITAL LETTER A' +x0042, 1, 24, 15, 21, 1, 0, 16, 0 # 'B' / 'LATIN CAPITAL LETTER B' +x0043, 17, 24, 15, 21, 1, 0, 17, 0 # 'C' / 'LATIN CAPITAL LETTER C' +x0044, 33, 24, 15, 21, 1, 0, 17, 0 # 'D' / 'LATIN CAPITAL LETTER D' +x0045, 49, 24, 15, 21, 1, 0, 17, 0 # 'E' / 'LATIN CAPITAL LETTER E' +x0046, 65, 24, 14, 21, 2, 0, 17, 0 # 'F' / 'LATIN CAPITAL LETTER F' +x0047, 80, 24, 14, 21, 1, 0, 17, 0 # 'G' / 'LATIN CAPITAL LETTER G' +x0048, 95, 24, 14, 21, 1, 0, 16, 0 # 'H' / 'LATIN CAPITAL LETTER H' +x0049, 121, 46, 5, 20, 2, 1, 8, 0 # 'I' / 'LATIN CAPITAL LETTER I' +x004a, 110, 24, 14, 21, 1, 0, 17, 0 # 'J' / 'LATIN CAPITAL LETTER J' +x004b, 1, 46, 14, 21, 2, 0, 16, 0 # 'K' / 'LATIN CAPITAL LETTER K' +x004c, 16, 46, 14, 21, 2, 0, 16, 0 # 'L' / 'LATIN CAPITAL LETTER L' +x004d, 31, 46, 13, 21, 2, 0, 17, 0 # 'M' / 'LATIN CAPITAL LETTER M' +x004e, 16, 1, 15, 22, 1, 0, 16, 0 # 'N' / 'LATIN CAPITAL LETTER N' +x004f, 45, 46, 12, 21, 2, 0, 16, 0 # 'O' / 'LATIN CAPITAL LETTER O' +x0050, 58, 46, 12, 21, 2, 0, 16, 0 # 'P' / 'LATIN CAPITAL LETTER P' +x0051, 32, 1, 13, 22, 2, 0, 17, 0 # 'Q' / 'LATIN CAPITAL LETTER Q' +x0052, 71, 46, 13, 21, 1, 0, 16, 0 # 'R' / 'LATIN CAPITAL LETTER R' +x0053, 85, 46, 14, 21, 1, 0, 16, 0 # 'S' / 'LATIN CAPITAL LETTER S' +x0054, 100, 46, 14, 21, 1, 0, 16, 0 # 'T' / 'LATIN CAPITAL LETTER T' +x0055, 1, 68, 13, 21, 2, 0, 16, 0 # 'U' / 'LATIN CAPITAL LETTER U' +x0056, 15, 68, 14, 21, 1, 0, 16, 0 # 'V' / 'LATIN CAPITAL LETTER V' +x0057, 91, 68, 14, 20, 1, 1, 16, 0 # 'W' / 'LATIN CAPITAL LETTER W' +x0058, 106, 68, 14, 20, 1, 1, 16, 0 # 'X' / 'LATIN CAPITAL LETTER X' +x0059, 1, 90, 14, 20, 1, 1, 16, 0 # 'Y' / 'LATIN CAPITAL LETTER Y' +x005a, 30, 68, 14, 21, 1, 0, 16, 0 # 'Z' / 'LATIN CAPITAL LETTER Z' + +# kerning... + diff --git a/TS SE Tool/img/ETS2/lpFont/uk_0.dds b/TS SE Tool/img/ETS2/lpFont/uk_0.dds new file mode 100644 index 00000000..120cb1ab Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/uk_0.dds differ diff --git a/TS SE Tool/img/ETS2/lpFont/uk_0.mat b/TS SE Tool/img/ETS2/lpFont/uk_0.mat new file mode 100644 index 00000000..2d47a6c3 --- /dev/null +++ b/TS SE Tool/img/ETS2/lpFont/uk_0.mat @@ -0,0 +1,4 @@ +material : "ui.white_font" { + texture : "/font/license_plate/uk_0.tobj" + texture_name : "texture" +} diff --git a/TS SE Tool/img/ETS2/lpFont/uk_0.tobj b/TS SE Tool/img/ETS2/lpFont/uk_0.tobj new file mode 100644 index 00000000..0af39a67 Binary files /dev/null and b/TS SE Tool/img/ETS2/lpFont/uk_0.tobj differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_0.dds b/TS SE Tool/img/ETS2/player_logo/logo_0.dds new file mode 100644 index 00000000..736f99d1 Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_0.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_1.dds b/TS SE Tool/img/ETS2/player_logo/logo_1.dds new file mode 100644 index 00000000..6e03dfad Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_1.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_2.dds b/TS SE Tool/img/ETS2/player_logo/logo_2.dds new file mode 100644 index 00000000..4c9e0ab1 Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_2.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_3.dds b/TS SE Tool/img/ETS2/player_logo/logo_3.dds new file mode 100644 index 00000000..d0f6ce93 Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_3.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_4.dds b/TS SE Tool/img/ETS2/player_logo/logo_4.dds new file mode 100644 index 00000000..e01190cc Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_4.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_5.dds b/TS SE Tool/img/ETS2/player_logo/logo_5.dds new file mode 100644 index 00000000..771cf9e5 Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_5.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_6.dds b/TS SE Tool/img/ETS2/player_logo/logo_6.dds new file mode 100644 index 00000000..da77c47d Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_6.dds differ diff --git a/TS SE Tool/img/ETS2/player_logo/logo_7.dds b/TS SE Tool/img/ETS2/player_logo/logo_7.dds new file mode 100644 index 00000000..58ada36e Binary files /dev/null and b/TS SE Tool/img/ETS2/player_logo/logo_7.dds differ diff --git a/TS SE Tool/img/ETS2/trailer.dds b/TS SE Tool/img/ETS2/trailer.dds new file mode 100644 index 00000000..b8b3341e Binary files /dev/null and b/TS SE Tool/img/ETS2/trailer.dds differ diff --git a/TS SE Tool/img/ETS2/trailer_body.dds b/TS SE Tool/img/ETS2/trailer_body.dds new file mode 100644 index 00000000..253dc4b4 Binary files /dev/null and b/TS SE Tool/img/ETS2/trailer_body.dds differ diff --git a/TS SE Tool/img/ETS2/trailer_chassis.dds b/TS SE Tool/img/ETS2/trailer_chassis.dds new file mode 100644 index 00000000..5ac6b768 Binary files /dev/null and b/TS SE Tool/img/ETS2/trailer_chassis.dds differ diff --git a/TS SE Tool/img/ETS2/transmission.dds b/TS SE Tool/img/ETS2/transmission.dds new file mode 100644 index 00000000..40e6c69e Binary files /dev/null and b/TS SE Tool/img/ETS2/transmission.dds differ diff --git a/TS SE Tool/img/ETS2/truck.dds b/TS SE Tool/img/ETS2/truck.dds new file mode 100644 index 00000000..d5db68e6 Binary files /dev/null and b/TS SE Tool/img/ETS2/truck.dds differ diff --git a/TS SE Tool/img/ETS2/tyres.dds b/TS SE Tool/img/ETS2/tyres.dds new file mode 100644 index 00000000..655fcc31 Binary files /dev/null and b/TS SE Tool/img/ETS2/tyres.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/garage_free_ico.dds b/TS SE Tool/img/UI/Company/Garages/garage_free_ico.dds new file mode 100644 index 00000000..117b8b68 Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/garage_free_ico.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/garage_large_ico.dds b/TS SE Tool/img/UI/Company/Garages/garage_large_ico.dds new file mode 100644 index 00000000..d01fbf06 Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/garage_large_ico.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/garage_small_ico.dds b/TS SE Tool/img/UI/Company/Garages/garage_small_ico.dds new file mode 100644 index 00000000..e64e736c Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/garage_small_ico.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/garage_tiny_ico.dds b/TS SE Tool/img/UI/Company/Garages/garage_tiny_ico.dds new file mode 100644 index 00000000..f4636153 Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/garage_tiny_ico.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_big_n.dds b/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_big_n.dds new file mode 100644 index 00000000..c7d1602b Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_big_n.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_small_n.dds b/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_small_n.dds new file mode 100644 index 00000000..b4fe8253 Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_small_n.dds differ diff --git a/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_tiny_n.dds b/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_tiny_n.dds new file mode 100644 index 00000000..649698cf Binary files /dev/null and b/TS SE Tool/img/UI/Company/Garages/hq_garage_ico_tiny_n.dds differ diff --git a/TS SE Tool/img/UI/Company/VisitedCities/city_pin_0.dds b/TS SE Tool/img/UI/Company/VisitedCities/city_pin_0.dds new file mode 100644 index 00000000..af53f50d Binary files /dev/null and b/TS SE Tool/img/UI/Company/VisitedCities/city_pin_0.dds differ diff --git a/TS SE Tool/img/UI/Company/VisitedCities/city_pin_1.dds b/TS SE Tool/img/UI/Company/VisitedCities/city_pin_1.dds new file mode 100644 index 00000000..182052e7 Binary files /dev/null and b/TS SE Tool/img/UI/Company/VisitedCities/city_pin_1.dds differ diff --git a/TS SE Tool/img/UI/Company/VisitedCities/city_pin_2.dds b/TS SE Tool/img/UI/Company/VisitedCities/city_pin_2.dds new file mode 100644 index 00000000..3d4fc822 Binary files /dev/null and b/TS SE Tool/img/UI/Company/VisitedCities/city_pin_2.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/CargoTypes/articulated.dds b/TS SE Tool/img/UI/FreightMarket/CargoTypes/articulated.dds new file mode 100644 index 00000000..58d2afd0 Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/CargoTypes/articulated.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/CargoTypes/fragile.dds b/TS SE Tool/img/UI/FreightMarket/CargoTypes/fragile.dds new file mode 100644 index 00000000..f70fb744 Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/CargoTypes/fragile.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/CargoTypes/heavy.dds b/TS SE Tool/img/UI/FreightMarket/CargoTypes/heavy.dds new file mode 100644 index 00000000..95d7825b Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/CargoTypes/heavy.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/CargoTypes/none_32.dds b/TS SE Tool/img/UI/FreightMarket/CargoTypes/none_32.dds new file mode 100644 index 00000000..f03cd9b0 Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/CargoTypes/none_32.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/CargoTypes/valuable.dds b/TS SE Tool/img/UI/FreightMarket/CargoTypes/valuable.dds new file mode 100644 index 00000000..05962be5 Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/CargoTypes/valuable.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/JobUrgency/easy.dds b/TS SE Tool/img/UI/FreightMarket/JobUrgency/easy.dds new file mode 100644 index 00000000..70cf6e23 Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/JobUrgency/easy.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/JobUrgency/hard.dds b/TS SE Tool/img/UI/FreightMarket/JobUrgency/hard.dds new file mode 100644 index 00000000..54281f2a Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/JobUrgency/hard.dds differ diff --git a/TS SE Tool/img/UI/FreightMarket/JobUrgency/normal.dds b/TS SE Tool/img/UI/FreightMarket/JobUrgency/normal.dds new file mode 100644 index 00000000..3eea4098 Binary files /dev/null and b/TS SE Tool/img/UI/FreightMarket/JobUrgency/normal.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/cargo_market.dds b/TS SE Tool/img/UI/MainTabs/cargo_market.dds new file mode 100644 index 00000000..6e8ba732 Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/cargo_market.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/comp_man.dds b/TS SE Tool/img/UI/MainTabs/comp_man.dds new file mode 100644 index 00000000..b674cd91 Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/comp_man.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/company_job.dds b/TS SE Tool/img/UI/MainTabs/company_job.dds new file mode 100644 index 00000000..722d7d2e Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/company_job.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/maps.dds b/TS SE Tool/img/UI/MainTabs/maps.dds new file mode 100644 index 00000000..32440b8e Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/maps.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/profiles.dds b/TS SE Tool/img/UI/MainTabs/profiles.dds new file mode 100644 index 00000000..a02ab189 Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/profiles.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/trailers.dds b/TS SE Tool/img/UI/MainTabs/trailers.dds new file mode 100644 index 00000000..c7af2a68 Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/trailers.dds differ diff --git a/TS SE Tool/img/UI/MainTabs/truck_service.dds b/TS SE Tool/img/UI/MainTabs/truck_service.dds new file mode 100644 index 00000000..718cb066 Binary files /dev/null and b/TS SE Tool/img/UI/MainTabs/truck_service.dds differ diff --git a/TS SE Tool/img/UI/PDF.png b/TS SE Tool/img/UI/PDF.png new file mode 100644 index 00000000..0eeb2fa6 Binary files /dev/null and b/TS SE Tool/img/UI/PDF.png differ diff --git a/TS SE Tool/img/UI/Profile/skill_adr.dds b/TS SE Tool/img/UI/Profile/skill_adr.dds new file mode 100644 index 00000000..165b0e0c Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_adr.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_bar1.dds b/TS SE Tool/img/UI/Profile/skill_bar1.dds new file mode 100644 index 00000000..1247938a Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_bar1.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_bar2.dds b/TS SE Tool/img/UI/Profile/skill_bar2.dds new file mode 100644 index 00000000..279c22af Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_bar2.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_bar3.dds b/TS SE Tool/img/UI/Profile/skill_bar3.dds new file mode 100644 index 00000000..63b93d2f Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_bar3.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_bar_s.dds b/TS SE Tool/img/UI/Profile/skill_bar_s.dds new file mode 100644 index 00000000..fe394ab6 Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_bar_s.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_bar_s2.dds b/TS SE Tool/img/UI/Profile/skill_bar_s2.dds new file mode 100644 index 00000000..088f5abb Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_bar_s2.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_distance.dds b/TS SE Tool/img/UI/Profile/skill_distance.dds new file mode 100644 index 00000000..fea6a980 Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_distance.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_fragile.dds b/TS SE Tool/img/UI/Profile/skill_fragile.dds new file mode 100644 index 00000000..e6ac7244 Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_fragile.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_heavy.dds b/TS SE Tool/img/UI/Profile/skill_heavy.dds new file mode 100644 index 00000000..fc1d6c18 Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_heavy.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_jit.dds b/TS SE Tool/img/UI/Profile/skill_jit.dds new file mode 100644 index 00000000..4a995ca4 Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_jit.dds differ diff --git a/TS SE Tool/img/UI/Profile/skill_mechanical.dds b/TS SE Tool/img/UI/Profile/skill_mechanical.dds new file mode 100644 index 00000000..9db49db8 Binary files /dev/null and b/TS SE Tool/img/UI/Profile/skill_mechanical.dds differ diff --git a/TS SE Tool/img/UI/SCS.png b/TS SE Tool/img/UI/SCS.png new file mode 100644 index 00000000..c45d2594 Binary files /dev/null and b/TS SE Tool/img/UI/SCS.png differ diff --git a/TS SE Tool/img/UI/Settings.png b/TS SE Tool/img/UI/Settings.png new file mode 100644 index 00000000..a0fd9512 Binary files /dev/null and b/TS SE Tool/img/UI/Settings.png differ diff --git a/TS SE Tool/img/UI/TMP.png b/TS SE Tool/img/UI/TMP.png new file mode 100644 index 00000000..b85935c2 Binary files /dev/null and b/TS SE Tool/img/UI/TMP.png differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/Accessories/mute_checkbox_2.dds b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/mute_checkbox_2.dds new file mode 100644 index 00000000..74ce2e1f Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/mute_checkbox_2.dds differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/Accessories/plate_number.dds b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/plate_number.dds new file mode 100644 index 00000000..5d5949f8 Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/plate_number.dds differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/Accessories/truck_config.dds b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/truck_config.dds new file mode 100644 index 00000000..e56020cb Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/truck_config.dds differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/Accessories/upgrades.dds b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/upgrades.dds new file mode 100644 index 00000000..02136bb6 Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/upgrades.dds differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/Accessories/use_preset.dds b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/use_preset.dds new file mode 100644 index 00000000..6aa1ec27 Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/Accessories/use_preset.dds differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/gas_ico.dds b/TS SE Tool/img/UI/Trucks&Trailers/gas_ico.dds new file mode 100644 index 00000000..620e5c30 Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/gas_ico.dds differ diff --git a/TS SE Tool/img/UI/Trucks&Trailers/service_ico.dds b/TS SE Tool/img/UI/Trucks&Trailers/service_ico.dds new file mode 100644 index 00000000..a15490eb Binary files /dev/null and b/TS SE Tool/img/UI/Trucks&Trailers/service_ico.dds differ diff --git a/TS SE Tool/img/UI/YouTube.png b/TS SE Tool/img/UI/YouTube.png new file mode 100644 index 00000000..046c95a6 Binary files /dev/null and b/TS SE Tool/img/UI/YouTube.png differ diff --git a/TS SE Tool/img/UI/add.dds b/TS SE Tool/img/UI/add.dds new file mode 100644 index 00000000..9fb1acdc Binary files /dev/null and b/TS SE Tool/img/UI/add.dds differ diff --git a/TS SE Tool/img/UI/cogwheel.png b/TS SE Tool/img/UI/cogwheel.png new file mode 100644 index 00000000..7383d439 Binary files /dev/null and b/TS SE Tool/img/UI/cogwheel.png differ diff --git a/TS SE Tool/img/UI/customize_p.dds b/TS SE Tool/img/UI/customize_p.dds new file mode 100644 index 00000000..89e4c221 Binary files /dev/null and b/TS SE Tool/img/UI/customize_p.dds differ diff --git a/TS SE Tool/img/UI/download.png b/TS SE Tool/img/UI/download.png new file mode 100644 index 00000000..84d504f9 Binary files /dev/null and b/TS SE Tool/img/UI/download.png differ diff --git a/TS SE Tool/img/UI/edit.png b/TS SE Tool/img/UI/edit.png new file mode 100644 index 00000000..58ecab07 Binary files /dev/null and b/TS SE Tool/img/UI/edit.png differ diff --git a/TS SE Tool/img/UI/extract.png b/TS SE Tool/img/UI/extract.png new file mode 100644 index 00000000..0c09cb6b Binary files /dev/null and b/TS SE Tool/img/UI/extract.png differ diff --git a/TS SE Tool/img/UI/favorite_selected.dds b/TS SE Tool/img/UI/favorite_selected.dds new file mode 100644 index 00000000..fb4492e9 Binary files /dev/null and b/TS SE Tool/img/UI/favorite_selected.dds differ diff --git a/TS SE Tool/img/UI/github.png b/TS SE Tool/img/UI/github.png new file mode 100644 index 00000000..78fbde40 Binary files /dev/null and b/TS SE Tool/img/UI/github.png differ diff --git a/TS SE Tool/img/UI/globe.png b/TS SE Tool/img/UI/globe.png new file mode 100644 index 00000000..3ff26584 Binary files /dev/null and b/TS SE Tool/img/UI/globe.png differ diff --git a/TS SE Tool/img/UI/info.png b/TS SE Tool/img/UI/info.png new file mode 100644 index 00000000..f69fc1a4 Binary files /dev/null and b/TS SE Tool/img/UI/info.png differ diff --git a/TS SE Tool/img/UI/networkCloud.png b/TS SE Tool/img/UI/networkCloud.png new file mode 100644 index 00000000..a27df5c9 Binary files /dev/null and b/TS SE Tool/img/UI/networkCloud.png differ diff --git a/TS SE Tool/img/UI/none.dds b/TS SE Tool/img/UI/none.dds new file mode 100644 index 00000000..83c4fe2e Binary files /dev/null and b/TS SE Tool/img/UI/none.dds differ diff --git a/TS SE Tool/img/UI/notice_star.dds b/TS SE Tool/img/UI/notice_star.dds new file mode 100644 index 00000000..1664d648 Binary files /dev/null and b/TS SE Tool/img/UI/notice_star.dds differ diff --git a/TS SE Tool/img/UI/pSettings.png b/TS SE Tool/img/UI/pSettings.png new file mode 100644 index 00000000..2fddd3a1 Binary files /dev/null and b/TS SE Tool/img/UI/pSettings.png differ diff --git a/TS SE Tool/img/UI/question.png b/TS SE Tool/img/UI/question.png new file mode 100644 index 00000000..2162245e Binary files /dev/null and b/TS SE Tool/img/UI/question.png differ diff --git a/TS SE Tool/img/UI/quit.png b/TS SE Tool/img/UI/quit.png new file mode 100644 index 00000000..16b2494b Binary files /dev/null and b/TS SE Tool/img/UI/quit.png differ diff --git a/TS SE Tool/img/UI/reload.png b/TS SE Tool/img/UI/reload.png new file mode 100644 index 00000000..6924ad22 Binary files /dev/null and b/TS SE Tool/img/UI/reload.png differ diff --git a/TS SE Tool/img/UI/remove.dds b/TS SE Tool/img/UI/remove.dds new file mode 100644 index 00000000..602492f1 Binary files /dev/null and b/TS SE Tool/img/UI/remove.dds differ diff --git a/TS SE Tool/img/UI/skull-pattern.png b/TS SE Tool/img/UI/skull-pattern.png new file mode 100644 index 00000000..6cc577fa Binary files /dev/null and b/TS SE Tool/img/UI/skull-pattern.png differ diff --git a/TS SE Tool/img/UI/swap-pattern.png b/TS SE Tool/img/UI/swap-pattern.png new file mode 100644 index 00000000..23870142 Binary files /dev/null and b/TS SE Tool/img/UI/swap-pattern.png differ diff --git a/TS SE Tool/img/UI/ucDragDrop.png b/TS SE Tool/img/UI/ucDragDrop.png new file mode 100644 index 00000000..c9cc5813 Binary files /dev/null and b/TS SE Tool/img/UI/ucDragDrop.png differ diff --git a/TS SE Tool/img/UI/unknown.dds b/TS SE Tool/img/UI/unknown.dds new file mode 100644 index 00000000..482a31fd Binary files /dev/null and b/TS SE Tool/img/UI/unknown.dds differ diff --git a/TS SE Tool/img/UI/wrench-pattern.png b/TS SE Tool/img/UI/wrench-pattern.png new file mode 100644 index 00000000..1ab463f9 Binary files /dev/null and b/TS SE Tool/img/UI/wrench-pattern.png differ diff --git a/TS SE Tool/lang/CityToCountry.csv b/TS SE Tool/lang/CityToCountry.csv new file mode 100644 index 00000000..49e6467a --- /dev/null +++ b/TS SE Tool/lang/CityToCountry.csv @@ -0,0 +1,1599 @@ +a_coruna;spain +aalborg;denmark +aarhus;denmark +aberdeen;uk +aberdeen_wa;washington +aberystwyth;uk +afula;israel +ajaccio;france +akko;israel +akranes;iceland +akureyri;iceland +alajarvi;finland +alakurtti;russia +alamogordo;new_mexico +albacete;spain +alban;france +albuquerque;new_mexico +alexandroup;greece +algeciras;spain +almaraz;spain +almeria;spain +amman;jordan +amsterdam;netherlands +ancona;italy +andorra;andorra +angers;france +antwerp;belgium +aqaba;jordan +arad;romania +are;sweden +arhus;denmark +arnhem;netherlands +artesia;new_mexico +arxangelsk;russia +ashdod;israel +ashkelon;israel +astoria;oregon +augustow;poland +aurach;germany +babruysk;belarus +bacau;romania +badajoz;spain +bado;germany +baiamare;romania +bailen;spain +bakersfield;california +balti;moldova +balvi;latvia +banjaluka;bosnia +baranovichi;belarus +barcelona;spain +bari;italy +barstow;california +basel;switzerland +bastia;france +bayonne;france +bbiala;poland +beersheva;israel +beirut;lebanon +beja;portugal +belda;poland +belfast;uk +bellingham;washington +bend;oregon +beograd;serbia +bergen;norway +berlin;germany +bern;switzerland +betshean;israel +bialystok;poland +biatorbagy;hungary +bicske;hungary +bilbao;spain +birmingham;uk +birsay;uk +bitola;macedonia +blagoevgrad;bulgaria +blonduos;iceland +bobolice;poland +bodajk;hungary +bologna;italy +bolungarvik;iceland +bonifacio;france +bonn;germany +bordeaux;france +borgarnes;iceland +borisoglebsk;russia +bourges;france +brasov;romania +bratislava;slovakia +brect;belarus +bremen;germany +bremerhaven;germany +brest;france +brno;czech +broadford;uk +brussel;belgium +bryansk;russia +bucuresti;romania +budapest;hungary +burg;germany +burgas;bulgaria +burgos;spain +burns;oregon +busko;poland +byblos;lebanon +bydgoszcz;poland +bystrica;slovakia +caen;france +cagliari;italy +cairnryan;uk +calais;france +calarasi;romania +calvi;france +cambridge;uk +camp_verde;arizona +canfranc;spain +canterbury;uk +cardiff;uk +carlisle;uk +carlsbad;california +carlsbad_nm;new_mexico +carson_city;nevada +cassino;italy +catania;italy +catanzaro;italy +cedar_city;utah +cegled;hungary +cernavoda;romania +chelmsford;uk +chernyakh;russia +chisinau;moldova +cieszyn;poland +ciudad_real;spain +civaux;france +clermont;france +clifton;arizona +clovis;new_mexico +cluj;romania +cluj_napoca;romania +coimbra;portugal +colville;washington +constanta;romania +coos_bay;oregon +cordoba;spain +corticadas;portugal +craiova;romania +croydon;uk +czluchow;poland +damascus;syria +damietta;egypt +daugavpils;latvia +debrecen;hungary +deraa;syria +dijon;france +dimona;israel +doboj;bosnia +dombas;norway +donostia;spain +dortmund;germany +douglas;iom +dover;uk +drammen;norway +dresden;germany +dublin;ireland +duisburg;germany +dumfries;uk +dusseldorf;germany +dziwnowek;poland +edinburgh;uk +edirne;turkey +ehrenberg;arizona +eilat;israel +eindhoven;netherlands +eingedi;israel +el_centro;california +el_ejido;spain +elarish;egypt +elblag;poland +elk;poland +elko;nevada +ely;nevada +engels;russia +erfurt;germany +esbjerg;denmark +eugene;oregon +eureka;california +europabr;austria +everett;washington +evie;uk +evora;portugal +farmington;new_mexico +faro;portugal +felixstowe;uk +firenze;italy +fishguard;uk +fjardabyggd;iceland +flagstaff;arizona +flensburg;germany +folkestone;uk +forst;germany +frankfurt;germany +fraserburgh;uk +frederikshv;denmark +fresno;california +ftwilliam;uk +furth;germany +g_canyon_vlg;arizona +galati;romania +gallup;new_mexico +galway;ireland +gardermoen;norway +gavle;sweden +gdansk;poland +gdynia;poland +gedser;denmark +geilo;norway +geisel;germany +geneve;switzerland +genova;italy +gijon;spain +gizycko;poland +glasgow;uk +golfech;france +gomel;belarus +gorzow;poland +goteborg;sweden +granada;spain +grand_coulee;washington +graz;austria +grimsby;uk +groedig;austria +groningen;netherlands +grudziadz;poland +grumantbyen;svalbard +guarda;portugal +gulbene;latvia +gusev;russia +gyor;hungary +haapsalu;finland +hadera;israel +haifa;israel +hainburg;austria +halle;germany +hamar;norway +hamburg;germany +hameenlinna;finland +hammerfest;norway +hannover;germany +haparanda;sweden +haql;saudia +havre;france +hawes;uk +heilbronn;germany +helsingborg;sweden +helsinki;finland +herning;denmark +herzliya;israel +hiorthhamn;norway +hirtshals;denmark +hobbs;new_mexico +hofn;iceland +holbrook;arizona +holmavik;iceland +holstebro;denmark +holyhead;uk +honefoss;norway +honningsvag;norway +hornbrook;california +huelva;spain +huesca;spain +hull;uk +hunedoara;romania +huron;california +iasi;romania +ilawa;poland +ilowa;poland +ilza;poland +innsbruck;austria +inverness;uk +ioannina;greece +irbid;jordan +irun;spain +isafjordur;iceland +istanbul;turkey +ivalo;finland +izra;syria +jaca;spain +jackpot;nevada +janow;poland +jaworznia;poland +jekabpils;latvia +jericho;westbank +jerusalem;israel +jihlava;czech +joensuu;finland +jonkoping;sweden +jonquera;spain +jyvaskyla;finland +kaliningrad;russia +kalix;sweden +kalmar;sweden +kaluga;russia +kandalaksha;russia +kapellskar;sweden +kardla;estonia +karlovo;bulgaria +karlskrona;sweden +karlstad;sweden +karsamaki;finland +kassel;germany +katowice;poland +kaunas;lithuania +kavala;greece +kayenta;arizona +keflavik;iceland +kemi;finland +kemijarvi;finland +kennewick;washington +kholm;russia +kiel;germany +kielce;poland +kingman;arizona +kirkenes;norway +kirkwall;uk +kirov;russia +kittila;finland +klagenfurt;austria +klaipeda;lithuania +klaksvik;faroe +klamath_f;oregon +klin;russia +kobenhavn;denmark +koblenz;germany +kokkola;finland +kolding;denmark +kolka;latvia +koln;germany +kolomna;russia +kosice;slovakia +koszalin;poland +kotala;finland +kotka;finland +kotlas;russia +kouvola;finland +kovrov;russia +kozloduy;bulgaria +krafla;iceland +kragujevac;serbia +krakow;poland +krasnbog;russia +krasnoslob;russia +kristiansand;norway +kristianstad;sweden +kristiinank;finland +krosno;poland +kshmona;israel +kunda;estonia +kuopio;finland +kuressaare;estonia +kursk;russia +labatlan;hungary +lacq;france +lahti;finland +lakeview;oregon +larnaka;cyprus +larne;uk +larochelle;france +las_cruces;new_mexico +las_vegas;nevada +laurent;france +leba;poland +lebork;poland +lefkosia;cyprus +legnica;poland +lehavre;france +leipzig;germany +lellinge;denmark +lemans;france +lemesos;cyprus +leon;spain +leskovac;serbia +liege;belgium +liepaja;latvia +lile_rousse;france +lille;france +lillehammer;norway +limerick;ireland +limoges;france +linkoping;sweden +linz;austria +lisboa;portugal +lisburn;uk +liverpool;uk +livorno;italy +ljubljana;slovenia +ljugarn;sweden +lleida;spain +lodz;poland +logan;utah +lomza;poland +london;uk +londonderry;uk +longview;washington +longyearbyem;svalbard +longyearbyen;norway +lorient;france +los_angeles;california +louhi;finland +lovasbereny;hungary +loviisa;finland +lubim;bulgaria +lublin;poland +luga;russia +luki;russia +luxembourg;luxembourg +lyon;france +madaba;jordan +madrid;spain +mafraq;jordan +magdeburg;germany +mainz;germany +malaga;spain +malmo;sweden +manchester;uk +mangalia;romania +mannheim;germany +manresa;spain +mans;france +maribor;slovenia +mariehamn;aland +marseille;france +mazeikiai;lithuania +medford;oregon +mengibar;spain +messina;italy +metz;france +miedzyzdroje;poland +mikkeli;finland +mikolajki;poland +milano;italy +minsk;belarus +mirni;russia +mitzpe;israel +mlada;czech +moab;utah +modena;italy +moerdijk;netherlands +mogilev;belarus +monor;hungary +montana;bulgaria +montpellier;france +moroz;russia +moscow;russia +moskushamn;russia +mozir;belarus +mragowo;poland +mstislavl;belarus +mukacheve;ukraine +munchen;germany +muravlenko;russia +murcia;spain +murmansk;russia +naantali;finland +nabatieh;lebanon +nahodka;russia +nantes;france +napapiiri;finland +napoli;italy +narbonne;france +narva;estonia +navia;spain +nazareth;israel +netanya;israel +nevel;russia +newcastle;uk +newport;oregon +nice;france +nikel;russia +nis;serbia +nogales;arizona +novgorod;russia +novisad;serbia +novomesto;russia +novomoskovsk;russia +nowaj_ladoga;russia +nowajgorod;russia +nowogard;poland +nurnberg;germany +nynashamn;sweden +nyujfalu;romania +o_barco;spain +oakdale;california +oakland;california +oban;uk +oberhausen;germany +obninsk;russia +obsteig;austria +ocsa;hungary +odda;norway +odense;denmark +ogden;utah +ogre;estonia +ohrid;macedonia +olbia;italy +olhao;portugal +olkiluoto;finland +olomouc;czech +olsztyn;poland +olszyna;poland +olympia;washington +omak;washington +ontario;oregon +opatow;poland +opole;poland +oppdal;norway +oradea;romania +orebro;sweden +orel;russia +orkanger;norway +orkeny;hungary +orleans;france +ornskoldsvik;sweden +orsha;belarus +osijek;croatia +oslo;norway +osnabruck;germany +ostashkov;russia +ostersund;sweden +ostrava;czech +ostroda;poland +ostroleka;poland +ostrowm;poland +otta;norway +oulu;finland +oxnard;california +padborg;denmark +pafos;cyprus +page;arizona +paldiski;estonia +palermo;italy +paluel;france +pamplona;spain +pancevo;serbia +panevezys;lithuania +paris;france +parma;italy +parnu;estonia +pau;france +pecs;hungary +pendleton;oregon +pernik;bulgaria +perpignan;france +perth;uk +pescara;italy +pestovo;russia +peterburg;russia +petersburg;russia +phoenix;arizona +piatra;romania +pila;poland +pilis;hungary +pinsk;belarus +pioche;nevada +pirdop;bulgaria +pitesti;romania +pleseck;russia +pleven;bulgaria +ploce;croatia +plock;poland +plovdiv;bulgaria +plymouth;uk +poitiers;france +polgardi;hungary +ponte_de_sor;portugal +pori;finland +porkhov;russia +port_angeles;washington +port_sagunt;spain +porthmadog;uk +portland;oregon +porto;portugal +porto_vecchi;france +portree;uk +portsaid;egypt +portsmouth;uk +porvoo;finland +poznan;poland +prague;czech +price;utah +prilep;macedonia +primm;nevada +provo;utah +przemysl;poland +pskov;russia +ptolemaida;greece +puertollano;spain +radom;poland +rakvere;estonia +ramallah;westbank +ramsey;iom +raton;new_mexico +reda;poland +redding;california +reims;france +renne;france +rennes;france +reno;nevada +resita;romania +reutte;austria +reydar;iceland +reykjavik;iceland +rezekne;latvia +rgev;russia +riga;latvia +rijeka;croatia +rishon;israel +roadworks_a7;germany +roadworks_a9;poland +roma;italy +ronne;denmark +roscoff;france +roslavl;russia +rostock;germany +roswell;new_mexico +rotterdam;netherlands +rouen;france +rovaniemi;finland +rumia;poland +ruse;bulgaria +rusinowo;poland +rutba;iraq +ruwaished;jordan +rzeszow;poland +saare;estonia +sacramento;california +safawi;jordan +salamanca;spain +saldus;latvia +salehard;russia +salem;oregon +salina;utah +salt_lake;utah +salzburg;austria +san_diego;california +san_francisc;california +san_rafael;california +san_simon;arizona +sangerhausen;germany +sangiovanni;italy +sanok;poland +santa_cruz;california +santa_fe;new_mexico +santa_maria;california +santander;spain +saratov;russia +sarbogard;hungary +sassari;italy +satumare;romania +sayda;lebanon +seattle;washington +selfoss;iceland +senj;croatia +serres;greece +setubal;portugal +sevilla;spain +seydis;iceland +sheffield;uk +shlisselburg;russia +show_low;arizona +siauliai;lithuania +sibenik2;croatia +sibenik;croatia +sibiu;romania +siedlce;poland +sierra_vista;arizona +sines;portugal +skelleftea;sweden +skopje;macedonia +slbrod;croatia +sligo;ireland +sluck;belarus +smolensk;russia +socorro;new_mexico +sodankyla;finland +soderhamn;sweden +sodertalje;sweden +sofia;bulgaria +solt;hungary +sopot;poland +soria;spain +sosnovy_bor;russia +southampton;uk +split;croatia +spokane;washington +st_george;utah +stargard;poland +stavanger;norway +sthelier;jersey +stip;macedonia +stockholm;sweden +stockton;california +stornoway;uk +stranraer;uk +strasbourg;france +strzelcekraj;poland +stuttgart;germany +subotica;serbia +sundsvall;sweden +surgut;russia +suwalki;poland +suzzara;italy +svalsateast;svalbard +svalsatwest;svalbard +swansea;uk +swinoujscie;poland +szczecin;poland +szczecinek;poland +szeged;hungary +taba;egypt +tacoma;washington +tallinn;estonia +tambov;russia +tampere;finland +tanabru;norway +taranto;italy +targu_mures;romania +tarragona;spain +tartu;estonia +tata;hungary +taurage;lithuania +tekirdag;turkey +telaviv;israel +terendk18;poland +terni;italy +teruel;spain +the_dalles;oregon +thessaloniki;greece +thurso;uk +tiberias;israel +timisoara;romania +tobolsk;russia +tonopah;nevada +torino;italy +tornio;finland +torokbalint;hungary +torshavn;faroe +tosno;russia +toulouse;france +tours;france +travemunde;germany +trelleborg;sweden +trieste;italy +trinity;jersey +tripolilb;lebanon +trnava;slovakia +trondheim;norway +truckee;california +truckstope45;denmark +tucson;arizona +tucumcari;new_mexico +tukums;latvia +tula;russia +turku;finland +tver;russia +tyr;lebanon +udine;italy +uelzen;germany +ugorsk;ukraine +ukiah;california +ukmerge;lithuania +ullapool;uk +ullo;hungary +ulm;germany +umea;sweden +uppsala;sweden +utena;lithuania +utsjoki;finland +uzhhorod;ukraine +vaasa;finland +vaduz;liecht +valday;russia +valencia;spain +valga;estonia +valka;latvia +valladolid;spain +valmiera;latvia +vancouver;washington +vandellos;spain +vantaa;finland +varkaus;finland +varna;bulgaria +vasaros;hungary +vasteraas;sweden +vaxjo;sweden +velence;hungary +veli_tarnovo;bulgaria +velig;russia +venezia;italy +ventspils;latvia +verkhnetulom;russia +vernal;utah +verona;italy +vestmann;iceland +viborg;denmark +vicenza;italy +vidin;bulgaria +vigo;spain +viitasaari;finland +vik;iceland +villarreal;spain +vilnius;lithuania +vinaros;spain +virovitica;croatia +visby;sweden +visegrad;hungary +vitebsk;belarus +volgograd;russia +volochyok;russia +vologda;russia +volokolamsk;russia +volzhskiy;russia +voronezh;russia +vranje;serbia +vuktil;russia +vyazma;russia +vyborg;russia +walcz;poland +warszawa;poland +wejherowo;poland +wenatchee;washington +wexford;ireland +wick;uk +wien;austria +wiesbaden;germany +winnemucca;nevada +wroclaw;poland +yakima;washington +ystad;sweden +yukhnov;russia +yuma;arizona +zadar;croatia +zagreb;croatia +zahle;lebanon +zamosc;poland +zaragoza;spain +zarka;jordan +zelenogradsk;russia +zgierz;poland +zgorzelec;poland +zrenjanin;serbia +zurich;switzerland +zuta2;croatia +zuta;croatia +zwolle;netherlands +hilt; +werlte; +banja_luka; +bijelo_polje; +sarajevo; +podgorica; +vlore; +tirana; +novi_sad; +pristina; +zenica; +mostar; +koper; +durres; +fier; +bihac; +tuzla; +novo_mesto; +niksic; +karakaj; +bodo; +stpeterport; +heysham; +maan; +latakia; +hit; +baalbek; +alkarak; +tartous; +alnukhib; +baiji; +haditha; +sanamayn; +alqaim; +bethlehem; +jerash; +jasliq; +karakalp; +grong; +dubrovnik; +kulsari; +nuuk; +kyrkkyz; +kecskemet; +kilkenny; +waterford; +kutaisi; +poti; +uralsk; +temirbek; +rudnyy; +kostanay; +aktau; +inderborsky; +zhympity; +atyrau; +kobda; +shetpe; +zatobolsk; +ershov; +aktobe; +tobol; +lisakovsk; +shubarkuduk; +karabutak; +makat; +zhanaozen; +khromtau; +alga; +mukur; +karabalyk; +dossor; +kandyagash; +akshat; +beyneu; +turysh; +mangystau; +saiotes; +temir; +vevelstad; +evzonoi; +geta; +anklam; +andalsnes; +ylivieska; +chelm; +sudureyri; +lochboisdale; +shumen; +vadso; +dobrich; +piotrkowt; +kaustinen; +exeter; +berlevag; +trofors; +storslett; +vardo; +antrim; +zvolen; +verdalsora; +balivanich; +valenciennes; +norwich; +olafsvik; +molde; +granville; +kautokeino; +soltau; +namsskogan; +contreras; +muonio; +savonlinna; +szombathely; +mulhouse; +bardufoss; +valletta; +thorlakshofn; +chemnitz; +coquelles; +moirana; +bischofsh; +newry; +komotini; +tromso; +saalfelden; +fauske; +stykkisholm; +ballymena; +siracusa; +setermoen; +bar; +seinajoki; +michalovce; +dax; +gostynin; +bidjovagge; +kristiansund; +port_vendres; +alta; +pello; +mosjoen; +ballangen; +mehamn; +batsfjord; +leoben; +garpsdalur; +lulea; +kjollefjord; +sumeg; +krasnystaw; +macon; +varmahlid; +narvik; +lebesby; +foix; +finnsnes; +karasjok; +nordurfjord; +llivia; +wadowice; +stockerau; +godby; +lakselv; +vhavn; +karesuando; +amstetten; +mohamqol; +nampo; +pyongyang; +kaechon; +ashgabat; +garabogaz; +turkmenbashi; +turkmenabat; +marytm; +balkanabat; +kaesong; +serdartm; +paju; +goyang; +koneurgenc; +darvaza; +abdolhaqq; +chongju; +dandong; +sinuiju; +qalenaslam; +rushon; +tojikobod; +darautkgn; +ulugqat; +wuqia; +seoul; +kuchlak; +incheon; +delaram; +herat; +portsudan; +dasoguz; +koytendag; +hairatan; +dushanbe; +termez; +denov; +tejen; +kgosh; +baherden; +meymaneh; +murghab; +karakul; +gorgan; +kandahar; +dzhiland; +musbagh; +komsomolabad; +saghirdasht; +esenguly; +kgjalalbd; +chaman; +serhetabat; +andkhoy; +sarytash; +bukhara; +ndjamena; +koson; +bishkek; +qarshi; +baysun; +korday; +derbent; +dalian; +kgmanas; +qorakol; +olot; +quetta; +sherabad; +guzar; +adre; +kogon; +abeche; +suakin; +kassala; +sinkat; +oumhadjer; +djermaya; +atiabroki; +qadarif; +ngoura; +massaguet; +wadimadani; +sennar; +rabak; +kosti; +songkhla; +kousseri; +doubagos; +fotokol; +tendali; +gambaru; +geneina; +burush; +wadibanda; +fashir; +tripoli; +alqatrun; +sabha; +zouar; +faya; +massakory; +nahud; +alubayyid; +qaryat; +eltor; +ssheikh; +dahab; +stcath; +verhneuralsk; +ishim2; +sterlitamak; +salavat; +kazan; +akyar; +beloretsk; +almetevsk; +gay; +ekat; +berezovsky; +bogdanovich; +miass; +orsk; +almetevsk2; +chelyabinsk; +bugulma; +novotroitsk; +magnitogorsk; +shaksha; +arsk; +chastoozerie; +bavly; +kargapolie; +kurgan; +ufa; +sibai; +ishim; +sysert; +petuhovo; +laishevo; +tumen; +ustkatav; +shumikha; +isyang; +zlatoust; +asbest; +golishmanovo; +kamenskur; +uzhnouralsk; +chervishevo; +berduzhie; +shadrinsk; +troitsk; +planoviy; +isetskoe; +argayash; +tulgan; +sim; +asha; +oktyabrskiy; +uruzan; +urgaza; +barkhatovo; +miasskoe; +formachevo; +beloyarskiy; +chistopol; +pyshma; +makushino; +mishkino; +barra_afro; +banjul; +serrekunda; +gunjur; +madina_ba; +brikama; +bignona; +bwiam; +gaza; +karang; +passi; +fatick; +vladyvostok; +tyukalinsk; +omsk; +barabinsk; +novosibirsk; +bolotnoye; +kyemerovo; +mariinsk; +ussuriysk; +spask_dalnii; +achinsk; +krasnoyarsk; +dalniechersk; +kansk; +tayshet; +khabarovsk; +nizhneudinsk; +irkutsk; +baikalsk; +ulanude; +pzabai; +khilok; +ulyoty; +chita; +chernyshevsk; +mogocha; +skovorodino; +shimanovsk; +byelgorsk; +novobruetsky; +birobizhan; +mudanjiang; +tonghua; +tynda; +chulman; +aldan; +kalachinsk; +tommot; +domat; +susten; +crotone; +lecce; +aurillac; +lempdes; +rodez; +stvictor; +nimes; +quissac; +aerotb; +peylecha; +manosque; +seilhac; +compostela; +laval; +brindisi; +galatone; +bourg; +villars; +estremoz; +albergaria; +tragliatella; +portotorres; +ferrara; +montalto; +cardedu; +aprilia; +pontedera; +piacenza; +siena; +pesaro; +trestina; +ferrandina; +sumene; +jurmala; +talsi; +ceuta; +melilla; +menorca; +cala_en_b; +palma; +nanortalik; +hmbg_w; +husavik; +grutness; +stasjon_e; +sandvik; +kulusuk; +gutcher; +sumba; +toft; +iqaluit; +tasiusaq; +qaqortoq; +saint_pier; +gloup; +trongisva; +tasiilaq; +hvalba; +lopra; +itorqomt; +skopun; +ulsta; +lerwick; +porkeri; +brae; +sandness; +sandur; +frodsba; +mid_yell; +vagur; +kuummiit; +paamiut; +medved; +kingisepp; +oboyan; +kolpino; +alehovshina; +murmansk_rm; +zelenoborsky; +volhov_rm; +sortavala; +penza; +grodno; +moncheg_rm; +vinnicy; +alakurtti_rm; +belcity; +kirishi; +tihvin; +priozersk; +glubokoe; +kandalrm; +slonim; +polotsk; +boksitogorsk; +kem; +segezha_rm; +petrozavodsk; +razmetelevo; +apatity_rm; +kola_rm; +stroitel; +pole; +pikalevo; +volkovysk; +lida; +suoyarvi; +kirovsk_rm1; +xacmaza; +derbentr; +makhachkalar; +v10; +vorkuta; +onega; +inta; +labit; +novomosk_rp; +dps28; +dps16; +talnakh; +norilsk; +dudinka; +bjhemse; +bjfaaro; +bjborgholm; +faerjestaden; +bjbyxelkrok; +bjvisby; +bjljugarn; +bjhoburg; +bjslite; +bjottenby; +bjgaardby; +moerbylaanga; +bjpalmelund; +bjfaarosund; +bjklintehamn; +bjloettorp; +potapovo; +levinskie; +kirov_rp; +dps8; +vansbro; +borlange; +sandviken; +asele; +dorotea; +vannas; +stromsund; +falun; +rubtsovsk; +gornoaltaysk; +biysk; +zarinsk; +novoaltaysk; +bochkaria; +mamontovo; +talmenka; +aleisk; +barnaul; +linevo; +bucanskoe; +cherepanovo; +berdsk; +belokurikha; +smolenskoye; +kytmanovo; +hanti; +cherepovec; +gubkinskii; +v1; +dps21; +kargopol; +uholovo; +kineshma; +v13; +witegra; +velik; +uxta; +surgut_rp; +dps2; +urengoi; +nadim; +ijma; +v12; +v2; +arzamas16; +spec; +harjg; +okunev; +v15; +dps11; +narj_mar; +v14; +soviet; +severodvinsk; +dps3; +ukolok; +ozerni; +osta; +stepanovo; +ust_usa; +dps7; +dps23; +siktivkar; +ustcil; +dps17; +v6; +dps9; +dps25; +dps12; +holmogorj; +horei; +dps26; +v9; +v8; +dps10; +dps19; +dps6; +dps4; +dps18; +dps20; +dps5; +v7; +dps24; +baku; +antakya; +osmaniye; +adana; +sevas; +sakarya; +novak; +taman; +trabzon; +buzau; +simfer; +cernihiv; +baiam; +odessa; +lugan; +focsani; +kropy; +dnipro; +samsun; +novogradd; +eskisehir; +vinny; +bodrum; +zappo; +bandirma; +kastamonu; +hopa; +silifke; +fethiye; +konya; +rivnne; +kreme; +balikesir; +chisina; +mersin; +zongu; +aksaray; +usak; +kutahya; +donesk; +kerson; +kas; +balt; +kryvy; +mariupo; +kiev; +ivan; +pervom; +cherk; +vozne; +karabuk; +bolu; +poltava; +ancara; +alanya; +uman; +izmir; +tiraspol; +manisa; +canakkale; +cernaut; +kramatorsk; +giurgi; +luttsk; +ialta; +berdy; +koycegiz; +khmeln; +aydin; +terno; +zitomir; +feodosia; +ribnita; +melitopol; +mugla; +afyon; +sinopp; +tgjiu; +bechet; +valcea; +bursa; +denizli; +shepe; +ploiest; +ordu; +mykol; +bartin; +isparta; +jankoi; +antalya; +sighet; +antracit; +lubni; +bilaterca; +kerci; +batum; +konotop; +ferizli; +corum; +kayseri; +suceava; +yozgat; +bayburt; +silistr; +sivas; +artvin; +bashtanka; +kirikkale; +tokat; +sockhumi; +botos; +erzurum; +tbilisi; +zugdidi; +yevlax; +gence; +kharkiv; +sarni; +mukac; +cernobil; +lyviv; +uzgor; +kovell; +stry; +krupets; +korostenn; +naroulia; +troyeb; +sumy; diff --git a/TS SE Tool/lang/CountryProperties.csv b/TS SE Tool/lang/CountryProperties.csv new file mode 100644 index 00000000..bbedcf7c --- /dev/null +++ b/TS SE Tool/lang/CountryProperties.csv @@ -0,0 +1,69 @@ +#ETS2 +austria;A;1.31 +belgium;B;1.56 +bulgaria;BG;1.11 +czech;CZ;1.279 +denmark;DK;1.54 +estonia;EST;1.38 +finland;FI;1.47 +france;F;1.54 +germany;D;1.31 +hungary;HU;1.31 +italy;I;1.53 +latvia;LV;1.23 +lithuania;LT;1.1 +luxembourg;L;1.18 +netherlands;NL;1.4 +norway;N;1.71 +poland;PL;1.18 +romania;RO;1.22 +russia;RU;0.57 +slovakia;SK;1.29 +sweden;S;1.61 +switzerland;CH;1.53 +turkey;TR;1.02 +uk;GB;1.55 +#ATS +arizona;AZ;0.79753543 +california;CA;1.0669909 +nevada;NV;0.86093672 +new_mexico;NM;0.7684765 +oregon;OR;0.85036984 +utah;UT;0.78432682 +washington;WA;0.8847122 +#ProMods +aland;AX;1.227 +albania;AL;1.45 +andorra;AND;1.04 +belarus;BY;0.72 +bosnia;BIH;1.18 +croatia;HR;1.29 +cyprus;CY;1.21 +faroe;FO;0.93 +georgia;GE;0.82 +greece;GR;1.38 +iceland;IS;1.59 +ireland;IRL;1.35 +iom;GBM;1.29 +jersey;GBJ;1.29 +liecht;FL;1.30 +macedonia;MK;0.98 +mnegro;MNE;1.21 +moldova;MD;0.82 +monaco;MC;1.32 +nireland;GB;1.29 +portugal;P;1.4 +serbia;SRB;1.37 +slovenia;SLO;1.27 +spain;E;1.19 +svalbard;N;1.69 +ukraine;UA;1 +#ProModsME +egypt;ET;0.27 +iraq;IRQ;0.70 +israel;IL;1.32 +jordan;HKJ;0.70 +lebanon;RL;0.48 +saudia;KSA;0.11 +syria;SYR;0.47 +westbank;PS;1.32 \ No newline at end of file diff --git a/TS SE Tool/lang/Default/ATS/CurrencyProperties.csv b/TS SE Tool/lang/Default/ATS/CurrencyProperties.csv new file mode 100644 index 00000000..42d2b192 --- /dev/null +++ b/TS SE Tool/lang/Default/ATS/CurrencyProperties.csv @@ -0,0 +1,5 @@ +#ATS +USD;1;;$; +EUR;0.856;;€; +CAD;1.3;;$"; +MXN;18.69;;$; \ No newline at end of file diff --git a/TS SE Tool/lang/Default/ATS/driver_names.csv b/TS SE Tool/lang/Default/ATS/driver_names.csv new file mode 100644 index 00000000..ea2f1871 --- /dev/null +++ b/TS SE Tool/lang/Default/ATS/driver_names.csv @@ -0,0 +1,341 @@ +driver.0;Bronislaw E. +driver.1;Ian P. +driver.2;Cameron S. +driver.3;Richard O. +driver.4;Manuel J. +driver.5;Henry K. +driver.6;Brandon L. +driver.7;Ludovic S. +driver.8;John M. +driver.9;Bob S. +driver.10;+Sophie I. +driver.11;+Katie W. +driver.12;+Georgia A. +driver.13;+Sabrina C. +driver.14;+Melanie Q. +driver.15;+Emily Z. +driver.16;+Scarlett J. +driver.17;Michal V. +driver.18;+Tina T. +driver.19;+Marianne G. +driver.20;+Reece S. +driver.21;+Brigit J. +driver.22;Andreas A. +driver.23;+Lucy L. +driver.24;+Ruth T. +driver.25;Jacek V. +driver.26;Jay Z. +driver.27;Brian F. +driver.28;Boris B. +driver.29;Milton P. +driver.30;Ben S. +driver.31;Maximilian T. +driver.32;Sebastian M. +driver.33;Tobias G. +driver.34;Ethan C. +driver.35;Matthew P. +driver.36;William J. +driver.37;Joshua T. +driver.38;Jordan A. +driver.39;Ray B. +driver.40;Dominic Q. +driver.41;Mateusz U. +driver.42;Jan Ch. +driver.43;Robert L. +driver.44;Leon R. +driver.45;Toby T. +driver.46;Umberto E. +driver.47;Ronald R. +driver.48;Angelo M. +driver.49;Kenneth F. +driver.50;Ralf W. +driver.51;Jeff B. +driver.52;Baldur G. +driver.53;Gregory P. +driver.54;Pascal B. +driver.55;Chris A. +driver.56;Lucas G. +driver.57;Tim D. +driver.58;Phillip M. +driver.59;George W. +driver.60;Arnold S. +driver.61;Daniel D. +driver.62;Marcel A. +driver.63;Bastiaan K. +driver.64;Joseph S. +driver.65;Sam B. +driver.66;Ulf G. +driver.67;Valentino R. +driver.68;Patrick S. +driver.69;Julian C. +driver.70;Ellis W. +driver.71;Josh T. +driver.72;Will Y. +driver.73;Christian I. +driver.74;Harry P. +driver.75;Pierre B. +driver.76;Garry O. +driver.77;Felix S. +driver.78;Luca B. +driver.79;Etienne J. +driver.80;Alexander M. +driver.81;Lewis J. +driver.82;Steve W. +driver.83;Eduard S. +driver.84;Enzo F. +driver.85;Ryan R. +driver.86;Yusuf B. +driver.87;Jean R. +driver.88;Jan K. +driver.89;Jiri W. +driver.90;Pavel S. +driver.91;Jaroslaw W. +driver.92;Martin C. +driver.93;Petr V. +driver.94;Marek L. +driver.95;Thomas J. +driver.96;Vaclav M. +driver.97;Maarten O. +driver.98;+Yvonne P. +driver.99;Martin F. +driver.100;Jiri D. +driver.101;Max M. +driver.102;Irenej S. +driver.103;Branko J. +driver.104;Ludek H. +driver.105;Bujo U. +driver.106;+Katarina B. +driver.107;Samuel L. +driver.108;Filipe C. +driver.109;John D. +driver.110;+Monica H. +driver.111;+Stefany G. +driver.112;+Iwona B. +driver.113;+Suzan V. +driver.114;+Ulrike H. +driver.115;Maros R. +driver.116;+Jenevive Q. +driver.117;+Madison G. +driver.118;Rafael B. +driver.119;Istvan D. +driver.120;Janos B. +driver.121;Tomas D. +driver.122;Simon L. +driver.123;Pepe F. +driver.124;Leszek S. +driver.125;Jakub E. +driver.126;Kazimierz V. +driver.127;Arthur R. +driver.128;Honza A. +driver.129;Juraj H. +driver.130;Jano K. +driver.131;Daniel D. +driver.132;Hynek S. +driver.133;Peter V. +driver.134;Marian B. +driver.135;+Anna K. +driver.136;+Katalin A. +driver.137;+Orsolya T. +driver.138;+Hanka K. +driver.139;+Saskia Z. +driver.140;+Natalia P. +driver.141;+Rozarka F. +driver.142;+Izabella M. +driver.143;+Gertruda S. +driver.144;+Halina P. +driver.145;+Irena K. +driver.146;+Eorsebeth D. +driver.147;+Jana S. +driver.148;+Maria M. +driver.149;+Lenka F. +driver.150;+Sara H. +driver.151;+Patricia Y. +driver.152;+Simone M. +driver.153;M. T. Cougar +driver.154;Lucas O. +driver.155;Peter L. +driver.156;Magnus M. +driver.157;Patrik R. +driver.158;Mads O. +driver.159;Horst R. +driver.160;Viktor A. +driver.161;Martin P. +driver.162;Ondrej D. +driver.163;Marek A. +driver.164;Martin M. +driver.165;Piotr L. +driver.166;Noah Y. +driver.167;Alvin Ch. +driver.168;Jiri P. +driver.169;Tomas P. +driver.170;Harald T. +driver.171;+Ida K. +driver.172;+Maja V. +driver.173;+Karla S. +driver.174;+Karin D. +driver.175;+Eva S. +driver.176;+Mille R. +driver.177;+Emilie S. +driver.178;+Alice C. +driver.179;+Ella F. +driver.180;+Molly M. +driver.181;+Wilma F. +driver.182;+Emma W. +driver.183;+Alva V. +driver.184;+Agnes D. +driver.185;+Freja I. +driver.186;+Lilly A. +driver.187;+Stella Z. +driver.188;+Astrid L. +driver.189;+Else S. +driver.190;+Grete G. +driver.191;Milos Z. +driver.192;Marek T. +driver.193;Karel M. +driver.194;Nils B. +driver.195;Eirik S. +driver.196;Kristoffer B. +driver.197;Edgar D. +driver.198;Mathias B. +driver.199;Patrik S. +driver.200;Malcolm Y. +driver.201;+Naomi C. +driver.202;+Kim I. +driver.203;+Mimmi M. +driver.204;+Martina N. +driver.205;Ondrej M. +driver.206;Bartozs M. +driver.207;Jakub A. +driver.208;Lukasz B. +driver.209;Jocke H. +driver.210;Marcus E. +driver.211;Lennart M. +driver.212;Johan H. +driver.213;Grzegorz K. +driver.214;Michal R. +driver.215;Darko S. +driver.216;Peter P. +driver.217;Tomas N. +driver.218;Robo P. +driver.219;Petr P. +driver.220;Michal Ch. +driver.221;+Alicia L. +driver.222;Nikola K. +driver.223;Adrian T. +driver.224;Flemming V. +driver.225;Paul F. +driver.226;Arek L. +driver.227;Cory E. +driver.228;Joseph B. +driver.229;Robert H. +driver.230;Philip C. +driver.231;Carl S. +driver.232;Mark L. +driver.233;Jacques C. +driver.234;Jack R. +driver.235;Malcolm B. +driver.236;Dominik L. +driver.237;Petr M. +driver.238;Vasyl P. +driver.239;Daniel O. +driver.240;Jano O. +driver.241;Eryk D. +driver.242;Ivan L. +driver.243;Bob B. +driver.244;Donald T. +driver.245;Jean M. +driver.246;Ahmed M. +driver.247;+Žaneta Č. +driver.248;Danny N. +driver.249;Karel S. +driver.250;Corey T. +driver.251;Paul M. +driver.252;Philippe R. +driver.253;Richard B. +driver.254;+Jana K. +driver.255;+Jessica L. +driver.256;Umut A. +driver.257;Andrew H. +driver.258;Miroslav Z. +driver.259;Lucas V. +driver.260;David M. +driver.261;Pedro A. +driver.262;Rafal S. +driver.263;Woitke H. +driver.264;Roel Z. +driver.265;Thomas K. +driver.266;Vogtke H. +driver.267;Peter S. +driver.268;Yaroslav D. +driver.269;Maarten O. +driver.270;Joseph S. +driver.271;Luc P. +driver.272;Thomas D. +driver.273;Nicolaj N. +driver.274;Thomas O. +driver.275;Paul K. +driver.276;Adalbert S. +driver.277;Filip N. +driver.278;Filip P. +driver.279;Thomas V. +driver.280;George S. +driver.281;Michal K. +driver.282;Rajko J. +driver.283;Lucas P. +driver.284;Humphrey S. +driver.285;Denyel F. +driver.286;Laurence D. +driver.287;Clark P. +driver.288;Sidney I. +driver.289;Spencer T. +driver.290;+Christine S. +driver.291;+Romana H. +driver.292;+Anette P. +driver.293;+Petra J. +driver.294;+Elisabeth V. +driver.295;+Michaela J. +driver.296;+Ilona M. +driver.297;+Simona F. +driver.298;+Veronica B. +driver.299;+Kristina R. +driver.300;+Lien H. +driver.301;+Linda V. +driver.302;+Jennifer B. +driver.303;+Bettz R. +driver.304;+Ruth C. +driver.305;+Amy G. +driver.306;Selçuk I. +driver.307;Dominic F. +driver.308;David H. +driver.309;Jan Š. +driver.310;George D. +driver.311;Jose H. +driver.312;Maksim B. +driver.313;Mariano B. +driver.314;Marty C. +driver.315;Martin P. +driver.316;Martin V. +driver.317;+Michaela J. +driver.318;Patrick R. +driver.319;Vladimir R. +driver.320;Michal S. +driver.321;Daniel V. +driver.322;Adam S. +driver.323;Dave N. +driver.324;Adam F. +driver.325;Vlad H. +driver.326;Jerzy D. +driver.327;Jason M. +driver.328;+Ellie O. +driver.329;+Cathy C. +driver.330;+Rebecca F. +driver.331;Dirk H. +driver.332;Dave V. +driver.333;Torey L.W. +driver.334;Faelandaea D. +driver.335;Andrei T. +driver.336;Benjamin McG. +driver.337;Robert C. +driver.338;Myanko G. +driver.339;Edilberto M. +driver.340;Ricky S. \ No newline at end of file diff --git a/TS SE Tool/lang/Default/ETS2/CurrencyProperties.csv b/TS SE Tool/lang/Default/ETS2/CurrencyProperties.csv new file mode 100644 index 00000000..19b48132 --- /dev/null +++ b/TS SE Tool/lang/Default/ETS2/CurrencyProperties.csv @@ -0,0 +1,14 @@ +#ETS +EUR;1;;€; +GBP;0.8836;;£; +CHF;1.099;;; CHF +BGN;1.956;;лв; +PLN;4.308;;; zł +RON;4.760;;; lei +TRY;6.436;;₺; +DKK;7.469;;; kr +NOK;10.03;;; kr +SEK;10.81;;; kr +CZK;25.85;;; Kč +RUB;70.69;;₽; +HUF;332.0;;; Ft \ No newline at end of file diff --git a/TS SE Tool/lang/Default/ETS2/driver_names.csv b/TS SE Tool/lang/Default/ETS2/driver_names.csv new file mode 100644 index 00000000..62bb30e8 --- /dev/null +++ b/TS SE Tool/lang/Default/ETS2/driver_names.csv @@ -0,0 +1,341 @@ +driver.0;Bronislaw E. +driver.1;Ian P. +driver.2;Cameron S. +driver.3;Richard O. +driver.4;Manuel J. +driver.5;Henry K. +driver.6;Brandon L. +driver.7;Ludovic S. +driver.8;John M. +driver.9;Bob S. +driver.10;+Sophie I. +driver.11;+Katie W. +driver.12;+Georgia A. +driver.13;+Sabrina C. +driver.14;+Melanie Q. +driver.15;+Emily Z. +driver.16;+Scarlett J. +driver.17;Frank N. +driver.18;+Tina T. +driver.19;+Marianne G. +driver.20;+Reece S. +driver.21;+Brigit J. +driver.22;Andreas A. +driver.23;+Lucy L. +driver.24;+Ruth T. +driver.25;Jacek V. +driver.26;Jay Z. +driver.27;Brian F. +driver.28;Boris B. +driver.29;Milton P. +driver.30;Ben S. +driver.31;Maximilian T. +driver.32;Sebastian M. +driver.33;Tobias G. +driver.34;Ethan C. +driver.35;Matthew P. +driver.36;William J. +driver.37;Joshua T. +driver.38;Jordan A. +driver.39;Ray B. +driver.40;Dominic Q. +driver.41;Mateusz U. +driver.42;Jan Ch. +driver.43;Robert L. +driver.44;Leon R. +driver.45;Toby T. +driver.46;Umberto E. +driver.47;Ronald R. +driver.48;Angelo M. +driver.49;Kenneth F. +driver.50;Ralf W. +driver.51;Jeff B. +driver.52;Baldur G. +driver.53;Gregory P. +driver.54;Pascal B. +driver.55;Chris A. +driver.56;Lucas G. +driver.57;Tim D. +driver.58;Phillip M. +driver.59;George W. +driver.60;Arnold S. +driver.61;Daniel D. +driver.62;Marcel A. +driver.63;Bastiaan K. +driver.64;Joseph S. +driver.65;Sam B. +driver.66;Ulf G. +driver.67;Valentino R. +driver.68;Patrick S. +driver.69;Julian C. +driver.70;Ellis W. +driver.71;Josh T. +driver.72;Will Y. +driver.73;Christian I. +driver.74;Harry P. +driver.75;Pierre B. +driver.76;Garry O. +driver.77;Felix S. +driver.78;Luca B. +driver.79;Etienne J. +driver.80;Alexander M. +driver.81;Lewis J. +driver.82;Steve W. +driver.83;Eduard S. +driver.84;Enzo F. +driver.85;Ryan R. +driver.86;Yusuf B. +driver.87;Jean R. +driver.88;Jan K. +driver.89;Jiri W. +driver.90;Pavel S. +driver.91;Jaroslaw W. +driver.92;Martin C. +driver.93;Jiri B. +driver.94;Marek L. +driver.95;Thomas J. +driver.96;Vaclav M. +driver.97;John D. +driver.98;+Yvonne P. +driver.99;Martin F. +driver.100;Jiri D. +driver.101;Max M. +driver.102;Irenej S. +driver.103;Branko J. +driver.104;Ludek H. +driver.105;Bujo U. +driver.106;+Katarina B. +driver.107;Samuel L. +driver.108;Filipe C. +driver.109;John D. +driver.110;+Monica H. +driver.111;+Stefany G. +driver.112;+Lucy H. +driver.113;+Suzan V. +driver.114;+Ulrike H. +driver.115;Maros R. +driver.116;+Jenevive Q. +driver.117;+Madison G. +driver.118;Rafael B. +driver.119;Istvan D. +driver.120;Janos B. +driver.121;Tomas D. +driver.122;Simon L. +driver.123;Piotrek P. +driver.124;Leszek S. +driver.125;Jakub E. +driver.126;Kazimierz V. +driver.127;Arthur R. +driver.128;Honza A. +driver.129;Juraj H. +driver.130;Jano K. +driver.131;Daniel D. +driver.132;Hynek S. +driver.133;Peter V. +driver.134;Marian B. +driver.135;+Anna K. +driver.136;+Katalin A. +driver.137;+Orsolya T. +driver.138;+Hanka K. +driver.139;+Saskia Z. +driver.140;+Natalia P. +driver.141;+Rozarka F. +driver.142;+Izabella M. +driver.143;+Gertruda S. +driver.144;+Halina P. +driver.145;+Irena K. +driver.146;+Eorsebeth D. +driver.147;+Jana S. +driver.148;+Maria M. +driver.149;+Lenka F. +driver.150;+Sara H. +driver.151;+Patricia Y. +driver.152;+Simone M. +driver.153;M. T. Cougar +driver.154;Lucas O. +driver.155;Dan A. +driver.156;Magnus M. +driver.157;Mikkel Y. +driver.158;Mads O. +driver.159;Tobias H. +driver.160;Viktor A. +driver.161;Martin P. +driver.162;Ondrej D. +driver.163;Marek A. +driver.164;Martin M. +driver.165;Piotr L. +driver.166;Noah Y. +driver.167;Alvin Ch. +driver.168;Jiri P. +driver.169;Tomas P. +driver.170;Harald T. +driver.171;+Ida K. +driver.172;+Maja V. +driver.173;+Karla S. +driver.174;+Karin D. +driver.175;+Eva S. +driver.176;+Mille R. +driver.177;+Emilie S. +driver.178;+Alice C. +driver.179;+Ella F. +driver.180;+Molly M. +driver.181;+Wilma F. +driver.182;+Emma W. +driver.183;+Alva V. +driver.184;+Agnes D. +driver.185;+Freja I. +driver.186;+Lilly A. +driver.187;+Stella Z. +driver.188;+Astrid L. +driver.189;+Else S. +driver.190;+Grete G. +driver.191;Milos Z. +driver.192;Marek T. +driver.193;Karel M. +driver.194;Nils B. +driver.195;Eirik S. +driver.196;Kristoffer B. +driver.197;Oliver H. +driver.198;Mathias B. +driver.199;Samuel J. +driver.200;Malcolm Y. +driver.201;+Naomi C. +driver.202;+Kim I. +driver.203;+Mimmi M. +driver.204;+Martina N. +driver.205;Ondrej M. +driver.206;Bartozs M. +driver.207;Jakub A. +driver.208;Lukasz B. +driver.209;Jocke H. +driver.210;Marcus E. +driver.211;Lennart M. +driver.212;Johan H. +driver.213;Grzegorz K. +driver.214;Michal R. +driver.215;Darko S. +driver.216;Peter P. +driver.217;Tomas N. +driver.218;Robo P. +driver.219;Petr P. +driver.220;Michal Ch. +driver.221;+Alicia L. +driver.222;Nikola K. +driver.223;Adrian T. +driver.224;Flemming V. +driver.225;Paul F. +driver.226;Arek L. +driver.227;Cory E. +driver.228;Joseph B. +driver.229;Robert H. +driver.230;Philip C. +driver.231;Carl S. +driver.232;Mark L. +driver.233;Jacques C. +driver.234;Jack R. +driver.235;Malcolm B. +driver.236;Dominik L. +driver.237;Petr M. +driver.238;Vasyl P. +driver.239;Daniel O. +driver.240;Jano O. +driver.241;Eryk D. +driver.242;Ivan L. +driver.243;Bob B. +driver.244;Donald T. +driver.245;Jean M. +driver.246;Ahmed M. +driver.247;+Žaneta Č. +driver.248;Danny N. +driver.249;Karel S. +driver.250;Corey T. +driver.251;Pavel M. +driver.252;Philippe R. +driver.253;Richard B. +driver.254;+Jana K. +driver.255;Chris K. +driver.256;Dave N. +driver.257;Dominik F. +driver.258;David H. +driver.259;Jan Š. +driver.260;Jiří D. +driver.261;Josef H. +driver.262;Maksim B. +driver.263;Marián B. +driver.264;Martin Ch. +driver.265;Martin P. +driver.266;Martin V. +driver.267;+Michaela J. +driver.268;Patrik R. +driver.269;Vladimír Ř. +driver.270;Michal S. +driver.271;Daniel V. +driver.272;Adam S. +driver.273;Selçuk I. +driver.274;Adam F. +driver.275;Vladimír H. +driver.276;Jiří D. +driver.277;Jakub M. +driver.278;Filip P. +driver.279;Thomas V. +driver.280;George S. +driver.281;Michal K. +driver.282;Rajko J. +driver.283;Luc P. +driver.284;Humphrey S. +driver.285;Denyel F. +driver.286;Laurence D. +driver.287;Clark P. +driver.288;Sidney I. +driver.289;Spencer T. +driver.290;+Christine S. +driver.291;+Romana H. +driver.292;+Aneta P. +driver.293;+Petra J. +driver.294;+Elise V. +driver.295;+Michaela J. +driver.296;+Ilona M. +driver.297;+Simona F. +driver.298;+Veronika B. +driver.299;+Kristina R. +driver.300;+Lien H. +driver.301;+Linda V. +driver.302;+Jennifer B. +driver.303;+Bettz R. +driver.304;+Ruth C. +driver.305;+Amy G. +driver.306;Umut A. +driver.307;Andrew H. +driver.308;Miroslav Z. +driver.309;Luke V. +driver.310;David M. +driver.311;Pedro A. +driver.312;Rafal S. +driver.313;William H. +driver.314;Roel Z. +driver.315;Thomas K. +driver.316;William H. +driver.317;Peter S. +driver.318;Jaroslav D. +driver.319;Maarten O. +driver.320;Joseph S. +driver.321;Lucas P. +driver.322;Thomas D. +driver.323;Nicolaj N. +driver.324;Thomas O. +driver.325;Paul K. +driver.326;Vojteh S. +driver.327;Filip N. +driver.328;+Ellie O. +driver.329;+Cathy C. +driver.330;+Rebecca F. +driver.331;Dirk H. +driver.332;Dave V. +driver.333;Torey L.W. +driver.334;Faelandaea D. +driver.335;Andrei T. +driver.336;Benjamin McG. +driver.337;Robert C. +driver.338;Myanko G. +driver.339;Wojciech M. +driver.340;Ricky S. \ No newline at end of file diff --git a/TS SE Tool/lang/Default/cargo_translate.txt b/TS SE Tool/lang/Default/cargo_translate.txt new file mode 100644 index 00000000..cd0a7238 --- /dev/null +++ b/TS SE Tool/lang/Default/cargo_translate.txt @@ -0,0 +1,604 @@ +[Default] +acetylene;Acetylene +acid;Acid +air_mails;Air Mails +aircft_tires;Aircraft Tyres +aircond;Air Conditioners +almond;Almond +ammunition;Ammunition +apples;Apples +apples_c;Apples +aromatics;Aromatics +arsenic;Arsenic +asph_miller;Asphalt Miller - Writigen 808 +atl_cod_flt;Atlantic Cod Fillet +backfl_prev;Backflow Preventers +barley;Barley +basil;Basil +beans;Beans +beef_meat;Beef +beverages;Beverages +beverages_c;Beverages +big_bag_seed;Big-bags of Seeds +boiler_parts;Boiler Part (Special) +boric_acid;Boric Acid +bottle_water;Bottled Water +bottles;Empty Bottles +brake_fluid;Brake Fluid +brake_pads;Brake Pads +bricks;Bricks +bulldozer;Bulldozer +butter;Butter +cable;Cables +cable_reel;Industrial Cable Reel +can_sardines;Canned Sardines +canned_beans;Canned Beans +canned_beef;Canned Beef +canned_pork;Canned Pork +canned_tuna;Canned Tuna +car_balt1;Cars (Baltic 1) +car_balt2;Cars (Baltic 2) +car_it;Cars (Italia) +caravan;Caravan +carb_water;Carbonated Water +carbn_pwdr;Carbonated Black Powder +carbn_pwdr_c;Carbonated Black Powder +carcomp;Car Component +carrots;Carrots +carrots_c;Carrots +cars_big;Cars Big +cars_fr;Cars (France) +cars_mix;Cars Mix +cars_small;Cars Small +case600;Crawler Tractor +cat_785c;Haul Truck Chassis (Special) +cat627;Scraper +cauliflower;Cauliflower +caviar;Caviar +cement;Cement +cheese;Cheese +chem_sorb_c;Chemical Sorbent +chem_sorbent;Chemical Sorbent +chemicals;Chemicals +chewing_gums;Chewing Gums +chicken_meat;Chicken Meat +chimney_syst;Chimney Systems +chlorine;Chlorine +chocolate;Chocolate +clothes;Clothes +clothes_c;Clothes +coal;Coal +coconut_milk;Coconut Milk +coconut_oil;Coconut Oil +coil;Metal Coil +colors;Colors +comp_process;Computer Processors +computers;Computer +concen_juice;Concentrate Juices +concr_beams;Concrete Beams +concr_beams2;Concrete Beams +concr_cent;Concrete Centering +concr_stair;Concrete Stairs +condensator;Industrial Condensator (Special) +const_house;Construction Houses +cont_trees;Containerized Trees +contamin;Contaminated Material +copp_rf_gutt;Copper Roof Gutters +corks;Corks +cott_cheese;Cottage Cheese +ctubes;Concrete Tubes +ctubes_b;Concrete Tubes_b +curtains;Curtains +cut_flowers;Cut Flowers +cyanide;Cyanide +desinfection;Disinfectant +diesel;Diesel +diesel_gen;Diesel Generators +digger1000;Digger 1000 +digger500;Digger 500 +diggers;Diggers +dozer;Dozer Crawl - Z35K +driller;Driller - D-50 +dry_fruit;Dry Fruits +dry_milk;Dry Milk +dryers;Dryers +drymilk;Dry Milk +dynamite;Dynamite +elect_wiring;Electrical Wiring +electro_comp;Electronic Components +electronics;Electronics +emp_wine_bar;Empty Wine Barrels +emp_wine_bot;Empty Wine Bottles +empty_barr;Empty Barrels +empty_palet;Empty Pallets +emptytank;Reservoir Tank +ethane;Ethane +ex_bucket;Excavator Bucket (Special) +excav_soil;Excavated Soil +excavator;Excavator +excavator_bucket;Excavator Bucket (Special) +exhausts_c;Exhaust Systems +explosives;Explosives +fertilizer;Fertilizer +fireworks;Fireworks +fish_chips;Fish Fingers +floorpanels;Floor Panels +flour;Flour +fluorine;Fluorine +food;Food +forklifts;Forklifts +fresh_fish;Fresh Fish +froz_octopi;Frozen Octopi +frozen_food;Frozen Food +frozen_fruit;Frozen Fruits +frozen_hake;Frozen Hake +frozen_veget;Frozen Vegetables +frsh_herbs;Fresh Herbs +fruits;Fruits +fuel_oil;Fuel Oil +fuel_tanks;Fuel Tanks +fueltanker;Fuel Tanker +furniture;Furniture +garlic;Garlic +glass;Glass Panels +glass_packed;Packed Glass +gnocchi;Gnocchi +goat_cheese;Goat Cheese +grain;Grain +granite_cube;Granite Cubes +grapes;Grapes +graph_grease;Graphite Grease +grass_rolls;Grass Rolls +gravel;Gravel +guard_rails;Guard Rails +gummy_bears;Gummy Bears +gypsum;Gypsum +harvest_bins;Harvesting Bins +hay;Hay +hchemicals;Hot Chemicals +heat_exch;Heat Exchanger (Special) +heat_exchanger;Heat Exchanger (Special) +helicopter;Helicopter - Ring-429 +hi_volt_cabl;High Voltage Cables +hipresstank;Pressure Tank +hmetal;Heavy Metals +home_acc;Home Accessoires +honey;Honey +house_pref;House Prefabs +househd_appl;Household Appliances +hwaste;Hospital Waste +hydrochlor;Hydrochloric Acid +hydrogen;Hydrogen +ibc_cont;IBC Containers +icecream;Ice Cream +iced_coffee;Canned Iced Coffee +iron_pipes;Iron Pipes (Big) +iveco_vans;Cars Braco Vans +kalmar240;Lift Truck +kalmar240_s;Lift Truck Chassis +kerosene;Kerosene +ketchup;Ketchup +komatsu155;Bulldozer +lamb_stom;Lamb Stomachs +largetubes;Large Tubes +lattice;Construction Staircase (Special) +lavender;Lavender +lead;Lead +limestone;Limestone +limonades;Lemonade +live_catt_fr;Live Cattle (France) +live_cattle;Live Cattle +liver_paste;Liver Paste +locomotive;Locomotive - Vossloh G6 +logs;Logs +lpg;LPG +lumber;Lumber +lumber_b;Lumber_b +lye;Lye +m_59_80_r63;Huge Tyres (Special) +machine_pts;Machine Parts +magnesium;Magnesium +maple_syrup;Maple Syrup +marb_blck;Marble Blocks +marb_blck2;Marble Blocks_b +marb_slab;Marble Slab +mason_jars;Mason Jars +mbt;Mobile Barrier +meat;Meat +med_equip;Medical Equipment +med_vaccine;Medical Vaccines +mercuric;Mercuric Acid +metal_beams;Metal Beams +metal_cans;Metal Cans +metal_center;Metal Centering +metal_pipes;Iron Pipes +michelin_59_80_r63;Huge Tyres (Special) +milk;Milk +mobile_crane;Mobile Crane - Rex-Tex 45 +mondeos;Cars +moor_buoy;Mooring Buoy +mortar;Mortar +moto_tires;Motorcycle Tyres +motor_oil;Motor Oil +motor_oil_c;Motor Oil C +motorcycles;Motorcycles +mozzarela;Mozzarela +mtl_coil;Metal Coil +mystery_box;Massive Tech Part (Special) +mystery_cyl;High-Tech Device (Special) +natur_rubber;Natural Rubber +neon;Neon +nitrocel;Nitrocellulose +nitrogen;Nitrogen +nonalco_beer;Non-alcoholic Beer +nuts;Nuts +nylon_cord;Nylon Cord +office_suppl;Office Supplies +oil;Oil +oil_filt_c;Oil Filters +oil_filters;Oil Filters +olive_oil;Olive Oil +olives;Olives +onion;Onions +oranges;Oranges +ore;Ore +outdr_flr_tl;Outdoor Floor Tiles +overweight;Low Bed Semi-trailers +packag_food;Packaged Food +paper;Office Paper +pasta;Pasta +pears;Pears +peas;Peas +perfor_frks;Performance Forks +pesticide;Pesticides +pesto;Pesto +pet_food;Pet Food +pet_food_c;Pet Food +petrol;Petrol +phosphor;White Phosphorus +pilot_boat;Service Boat (Special) +pipes;Iron Pipes +plant_substr;Plant Substrate +plast_film;Plastic Film Rolls +plast_film_c;Plastic Film Rolls +plastic_gra;Plastic Granules +plows;Plows +plumb_suppl;Plumbing Supplies +plums;Plums +pnut_butter;Peanut Butter +polyst_box;Polystyrene Boxes +pork_meat;Pork +post_packag;Post Packages +pot_flowers;Potted Flowers +potahydro;Potassium Hydroxide +potassium;Potassium +potatoes;Potatoes +precast_strs;Precast Stairs +press_sl_val;High Pressure Slide Valves +princess;Yacht - Queen V39 +propane;Propane +prosciutto;Prosciutto +protec_cloth;Protective Clothing +pumps;Pumps +radiators;Radiators +rawmilk;Raw Milk +re_bars;Reinforcing Bars +refl_posts;Reflective Posts +rice;Rice +rice_c;Rice +roadroller;Roadroller +roller;Roller - DYNA CC-2200 +roof_tiles;Roof Tiles +roofing_felt;Roofing Felt +rooflights;Rooflights +rye;Rye +salm_fillet;Salmon Fillet +salt_spice_c;Salt & Spices +salt_spices;Salt & Spices +sand;Sand +sandwch_pnls;Sandwich Panels +sausages;Sausages +sawpanels;Sawdust Panels +scaffoldings;Scaffoldings +scania_tr;Scania Trucks +scooters;Scooters +scrap_cars;Scrapped Cars +scrap_metals;Scrap Metals +seal_bearing;Sealed Bearings +sheep_wool;Sheep Wool +shock_absorb;Shock Absorbers +silica;Silica +silo;Giant Silo (Special) +smokd_eel;Smoked Eel +smokd_sprats;Smoked Sprats +sodchlor;Sodium Hypochloride +sodhydro;Sodium Hydroxide +sodium;Sodium +soil;Soil +solvents;Solvents +soy_milk;Soy Milk +spher_valves;Spherical Valves +sq_tub;Square Tubings +steel_cord;Steel Cord +stone_dust;Stone Dust +stone_wool;Stone Wool +stones;Stones +straw_bales;Straw Bales +sugar;Sugar +sulfuric;Sulfuric Acid +tableware;Tableware +terex3160;All Terrain Crane +tomatoes;Tomatoes +toys;Toys +tracks;Tracks +tractor;Tractor - RS-666 +tractors;Tractors +train_part;Train Axles +train_part2;Train Undercarriage +transformat;Transformer - PK900 +transformer;Transformer +transmis;Transmissions +truck_batt;Truck Batteries +truck_batt_c;Truck Batteries +truck_rims;Truck Rims +truck_rims_c;Truck Rims +truck_tyres;Truck Tyres +tube;Gas Pipeline Parts +tvs;TVs +tyres;Tyres +used_battery;Used Car Batteries +used_pack;Used Packagings +used_packag;Used Packagings +used_plast;Used Plastics +used_plast_c;Used Plastics +vegetable;Vegetables +vent_tube;Ventilation Shaft +ventilation;Ventilation Shaft +vinegar;Vinegar +vinegar_c;Vinegar +volvo_cars;Luxury SUVs +volvo_tr;Volvo Trucks +wallpanels;Wall Panels +watermelons;Watermelons +wheat;Wheat +windml_eng;Wind Turbine Nacelle +windml_tube;Wind Turbine Tower +wirtgen250;Milling Machine +wood_bark;Wood Bark +wooden_beams;Wooden Beams +wrk_cloth;Work Clothes +wshavings;Wood Shavings +yacht;Yacht +yogurt;Yoghurt +young_seed;Young Seed +aljoinery;Aluminium Joinery +aquariums;Aquariums +beer;Beer +canned_fish;Canned Fish +carengines;Car Engines +cement_dry;Dry Cement +circulators;Circulators +cleaners;Cleaning Agents +daf_tr;Trucks – DAF +dairy;Dairy Products +empty_logs;Empty Log Trailer +emptybottles;Empty Bottles +ext_crn_pr;External Corner Profiles +ext_fil;External Filters +fl_furn;Flat-Pack Furniture +gates;Gates +hardware;Hardware +junk;Junk +malt;Malt +man_tr;Trucks – MAN +plastic;Plastic +reindeer;Reindeer Meat +rubber;Rubber +seafood;Seafood +skir_bo;Skirting Boards +skir_tr;Skirting Trunking +soap;Personal Hygiene Products +trans_pr;Transition Profiles +transmission;Transmissions +truckengines;Truck Engines +water;Water +windows;Windows +ammonia; +car_d; +car_f; +chlorine_t; +krone_cool; +krone_profi; +krone_profib; +live_pigs; +lpg_t; +olive_tree; +plast_pipes; +sulfuric_t; +vans_fd; +vans_id; +vans_vt; +krone_box; +alu_ingot; +alu_profile; +caravans; +beverages_t; +car_ibe; +conc_juice_t; +lux_yacht; +milk_t; +olive_oil_t; +soy_milk_t; +aircraft_eng; +beet_harvest; +big_tyres; +boom_lift; +boom_lift2; +buttermilk; +cans; +cars_pick_tt; +cars_pickup; +cattle; +conc_barr; +cott_lint; +cott_seed; +dumpster; +frac_tank; +fruit_juic_t; +gen_set; +generator_c; +glass_rack; +grain_b; +harvester; +kw_t680; +lemonade; +mixtank; +pellet_afood; +potatoes_b; +pt_579; +salt; +school_bus; +soda_ash; +sugar_beet_b; +trees; +util_pole; +waste_paper; +ws_49x; +yard_truck; +aircon; +garbage_trck; +pellet_afd_b; +pumpjack; +space_cont; +abrikos; +aek; +appll; +avtovoz; +benzin; +benzin1; +benzin2; +benzin3; +benzin4; +benzin5; +benzin6; +bikes; +bm_21; +brevno3; +brevno4; +brevno5; +brevno6; +brusi; +btr_90; +cherryi; +cistern1; +cistern2; +cn_horsemeat; +dosk1; +dosk2; +dp64; +dvigun; +eggs; +g_boat; +gaz66_tr; +gorox; +grecya; +guns; +ikea_pl_emtp; +ikea_pl_furn; +ikea_pl_hmwr; +ikea_pl_papr; +ikea_pl_plst; +ka_60; +kabak; +kamaz; +kamaz_old; +kamaz_olz; +kapusta; +kirovec_pr; +km8; +kolbasko; +kopcen; +krasnaikra; +kraz; +kraz_pr; +kraz_tr; +kraz01; +kurica; +m21; +malina; +maz_535; +meatg; +meats; +meatt; +mebel; +mebel1; +mebel2; +mebel3; +more_prod; +morkovv; +mre; +muka; +musor; +musor1; +musor2; +musor5; +nastoik; +nh_90; +ochakovo; +ogurec; +os_a; +pastet; +pelmen; +pelmsum; +people; +perez; +pili1; +pili2; +pili3; +poleni; +pomidor; +prizep; +prjnik; +pusto; +pzrk; +rjs; +russka; +s_boat; +sahar; +salo; +sardel; +scania_t; +sibir; +sigaret; +sliva; +spirt; +suxari; +svekla; +t_55; +to_r; +topol1; +topolm1; +ural; +ural_d; +ural_dps; +ural_m; +ural_pr; +ural_tr; +vol_ew240emh; +volvo_a25g; +volvo_bucket; +volvo_ec220e; +volvo_l250h; +volvo_rims; +volvo_sd160b; +volvo_t; +woda; +wodka; +xleb; +zapzast; +zil_tr; +zil130_d; +zil130_pr; +zil130_tr; +zil433_d; +zil433_tr; \ No newline at end of file diff --git a/TS SE Tool/lang/Default/cities_translate.txt b/TS SE Tool/lang/Default/cities_translate.txt new file mode 100644 index 00000000..2107b42c --- /dev/null +++ b/TS SE Tool/lang/Default/cities_translate.txt @@ -0,0 +1,1488 @@ +[Default] +a_coruna;A Coruña +aalborg;Aalborg +aarhus;Aarhus +aberdeen;Aberdeen +aberystwyth;Aberystwyth +ajaccio;Ajaccio +akranes;Akranes +akureyri;Akureyri +alajarvi;Alajärvi +alamogordo;Alamogordo +albacete;Albacete +alban;Saint-Alban-du-Rhône +albuquerque;Albuquerque +alexandroup;Alexandroupoli +algeciras;Algeciras +almaraz;Almaraz +almeria;Almería +amsterdam;Amsterdam +ancona;Ancona +andorra;Andorra la Vella +antwerp;Antwerp +arad;Arad +are;Åre +arnhem;Arnhem +artesia;Artesia +astoria;Astoria +augustow;Augustów +aurach;Aurach +bacau;Bacău +badajoz;Badajoz +bado;Bad Oeynhausen +bailen;Bailén +bakersfield;Bakersfield +balti;Bălţi +balvi;Balvi +barcelona;Barcelona +bari;Bari +barstow;Barstow +basel;Basel +bastia;Bastia +bayonne;Bayonne +beja;Beja +belda;Bełda +belfast;Belfast +bend;Bend +beograd;Belgrade +bergen;Bergen +berlin;Berlin +bern;Bern +bialystok;Białystok +bilbao;Bilbao +birmingham;Birmingham +birsay;Birsay +bitola;Bitola +blonduos;Blönduós +bobolice;Bobolice +bologna;Bologna +bolungarvik;Bolungarvík +bonifacio;Bonifacio +bonn;Bonn +bordeaux;Bordeaux +borgarnes;Borgarnes +bourges;Bourges +brasov;Brașov +bratislava;Bratislava +bremen;Bremen +bremerhaven;Bremerhaven +brest;Brest +brno;Brno +broadford;Broadford +brussel;Brussels +bucuresti;Bucureşti +budapest;Budapest +burg;Burg auf Fehmarn +burgas;Burgas +burgos;Burgos +burns;Burns +busko;Busko Zdrój +bydgoszcz;Bydgoszcz +bystrica;Banská Bystrica +cagliari;Cagliari +cairnryan;Cairnryan +calais;Calais +calarasi;Călărași +calvi;Calvi +cambridge;Cambridge +camp_verde;Camp Verde +canfranc;Canfranc-Estación +canterbury;Canterbury +cardiff;Cardiff +carlisle;Carlisle +carlsbad;Carlsbad +carlsbad_nm;Carlsbad (NM) +carson_city;Carson City +cassino;Cassino +catania;Catania +catanzaro;Catanzaro +cernavoda;Cernavodă +chelmsford;Chelmsford +chisinau;Chişinău +cieszyn;Cieszyn +ciudad_real;Ciudad Real +civaux;Civaux +clermont;Clermont-Ferrand +clifton;Clifton +clovis;Clovis +cluj;Cluj-Napoca +cluj_napoca;Cluj-Napoca +coimbra;Coimbra +constanta;Constanţa +coos_bay;Coos Bay +cordoba;Córdoba +corticadas;Cortiçadas de Lavre +craiova;Craiova +croydon;Croydon +czluchow;Człuchów +daugavpils;Daugavpils +debrecen;Debrecen +dijon;Dijon +dombas;Dombås +donostia;San Sebastián +dortmund;Dortmund +douglas;Douglas +dover;Dover +drammen;Drammen +dresden;Dresden +dublin;Dublin +duisburg;Duisburg +dumfries;Dumfries +dusseldorf;Düsseldorf +dziwnowek;Dziwnówek +edinburgh;Edinburgh +edirne;Edirne +ehrenberg;Ehrenberg +eindhoven;Eindhoven +el_centro;El Centro +el_ejido;El Ejido +elblag;Elbląg +elk;Ełk +elko;Elko +ely;Ely +erfurt;Erfurt +esbjerg;Esbjerg +eugene;Eugene +eureka;Eureka +evie;Evie +evora;Evora +farmington;Farmington +faro;Faro +felixstowe;Felixstowe +firenze;Firenze +fishguard;Fishguard +flagstaff;Flagstaff +flensburg;Flensburg +folkestone;Folkestone +forst;Forst +frankfurt;Frankfurt am Main +fraserburgh;Fraserburgh +frederikshv;Frederikshavn +fresno;Fresno +ftwilliam;Fort William +furth;Fürth +g_canyon_vlg;Grand Canyon Village +galati;Galați +gallup;Gallup +galway;Galway +gavle;Gävle +gdansk;Gdańsk +gdynia;Gdynia +gedser;Gedser +geisel;Geiselwind +geneve;Genève +genova;Genova +gijon;Gijón +glasgow;Glasgow +golfech;Golfech +gorzow;Geiselwind +goteborg;Göteborg +granada;Granada +graz;Graz +grimsby;Grimsby +groedig;Grödig +groningen;Groningen +grudziadz;Grudziądz +grumantbyen;Grumantbyen +guarda;Guarda +gusev;Gusev +gyor;Győr +hainburg;Hainburg an der Donau +halle;Halle +hamar;Hamar +hamburg;Hamburg +hammerfest;Hammerfest +hannover;Hannover +haparanda;Haparanda +hawes;Hawes +heilbronn;Heilbronn +helsingborg;Helsingborg +helsinki;Helsinki +herning;Herning +hilt;Hilt +hiorthhamn;Hiorthhamn +hirtshals;Hirtshals +hobbs;Hobbs +hofn;Höfn í Hornafirði +holbrook;Holbrook +holmavik;Hólmavík +holstebro;Holstebro +holyhead;Holyhead +honningsvag;Honningsvåg +hornbrook;Hornbrook +huelva;Huelva +huesca;Huesca +hull;Hull +hunedoara;Hunedoara +huron;Huron +iasi;Iași +ilowa;Iłowa +ilza;Iłża +innsbruck;Innsbruck +inverness;Inverness +ioannina;Ioannina +irun;Irun +isafjordur;Ísafjörður +istanbul;İstanbul +ivalo;Ivalo +jaca;Jaca +jackpot;Jackpot +jekabpils;Jēkabpils +joensuu;Joensuu +jonkoping;Jönköping +jonquera;La Jonquera +jyvaskyla;Jyväskylä +kaliningrad;Kaliningrad +kalix;Kalix +kalmar;Kalmar +kandalaksha;Kandalaksha +kapellskar;Kapellskär +karlovo;Karlovo +karlskrona;Karlskrona +karlstad;Karlstad +karsamaki;Kärsämäki +kassel;Kassel +katowice;Katowice +kaunas;Kaunas +kavala;Kavala +kayenta;Kayenta +keflavik;Keflavík +kemi;Kemi +kemijarvi;Kemijärvi +kiel;Kiel +kielce;Kielce +kingman;Kingman +kirkenes;Kirkenes +kirkwall;Kirkwall +kittila;Kittilä +klagenfurt;Klagenfurt am Wörthersee +klaipeda;Klaipėda +klaksvik;Klaksvík +klamath_f;Klamath Falls +kobenhavn;København +koblenz;Koblenz +kokkola;Kokkola +kolding;Kolding +kolka;Kolka +koln;Köln +kosice;Košice +koszalin;Koszalin +kotka;Kotka +kouvola;Kouvola +kozloduy;Kozloduy +krafla;Krafla +kragujevac;Kragujevac +krakow;Kraków +kristiansand;Kristiansand +kristianstad;Kristianstad +kristiinank;Kristiinankaupunki +krosno;Krosno +kunda;Kunda +kuopio;Kuopio +lacq;Lacq +lahti;Lahti +lakeview;Lakeview +larnaka;Larnaka +larne;Larne +larochelle;La Rochelle +las_cruces;Las Cruces +las_vegas;Las Vegas +laurent;Saint-Laurent +lefkosia;Nicosia +lehavre;Le Havre +leipzig;Leipzig +lellinge;Lellinge +lemans;Le Mans +lemesos;Lemesos +leon;León +leskovac;Leskovac +liege;Liège +liepaja;Liepāja +lile_rousse;L'Île-Rousse +lille;Lille +lillehammer;Lillehammer +limerick;Limerick +limoges;Limoges +linkoping;Linköping +linz;Linz +lisboa;Lisbon +lisburn;Lisburn +liverpool;Liverpool +livorno;Livorno +ljubljana;Ljubljana +ljugarn;Ljugarn +lleida;Lleida +lodz;Łódź +london;London +londonderry;Londonderry +longyearbyem;Longyearbyen +longyearbyen;Longyearbyen +los_angeles;Los Angeles +loviisa;Loviisa +lublin;Lublin +luga;Luga +luxembourg;Luxembourg +lyon;Lyon +madrid;Madrid +magdeburg;Magdeburg +mainz;Mainz +malaga;Málaga +malmo;Malmö +manchester;Manchester +mangalia;Mangalia +mannheim;Mannheim +manresa;Manresa +maribor;Maribor +mariehamn;Mariehamn +marseille;Marseille +mazeikiai;Mažeikiai +medford;Medford +mengibar;Mengíbar +messina;Messina +metz;Metz +miedzyzdroje;Międzyzdroje +mikkeli;Mikkeli +milano;Milano +mlada;Mladá Boleslav +moerdijk;Moerdijk +montana;Montana +montpellier;Montpellier +mragowo;Mrągowo +mukacheve;Mukachevo +munchen;München +murcia;Murcia +murmansk;Murmansk +naantali;Naantali +nantes;Nantes +napoli;Napoli +narbonne;Narbonne +narva;Narva +navia;Navia +newcastle;Newcastle-upon-Tyne +newport;Newport +nice;Nice +nikel;Nikel +nis;Niš +nogales;Nogales +novisad;Novi Sad +nowogard;Nowogard +nurnberg;Nürnberg +nynashamn;Nynäshamn +o_barco;O Barco +oakdale;Oakdale +oakland;Oakland +oban;Oban +oberhausen;Oberhausen +obsteig;Obsteig +odense;Odense +ohrid;Ohrid +olbia;Olbia +olhao;Olhão +olkiluoto;Olkiluoto +olomouc;Olomouc +olsztyn;Olsztyn +olszyna;Olszyna +ontario;Ontario +opole;Opole +oppdal;Oppdal +oradea;Oradea +orebro;Örebro +orkanger;Orkanger +orleans;Orléans +ornskoldsvik;Örnsköldsvik +osijek;Osijek +oslo;Oslo +osnabruck;Osnabrück +ostersund;Östersund +ostrava;Ostrava +ostroleka;Ostrołęka +ostrowm;Ostrołęka +otta;Otta +oulu;Oulu +oxnard;Oxnard +padborg;Padborg +pafos;Pafos +page;Page +paldiski;Paldiski +palermo;Palermo +paluel;Paluel +pamplona;Pamplona +panevezys;Panevėžys +paris;Paris +parma;Parma +parnu;Pärnu +pau;Pau +pecs;Pécs +pendleton;Pendleton +pernik;Pernik +perpignan;Perpignan +perth;Perth +pescara;Pescara +petersburg;Saint Petersburg +phoenix;Phoenix +piatra;Perth +pila;Piła +pioche;Pioche +pirdop;Pirdop +pitesti;Pitești +pleven;Pleven +ploce;Ploče +plock;Płock +plovdiv;Plovdiv +plymouth;Plymouth +ponte_de_sor;Ponte de Sor +pori;Pori +port_sagunt;Port de Sagunt +porthmadog;Porthmadog +portland;Portland +porto;Porto +porto_vecchi;Porto-Vecchio +portree;Portree +portsmouth;Portsmouth +poznan;Poznań +prague;Praha +prilep;Prilep +primm;Primm +przemysl;Przemyśl +pskov;Pskov +ptolemaida;Ptolemaida +puertollano;Puertollano +radom;Radom +ramsey;Ramsey +raton;Raton +redding;Redding +reims;Reims +rennes;Rennes +reno;Reno +resita;Reșița +reutte;Reutte +reydar;Reyðarfjörður +reykjavik;Reykjavík +rezekne;Rēzekne +riga;Rīga +rijeka;Rijeka +roadworks_a7;A7 Roadworks +roma;Roma +ronne;Rønne +roscoff;Roscoff +rostock;Rostock +roswell;Roswell +rotterdam;Rotterdam +rovaniemi;Rovaniemi +ruse;Ruse +rzeszow;Rzeszów +sacramento;Sacramento +salamanca;Salamanca +salem;Salem +salzburg;Salzburg +san_diego;San Diego +san_francisc;San Francisco +san_rafael;San Rafael +san_simon;San Simon +sangerhausen;Sangerhausen +sangiovanni;Villa San Giovanni +sanok;Sanok +santa_cruz;Santa Cruz +santa_fe;Santa Fe +santa_maria;Santa Maria +santander;Santander +sassari;Sassari +selfoss;Selfoss +senj;Senj +setubal;Setúbal +sevilla;Seville +seydis;Seyðisfjörður +sheffield;Sheffield +show_low;Show Low +siauliai;Šiauliai +sibenik2;Šibenik +sibenik;Šibenik +sibiu;Sibiu +siedlce;Siedlce +sierra_vista;Sierra Vista +sines;Sines +skelleftea;Skellefteå +skopje;Skopje +slbrod;Skopje +sligo;Sligo +socorro;Socorro +sodankyla;Sodankylä +soderhamn;Söderhamn +sodertalje;Södertälje +sofia;Sofia +soria;Soria +sosnovy_bor;Sosnovy Bor +southampton;Southampton +split;Split +stargard;Stargard +stavanger;Stavanger +sthelier;Saint Helier +stockholm;Stockholm +stockton;Stockton +stornoway;Stornoway +stranraer;Stranraer +strasbourg;Strasbourg +strzelcekraj;Strzelce Krajeńskie +stuttgart;Stuttgart +subotica;Subotica +sundsvall;Sundsvall +suwalki;Suwałki +suzzara;Suzzara +svalsateast;Svalbard Eastern Satellite station +svalsatwest;Svalbard Eastern Satellite station +swansea;Swansea +swinoujscie;Świnoujście +szczecin;Szczecin +szeged;Szeged +tallinn;Tallinn +tampere;Tampere +tanabru;Tana Bru +taranto;Taranto +targu_mures;Târgu Mureș +tarragona;Tarragona +tartu;Tartu +tekirdag;Tekirdağ +terni;Terni +teruel;Teruel +the_dalles;The Dalles +thessaloniki;Thessaloniki +thurso;Thurso +timisoara;Timişoara +tonopah;Tonopah +torino;Torino +tornio;Tornio +torshavn;Tórshavn +toulouse;Toulouse +travemunde;Travemünde +trelleborg;Trelleborg +trieste;Trieste +trinity;Trinity +trnava;Trnava +trondheim;Trondheim +truckee;Truckee +truckstope45;Haverslev +tucson;Tucson +tucumcari;Tucumcari +turku;Turku +uelzen;Uelzen +ukiah;Ukiah +ukmerge;Ukmergė +ullapool;Ullapool +ulm;Ulm +umea;Umeå +uppsala;Uppsala +utena;Utena +utsjoki;Utsjoki +uzhhorod;Uzhhorod +vaasa;Vaasa +vaduz;Vaduz +valencia;Valencia +valladolid;Valladolid +valmiera;Valmiera +vandellos;Vandellòs +vantaa;Vantaa +varkaus;Varkaus +varna;Varna +vasaros;Vásárosnamény +vasteraas;Västerås +vaxjo;Växjö +veli_tarnovo;Veliko Tarnovo +venezia;Venezia +ventspils;Ventspils +verkhnetulom;Verkhnetulomsky +verona;Verona +vestmann;Vestmannaeyjar +viborg;Viborg +vidin;Vidin +vigo;Vigo +viitasaari;Viitasaari +vik;Vík í Mýrdal +villarreal;Villarreal +vilnius;Vilnius +vinaros;Vinaròs +visby;Visby +vranje;Vranje +vyborg;Vyborg +walcz;Wałcz +warszawa;Warszawa +werlte;Werlte +wexford;Wexford +wick;Wick +wien;Wien +wiesbaden;Wiesbaden +winnemucca;Winnemucca +wroclaw;Wrocław +ystad;Ystad +yuma;Yuma +zadar;Zadar +zagreb;Zagreb +zamosc;Zamość +zaragoza;Zaragoza +zgierz;Zgierz +zgorzelec;Zgorzelec +zrenjanin;Zrenjanin +zurich;Zürich +zuta2;Žuta Lokva +zuta;Žuta Lokva +zwolle;Zwolle +abdolhaqq; +abeche; +achinsk; +adana; +adre; +aerotb; +afula; +afyon; +akko; +aksaray; +akshat; +aktau; +aktobe; +akyar; +alakurtti_rm; +alanya; +albergaria; +aldan; +alehovshina; +aleisk; +alga; +alkarak; +almetevsk; +almetevsk2; +alnukhib; +alqaim; +alqatrun; +alta; +alubayyid; +amman; +amstetten; +ancara; +andalsnes; +andkhoy; +anklam; +antakya; +antalya; +antracit; +antrim; +apatity_rm; +aprilia; +aqaba; +argayash; +arsk; +artvin; +arxangelsk; +arzamas16; +asbest; +asele; +asha; +ashdod; +ashgabat; +ashkelon; +atiabroki; +atyrau; +aurillac; +aydin; +baalbek; +babruysk; +baherden; +baiam; +baiji; +baikalsk; +baku; +balikesir; +balivanich; +balkanabat; +ballangen; +ballymena; +balt; +bandirma; +banja_luka; +banjul; +bar; +barabinsk; +baranovichi; +bardufoss; +barkhatovo; +barnaul; +barra_afro; +bartin; +bashtanka; +batsfjord; +batum; +bavly; +bayburt; +baysun; +bbiala; +bechet; +beersheva; +beirut; +belcity; +belokurikha; +beloretsk; +beloyarskiy; +berdsk; +berduzhie; +berdy; +berezovsky; +berlevag; +bethlehem; +betshean; +beyneu; +bidjovagge; +bignona; +bihac; +bijelo_polje; +bilaterca; +birobizhan; +bischofsh; +bishkek; +biysk; +bjborgholm; +bjbyxelkrok; +bjfaaro; +bjfaarosund; +bjgaardby; +bjhemse; +bjhoburg; +bjklintehamn; +bjljugarn; +bjloettorp; +bjottenby; +bjpalmelund; +bjslite; +bjvisby; +blagoevgrad; +bochkaria; +bodo; +bodrum; +bogdanovich; +boksitogorsk; +bolotnoye; +bolu; +borisoglebsk; +borlange; +botos; +bourg; +brae; +brect; +brikama; +brindisi; +bryansk; +bucanskoe; +bugulma; +bukhara; +bursa; +burush; +buzau; +bwiam; +byblos; +byelgorsk; +cala_en_b; +canakkale; +cardedu; +cernaut; +cernihiv; +cernobil; +ceuta; +chaman; +chastoozerie; +chelm; +chelyabinsk; +chemnitz; +cherepanovo; +cherepovec; +cherk; +chernyshevsk; +chervishevo; +chisina; +chistopol; +chita; +chongju; +chulman; +compostela; +contreras; +coquelles; +corum; +crotone; +dahab; +dalian; +dalniechersk; +damascus; +damietta; +dandong; +darautkgn; +darvaza; +dasoguz; +dax; +delaram; +denizli; +denov; +deraa; +derbent; +derbentr; +dimona; +djermaya; +dnipro; +dobrich; +domat; +donesk; +dorotea; +dossor; +doubagos; +dps10; +dps11; +dps12; +dps16; +dps17; +dps18; +dps19; +dps2; +dps20; +dps21; +dps23; +dps24; +dps25; +dps26; +dps28; +dps3; +dps4; +dps5; +dps6; +dps7; +dps8; +dps9; +dubrovnik; +dudinka; +durres; +dushanbe; +dzhiland; +eilat; +eingedi; +ekat; +elarish; +eltor; +engels; +ershov; +erzurum; +esenguly; +eskisehir; +estremoz; +evzonoi; +exeter; +faerjestaden; +falun; +fashir; +fatick; +fauske; +faya; +feodosia; +ferizli; +ferrandina; +ferrara; +fethiye; +fier; +finnsnes; +focsani; +foix; +formachevo; +fotokol; +frodsba; +galatone; +gambaru; +garabogaz; +garpsdalur; +gay; +gaza; +gence; +geneina; +geta; +giurgi; +gloup; +glubokoe; +godby; +golishmanovo; +gomel; +gorgan; +gornoaltaysk; +gostynin; +goyang; +granville; +grodno; +grong; +grutness; +gubkinskii; +gulbene; +gunjur; +gutcher; +guzar; +haapsalu; +hadera; +haditha; +haifa; +hairatan; +hanti; +harjg; +herat; +herzliya; +heysham; +hit; +hmbg_w; +holmogorj; +hopa; +horei; +husavik; +hvalba; +ialta; +ijma; +incheon; +inderborsky; +inta; +iqaluit; +irbid; +irkutsk; +isetskoe; +ishim; +ishim2; +isparta; +isyang; +itorqomt; +ivan; +izmir; +izra; +jankoi; +jasliq; +jerash; +jericho; +jerusalem; +jihlava; +jurmala; +kaechon; +kaesong; +kalachinsk; +kaluga; +kamenskur; +kandahar; +kandalrm; +kandyagash; +kansk; +karabalyk; +karabuk; +karabutak; +karakaj; +karakalp; +karakul; +karang; +karasjok; +kardla; +karesuando; +kargapolie; +kargopol; +kas; +kassala; +kastamonu; +kaustinen; +kautokeino; +kayseri; +kazan; +kecskemet; +kem; +kerci; +kerson; +kgjalalbd; +kgmanas; +kgosh; +khabarovsk; +kharkiv; +khilok; +khmeln; +kholm; +khromtau; +kiev; +kilkenny; +kineshma; +kingisepp; +kirikkale; +kirishi; +kirov_rp; +kirovsk_rm1; +kjollefjord; +klin; +kobda; +kogon; +kola_rm; +kolomna; +kolpino; +komotini; +komsomolabad; +koneurgenc; +konotop; +konya; +koper; +korday; +korostenn; +koson; +kostanay; +kosti; +kotlas; +kousseri; +kovell; +kovrov; +koycegiz; +koytendag; +kramatorsk; +krasnbog; +krasnoslob; +krasnoyarsk; +krasnystaw; +kreme; +kristiansund; +kropy; +krupets; +kryvy; +kshmona; +kuchlak; +kulsari; +kulusuk; +kuressaare; +kurgan; +kursk; +kutahya; +kutaisi; +kuummiit; +kyemerovo; +kyrkkyz; +kytmanovo; +labit; +laishevo; +lakselv; +latakia; +laval; +lebesby; +lecce; +lempdes; +leoben; +lerwick; +levinskie; +lida; +linevo; +lisakovsk; +llivia; +lochboisdale; +lopra; +lubim; +lubni; +lugan; +luki; +lulea; +luttsk; +lyviv; +maan; +macon; +madaba; +madina_ba; +mafraq; +magnitogorsk; +makat; +makhachkalar; +makushino; +mamontovo; +mangystau; +manisa; +manosque; +mariinsk; +mariupo; +marytm; +massaguet; +massakory; +medved; +mehamn; +melilla; +melitopol; +menorca; +mersin; +meymaneh; +miass; +miasskoe; +michalovce; +mid_yell; +minsk; +mirni; +mishkino; +mitzpe; +moerbylaanga; +mogilev; +mogocha; +mohamqol; +moirana; +molde; +moncheg_rm; +montalto; +moscow; +mosjoen; +mostar; +mozir; +mstislavl; +mudanjiang; +mugla; +mukac; +mukur; +mulhouse; +muonio; +muravlenko; +murghab; +murmansk_rm; +musbagh; +mykol; +nabatieh; +nadim; +nahud; +nampo; +namsskogan; +nanortalik; +narj_mar; +naroulia; +narvik; +nazareth; +ndjamena; +netanya; +nevel; +newry; +ngoura; +niksic; +nimes; +nizhneudinsk; +nordurfjord; +norilsk; +norwich; +novak; +novgorod; +novi_sad; +novo_mesto; +novoaltaysk; +novobruetsky; +novogradd; +novomosk_rp; +novomoskovsk; +novosibirsk; +novotroitsk; +nowajgorod; +nuuk; +obninsk; +oboyan; +odessa; +oktyabrskiy; +okunev; +olafsvik; +olot; +omsk; +onega; +ordu; +orel; +orsha; +orsk; +osmaniye; +osta; +ostashkov; +oumhadjer; +ozerni; +paamiut; +paju; +palma; +passi; +pello; +penza; +pervom; +pesaro; +petrozavodsk; +petuhovo; +peylecha; +piacenza; +pikalevo; +pinsk; +piotrkowt; +planoviy; +pleseck; +ploiest; +podgorica; +pole; +polotsk; +poltava; +pontedera; +porkeri; +porkhov; +port_vendres; +portotorres; +portsaid; +portsudan; +potapovo; +poti; +priozersk; +pristina; +pyongyang; +pyshma; +pzabai; +qadarif; +qalenaslam; +qaqortoq; +qarshi; +qaryat; +qorakol; +quetta; +quissac; +rabak; +rakvere; +ramallah; +razmetelevo; +rgev; +ribnita; +rishon; +rivnne; +rodez; +roslavl; +rubtsovsk; +rudnyy; +rushon; +rutba; +ruwaished; +saalfelden; +sabha; +safawi; +saghirdasht; +saint_pier; +saiotes; +sakarya; +salavat; +salehard; +samsun; +sanamayn; +sandness; +sandur; +sandvik; +sandviken; +sarajevo; +saratov; +sarni; +sarytash; +savonlinna; +sayda; +segezha_rm; +seilhac; +seinajoki; +sennar; +seoul; +serdartm; +serhetabat; +serrekunda; +serres; +setermoen; +sevas; +severodvinsk; +shadrinsk; +shaksha; +shepe; +sherabad; +shetpe; +shimanovsk; +shubarkuduk; +shumen; +shumikha; +sibai; +siena; +sighet; +siktivkar; +silifke; +silistr; +sim; +simfer; +sinkat; +sinopp; +sinuiju; +siracusa; +sivas; +skopun; +skovorodino; +slonim; +sluck; +smolensk; +smolenskoye; +sockhumi; +soltau; +songkhla; +sortavala; +soviet; +spask_dalnii; +spec; +ssheikh; +stasjon_e; +stcath; +stepanovo; +sterlitamak; +stockerau; +storslett; +stpeterport; +stroitel; +stromsund; +stry; +stvictor; +stykkisholm; +suakin; +suceava; +sudureyri; +sumba; +sumeg; +sumene; +sumy; +suoyarvi; +surgut_rp; +susten; +sysert; +szombathely; +taba; +talmenka; +talnakh; +talsi; +taman; +tambov; +tartous; +tasiilaq; +tasiusaq; +taurage; +tayshet; +tbilisi; +tejen; +telaviv; +temir; +temirbek; +tendali; +termez; +terno; +tgjiu; +thorlakshofn; +tiberias; +tihvin; +tirana; +tiraspol; +tobol; +tobolsk; +toft; +tojikobod; +tokat; +tommot; +tonghua; +tosno; +trabzon; +tragliatella; +trestina; +tripoli; +tripolilb; +trofors; +troitsk; +tromso; +trongisva; +troyeb; +tula; +tulgan; +tumen; +turkmenabat; +turkmenbashi; +turysh; +tuzla; +tver; +tynda; +tyr; +tyukalinsk; +ufa; +ugorsk; +uholovo; +ukolok; +ulanude; +ulsta; +ulugqat; +ulyoty; +uman; +uralsk; +urengoi; +urgaza; +uruzan; +usak; +ussuriysk; +ust_usa; +ustcil; +ustkatav; +uxta; +uzgor; +uzhnouralsk; +v1; +v10; +v12; +v13; +v14; +v15; +v2; +v6; +v7; +v8; +v9; +vadso; +vagur; +valcea; +valday; +valenciennes; +valga; +valka; +valletta; +vannas; +vansbro; +vardo; +varmahlid; +velig; +velik; +verdalsora; +verhneuralsk; +vevelstad; +vhavn; +villars; +vinnicy; +vinny; +vitebsk; +vladyvostok; +vlore; +volgograd; +volhov_rm; +volkovysk; +volochyok; +vologda; +volokolamsk; +volzhskiy; +vorkuta; +voronezh; +vozne; +vuktil; +vyazma; +wadibanda; +wadimadani; +wadowice; +waterford; +witegra; +wuqia; +xacmaza; +yevlax; +ylivieska; +yozgat; +yukhnov; +zahle; +zappo; +zarinsk; +zarka; +zatobolsk; +zelenoborsky; +zelenogradsk; +zenica; +zhanaozen; +zhympity; +zitomir; +zlatoust; +zongu; +zouar; +zugdidi; +zvolen; \ No newline at end of file diff --git a/TS SE Tool/lang/Default/companies_translate.txt b/TS SE Tool/lang/Default/companies_translate.txt new file mode 100644 index 00000000..f9eca744 --- /dev/null +++ b/TS SE Tool/lang/Default/companies_translate.txt @@ -0,0 +1,883 @@ +[Default] ++all;All +42p_print;42 Print +aaa;AA - Auto di Alonso +acc;ACC +aci;ACI +aerobalt;AeroBaltica +aerobalt_ru;AeroBaltica (ru) +agrominta;Agrominta UAB (Plants) +agrominta_a;Agrominta UAB (Animals) +agronord;AgroNord +aport_abq;ABQ Cargo Center +aport_an124;AN-124 +aport_pcc;Portland Cargo Central +aport_phx;Phoenix Freight +aria_fd_albg;Aria (Aalborg) +aria_fd_esbj;Aria (Esbjerg) +aria_fd_jnpg;Aria (Jönköping) +aria_fd_trbg;Aria (Trelleborg) +ateria;Ateria +avs_met_scr;Avalanche Steel +avs_met_sml;Avalanche Steel +baltomors_ru;Baltomorsk (ru) +baltomorsk;Baltomorsk +batisse_base;Bâtisse (Base) +batisse_hs;Bâtisse +batisse_road;Bâtisse (Road work) +batisse_wind;Bâtisse (Wind turbine) +bcp;BCP +bhb_raffin;BHB - La Raffinerie +bhv;BHV +bit_rd_grg;Bitumen (Garage) +bit_rd_svc;Bitumen (Service) +bit_rd_wrk;Bitumen (Road work) +bjork;BJÖRK +blt;BLT +blt_ru;BLT (ru) +blt_yacht;Balteus Yachts +blt_yacht_ru;Balteus Yachts (ru) +bltmetal;Baltic Metallurgy +bltmetal_ru;Baltic Metallurgy (ru) +bn_farm;Bushnell Farms +boisserie;BOISSERIE J-P +c_navale;Cantiere Navale +cargotras;Cargotras +cemelt_bas;Cemeltex (Foundation pit) +cemelt_fl_ru;Cemeltex (House) (ru) +cemelt_fla;Cemeltex (House) +cemelt_hal;Cemeltex (Hall) +cemelt_win;Cemeltex (Wind turbine) +cesare_smar;Cesare Supermercato +cha_el_mkt;Charged (Market) +cha_el_whs;Charged (Warehouse) +chimi;Chimi +chm_che_plnt;Chemso Ltd. (Plant) +chm_che_str;Chemso Ltd. (Str) +cm_min_plnt;Coastline Mining (Plant) +cm_min_qry;Coastline Mining (Quarry) +cm_min_str;Coastline Mining (Str) +cnp;CNP +comoto;Comoto +cont_port;Container port +cont_port_fr;Container port +cont_port_it;Container port +cont_port_ru;Container port +costruzi_bas;Costruzione di Edifici +costruzi_fla;Costruzione di Edifici (House) +costruzi_hal;Costruzione di Edifici (Hall) +costruzi_win;Costruzione di Edifici (Wind turbine) +dans_jardin;Dans le Jardin +dg_wd_hrv;Deepgrove (Wood harvest) +dg_wd_saw1;Deepgrove (Sawmill 2) +dg_wd_saw;Deepgrove (Sawmill 1) +domdepo;DomDepo +domdepo_ru;DomDepo (ru) +drekkar;Drekkar Trans +du_farm;Darchelle Uzau +eco;ÉCO +ed_mkt;Eddy's +ee_paper;Estonian Paper AS +egres;Maatila Egres +eolo_lines;Eolo Lines +euroacres;eAcres +eurogoodies;Euro Goodies +eviksi;Evikši ZS (Plants) +eviksi_a;Evikši ZS (Animals) +exomar;Exomar +fattoria_f;Fattoria Felice +fcp;FCP +fintyre;Finnish Tyres +fintyre_ru;Finnish Tyres (ru) +fle;FLE +fui;FUI SpA +gal_oil_gst;Gallon Oil (Gas station) +gal_oil_ref;Gallon Oil (Refinery) +gal_oil_str;Gallon Oil (Str) +gallia_ferry;Gallia Ferries +globeur;Globeur +gm_chs_plnt;Global Mills +gm_food_plnt;Global Mills (Food plant) +gnt;GNT +gomme_monde;Gomme du Monde +hds_met_shp;Haddock Shipyard +hf_wd_pln;Heartwood Furniture +hms_con_svc;HMS Machinery +hs_mkt;Home Store (Market) +hs_whs;Home Store (Warehouse) +huilant;Huilant +ibp;IBP +ika_bohag;IKA Bohag +ika_ru;IKA (ru) +ini;Ini +itcc;ITCC +kaarfor;Kaarfor +kamen_ru;Staryj kamen +kivi;Vanha Kivi +konstnr;KN KonstNorr (Foundation pit) +konstnr_br;KN KonstNorr (Bridge) +konstnr_hs;KN KonstNorr (House) +konstnr_wind;KN KonstNorr (Wind turbine) +ladoga;Ladoga Auto +ladoga_ru;Ladoga Auto (ru) +lateds;Lateds +libellula;Libellula +lintukainen;Lintukainen Oy +lisette_log;Lisette Logistics +lkwlog;LKW +lvr;Latvijas Vagonu Rūpnīca +marina;Marina bay +marina_fr;Marina bay +marina_it;Marina bay +marmo;Marmo SpA +mcs_con_sit;Mud Creek slide +ms_stein;MS Stein +mvm_carriere;MVM carrière +nbfc;NBFC +nch;NCH +nch_ru;NCH (ru) +nord_crown;Nordic Crown +nord_sten;Nordic Stenbrott +norr_food;Norrfood +norrsken;NorrskeN +nos_pat_brg;Nos Pâturages () +nos_pat_cf;Nos Pâturages () +nos_pat_lhv;Nos Pâturages () +nosko;Noskonitta +ns_chem;NS Chemicals +ns_chem_ru;NS Chemicals (ru) +ns_oil;NS Oil +ns_oil_ru;NS Oil (ru) +nucleon;Nucléon +oak_port;Oakland Shippers +oh_con_hom;Olthon Homes +onnelik;Õnnelik talu (Plants) +onnelik_a;Õnnelik talu (Animals) +piac;PIAC +pk_medved_ru;PK Medved +pnp_wd_pln;Page & Price Paper +pns_con_grg;Plaster & Sons (Garage) +pns_con_sit1;Plaster & Sons (2) +pns_con_sit2;Plaster & Sons (3) +pns_con_sit3;Plaster & Sons (4) +pns_con_sit;Plaster & Sons (1) +pns_con_whs;Plaster & Sons (Warehouse) +polar_fish;Polar fish +polarislines;Polaris Lines +posped;Posped +pp_chimica;PP Chimica Italia +quadrelli;Quadrelli SpA +quarry;Stein Bruch +radus;Radus +radus_ru;Radus (ru) +re_train;Rail Export +renar;Renar Logistik +renat;Renat +rosmark;Rosmark +rosmark_ru;Rosmark (ru) +sag_tre;SAG&TRE sawmill +sal;S.A.L. S.R.L. +sal_fi;SAL +sanbuilders;SanBuilders +sc_frm;Sunshine Crops (Farm) +sc_frm_grg;Sunshine Crops (Garage) +scania_dlr;Scania (Dealer) +scania_fac;Scania (Factory) +sellplan;SellPlan +severoatm_ru;Severoatom (ru) +sf_port;Port of SF +sg_whs;SellGoods +skoda;Skout +spinelli;Spinelli +st_met_whs;Steeler (Warehouse) +st_met_wrk;Steeler (Metal works) +stokes;Stokes +subse;Subse +suprema;Suprema +suprema_ru;Suprema (ru) +te_logistica;TE Logistica +tesore_gust;Tesoro Gustoso +tid_mkt;Tidbit +tradeaux;TradeAUX +trameri;Trameri +transinet;Transinet +tras_med;Trasporti Mediterraneo +tree_et;TREE-ET wood +ukko;UKKO Voima +viljo_paper;Viljo paperitehdas Oy +viln_paper;VPF Vilniaus Popieriaus Fabrikas +vitas_pwr;Vitas Power +vm_car_dlr;Voltison (Dealer) +vm_car_pln;Voltison (Plant) +vm_car_whs;Voltison (Warehouse) +voitureux;Voitureux +volvo_dlr;Volvo (Dealer) +volvo_fac;Volvo (Factory) +vpc;VPC +wal_food_mkt;Wallbert (Market) +wal_food_whs;Wallbert (Warehouse) +wal_mkt;Wallbert (Market) +wal_whs;Wallbert (Warehouse) +wgcc;WGCC +wilnet_trans;Wilnet Transport +zelenye;Zelenye polya (Plants) +zelenye_a;Zelenye polya (Animals) +agregados; +ai; +app; +aria_food; +balkan_loco; +baltrak; +brawen; +cantera; +canteras_ds; +casa_olivera; +cesta_sl; +cgla; +cortica; +dfh; +dobr_ferm_bg; +dulcis; +elcano_fla; +elcano_hms; +engeron; +eppa; +fallow; +han_expo; +huerta; +iberatomica; +imp_otel; +itcc_scrap; +kathode; +kolico; +krone; +krone_t; +lavish_food; +log_atlan; +lognstick; +low_field; +muromec; +nos_pat; +ocean_sol; +ortiz; +rimaf; +rock_eater; +rt_log; +rump; +sanbuild_cem; +sanbuild_hms; +scs_paper; +sirin; +sporklift; +st_roza_bg; +steinbr_str; +supercesta; +tdc_auto; +timberturtle; +tm_istanbul; +trainfoundry; +trans_cab; +tree_et_log; +ts_atlas; +ttk_bg; +vitas_pwr_co; +shuttle; +bn_live_auc; +dc_car_dlr; +fb_farm_pln; +kw_trk_dlr; +mon_farm; +pt_trk_dlr; +usb_food_pln; +ws_trk_dlr; +100_zap; +10reg; +1kea; +able; +adrica; +aero_elblag; +afghanaccu; +afghannacc; +afrofood; +agro; +agrozaural; +agsfrasers; +airkoryo; +airliqui; +albertheijn; +aldi_es; +aldipt; +aldn; +alds; +alko1000; +almaz_ess; +almi; +alsharq; +alstom; +altaykoksalt; +aluprof; +aluxion; +aluxion_str; +anklam_flug; +aquael; +arak_hofer; +arak_lidl; +arcidom; +aria_fd_hmse; +aria_fd_ltrp; +aria_nordic; +asbestqsum; +atransvt; +atransvtc; +atriaeesti; +auchan; +auchansum; +audi; +avtoservis; +aziyaula; +bala; +balkanship; +banjul_ar; +barenc; +batisse; +baturitm; +bauhaus; +baza_st; +bcp_ru; +bct; +belarustorg; +belbumprom; +beldrev; +belfert; +belhotel; +belintertr; +bellesprom; +belneft; +belneft_zap1; +belneft_zap2; +bertling_log; +betunia; +beyneu_air; +bgdkomsum; +biedronka; +biedronka_in; +bilka; +biltema; +bim_in; +bl1; +bobr_myaso; +bochkari; +boliden; +bondi; +bonus; +bosfir; +bp_pt; +bp_retail; +breger; +budimex; +budowa; +buksir; +cafe_ess; +captiglo; +caquila; +cargoexpress; +carref; +castorama; +castorama_in; +ccarrion; +ccg_bas; +ccg_fla; +ccg_hal; +cecpoil; +cegielka; +cemex; +chadcbt; +chadsht; +chinapetraf; +chongfarm; +circlek; +citro; +citronex; +cn_tesco; +cn_xinfood; +cnp_str; +cnp_well; +coca_polar; +coin; +compozit; +continental; +coop; +crazy; +creamery; +crnodrvo; +crnodrvo_log; +ctt; +cup; +daf_dlr; +daf_fac; +daf_rus; +dagli; +dalgroup; +decathlonpt; +dellinesum; +depo; +deres_auto; +dhl; +dhl_pt; +dia; +diamant; +dino; +dixie; +dobrocensum; +domdepo2; +dpd_pt; +dragonoil; +dreams; +duken_kz; +dunavia; +effo; +egyptairc; +eimskip; +eldoha; +eldorado; +eleveur; +elgiganten; +eliassons; +enco; +eni; +eroski; +esso; +eumefa; +euroacres_ru; +eurogoodi_ru; +euroopt; +europa; +europcar; +eurotunnel_1; +eurotunnel_2; +expert; +expo; +fandwhr; +fca; +fermier; +ferra; +finist; +fle_air; +forfarmers; +forsikom; +forum; +fuel_depot; +gallia_f_in; +galp_pt; +garaz24sum; +gardshorn; +gasprom; +gazprom_zap; +gazpromns; +geonjaejig; +gkz; +glavstroiy; +gmkk; +gnt_auto; +gospodarstwo; +gpn_k_sum; +gpn_t_sum; +granit; +green; +grm; +handlopex; +hawesmarket; +hb_grandi; +heidel_kz; +hekla; +helios; +henrydom; +hepcarec; +homebase; +hyundaikr; +iav; +ice_gla; +icelandair; +ikea; +ikea_dist_pl; +ikea_pl; +ikeakorea; +inter; +interlam; +inves1; +invest; +ip; +ir_igsgrp; +ir_irrea; +ir_khodro; +ir_takseez; +isavia; +isrfish; +isrfood; +istros_av; +itcc_ru; +iteco; +jadranska1; +jadranska2; +jastuk; +jewson; +jubiley; +jumbo; +kaarfor_in; +kaarfor2; +kaechonds; +kaesongir; +kamiltm; +karuzela; +kaufland; +kazpost; +kg_aricargo; +kg_ihlas; +kg_narodni; +kg_texha; +kg_triod; +kielce_expo; +kirpzavod; +kita; +kiwi; +klasmann_d; +komfort; +konzum; +koreanair; +korona; +kp_taedong; +kr_aact; +kr_costco; +kr_kiamotor; +kr_lgelec; +kr_motorola; +kr_samsung; +krion; +kronan; +ksmsum; +kublei; +kuenenagelll; +kumetsum; +kwangbok; +ladasum; +lafarge; +lafarge_t; +lafermedp; +lagmarket; +landsvirkjun; +larus; +leclerc; +lentasum; +lermerlsum; +leroymerlin; +leroypt; +lgdisplay; +lidl; +lidl_centrum; +lidlpt; +likmerge; +ljug_handel; +lkw_walter; +lkwlog_ru; +lobo; +loftorka; +logistanaf; +logitrans; +lotuss; +lukoil_zap; +luksum; +lyalitrans; +m__prostor; +m_airoport; +m_avtodor; +m_bazaazs; +m_bazavmf; +m_elev; +m_ferma; +m_kolhoz; +m_les; +m_les1; +m_mag_avto; +m_mag5; +m_magnit; +m_meatg; +m_mebel; +m_musor; +m_oaoluk; +m_obolsnab; +m_oboron; +m_ovochi; +m_polar_fish; +m_port; +m_prostor; +m_sklad; +m_spirt; +m_su155; +m_terminal; +m_torgr; +m_voin; +m_voins; +m_voinsr; +m_xleb; +m1; +magnit; +magniti; +magnitsum; +makro; +mann_wind; +mannvit; +marz; +maspex; +maxima; +maxmat; +mazet; +mb_rus; +mcdonalds; +mediaexpert; +mediamarkt; +mega1; +memaar; +menologstm; +mercadona; +mercedesbenz; +mercesiegmar; +metal; +metro; +metrosum; +mgruzsum; +minimarket3; +minimarket5; +minimarket6; +minimarket7; +minsk_myaso; +mlekpol; +mmk; +mostostal; +mts_tel_tm; +n_nickel; +n_nickel2; +n_nickel3; +n1; +nacfkor; +nampooil; +nampoship; +nbfc_ru; +nd; +neftek; +netto; +nordural; +norr_food2; +novoneft; +ns_oil_r1; +nuuk_piler; +nuuk_recy; +obi; +oblavtotrans; +obltorgsoyuz; +obois; +oboisb; +oil_gas_ess; +olis; +origine; +orkan; +orlen_retail; +orskbecon; +osobino; +ot_port; +othmansd; +ozonsum; +palazmetal; +panpor; +peksum; +pen_auto_es; +petro; +peugeot1; +peugeot2; +pfi; +pingodoce; +pk_alfatah; +pk_fourbros; +pk_hcsconst; +pk_ibrahim; +pk_psoil; +pk_qse; +pkn_orlen; +plastimet; +pochtasum; +podlogi_elk; +polar_fish2; +polar_oil; +polarisline1; +port_blond; +port_bolun; +port_isa; +port_sudavik; +port_sudur; +posped_ru; +prisma; +psa_ant; +pyatsum; +pygumfact; +q8; +qazaqgaz; +raben; +rdk_invest; +recheio; +repsol_pt; +respect; +rewe; +rimi; +rmk; +roboty; +rock_eat_str; +roex_trans; +royal_arctic; +rybackie_elk; +saab; +sah_afurdir; +sainsbury; +salag; +salstek; +samkaup; +samskip; +savushkin; +sawmillforst; +sazadatm; +sbhsum; +sbhsum2; +scania_rus; +sdalsayl; +sdpillog; +sdpt; +seaprts; +seedvault; +seljaland; +selpo; +semkontinent; +seopyong; +severmin; +sfexpress; +sgautogrp; +shadmbsum; +shate_m; +shawahig; +shell; +shell_fac; +sildarvinn; +simoes; +sinuijuport; +sjcosmofy; +skn; +slava; +sllavia; +smilesum; +smyril; +snb; +snl; +sogeasat; +soteltchad; +sovavto; +specstroiy; +star_oil; +stroirosgas; +sudagarlic; +supernetto; +svalsat; +syllurgy; +syschema; +szatmari; +tamoil; +taobao; +tartak; +tatneftsum; +tauekel; +tchadia; +tehmash; +temir_zholy; +tesco; +th_ptt; +timbursala; +tj_brik; +tj_cocacola; +tj_dunyo; +tj_nassoji; +tj_nilullc; +tj_rohisom; +tj_talco; +tj_tcsxpr; +tm_gov; +tm_state_uni; +tmpetrolum; +tnc; +tnl; +tomagrint; +toom; +torrestir; +total_ener; +totalaf; +toumaitch; +tow_truck; +toyota; +tradeaux_ru; +traktrans; +trameri_ru; +trans; +transafriq; +transnsum; +transwood; +tree_et_ru; +turkmenair; +turkmengaz; +turkmenrail; +tvm; +tw_pt; +tyllanal; +uadorsum; +ugcc_uz; +uko_zap; +unilevr_dist; +ur_poultry; +urpelmsum; +usaidkp; +uz_analytik; +uz_ardena; +uz_bazqorkol; +uz_bukhbzr; +uz_conch; +uz_guzormkt; +uz_indorama; +uz_marblest; +uz_neftegaz; +uz_sag; +uz_texha; +uzbek_nef; +vegagerdin; +vegagerdin_r; +velcom; +velessum; +vernsum; +vesna; +vesna_mill; +vest_port; +villco; +villco_mkt; +vilvi; +vitafoam; +vitavtociti; +volvo_rus; +vsk; +vsv; +waberers; +westtrans; +willys; +wurth; +xxxl; +yanggakdo; +yazaki; +zbyszko; +zelenye_bey; +zhenka; +zlecenie; +zlin; +zlvzsum; +zmk; \ No newline at end of file diff --git a/TS SE Tool/lang/Default/countries_translate.txt b/TS SE Tool/lang/Default/countries_translate.txt new file mode 100644 index 00000000..ae2af9e6 --- /dev/null +++ b/TS SE Tool/lang/Default/countries_translate.txt @@ -0,0 +1,68 @@ +[Default] ++all;All ++unsorted;Unsorted +austria;Austria +belgium;Belgium +bulgaria;Bulgaria +czech;Czech Republic +denmark;Denmark +estonia;Estonia +finland;Finland +france;France +germany;Germany +hungary;Hungary +italy;Italy +latvia;Latvia +lithuania;Lithuania +luxembourg;Luxembourg +netherlands;Netherlands +norway;Norway +poland;Poland +romania;Romania +russia;Russia +slovakia;Slovakia +sweden;Sweden +switzerland;Switzerland +turkey;Turkey +uk;United Kingdom +arizona;Arizona +california;California +nevada;Nevada +new_mexico;New Mexico +oregon;Oregon +utah;Utah +washington;Washington +aland;Aland Island +albania;Albania +andorra;Andora +belarus;Belarus +bosnia;Bosnia Herzegovina +croatia;Croatia +cyprus;Cyprus +faroe;Faroe Islands +georgia;Georgia +greece;Greece +iceland;Iceland +iom;Isle of Man +ireland;Ireland +jersey;Jersey +liecht;Lichtenstein +macedonia;North Macedonia +mnegro;Montenegro +moldova;Moldovia +monaco;Monaco +nireland;Northern Ireland +portugal;Portugal +serbia;Serbia +slovenia;Slovenia +spain;Spain +svalbard;Svarlbard +ukraine;Ukraine +egypt;Egypt +iraq;Iraq +israel;Israel +jordan;Jordan +lebanon;Lebanon +saudia;Saudi Arabia +syria;Syria +westbank;West Bank \ No newline at end of file diff --git a/TS SE Tool/lang/Default/lngfile.txt b/TS SE Tool/lang/Default/lngfile.txt new file mode 100644 index 00000000..4bd6e9db --- /dev/null +++ b/TS SE Tool/lang/Default/lngfile.txt @@ -0,0 +1,306 @@ +[Default] +buttonAccept;Accept +buttonAddCustomPath;Add +buttonAddUserColor;+ slot +buttonApply;Apply +buttonCancel;Cancel +buttonCargoMarketRandomizeCargoCity;Randomize Cargo list +buttonCargoMarketRandomizeCargoCompany;Randomize Cargo list +buttonCargoMarketResetCargoCity;Reset Cargo list +buttonCargoMarketResetCargoCompany;Reset Cargo list +buttonChooseFolder;Choose folder +buttonClearColor;Clear +buttonCloneProfile;Clone profile +buttonConvoyToolsGPSCurrentPositionCopy;Copy current position +buttonConvoyToolsGPSCurrentPositionPaste;Paste current position +buttonConvoyToolsGPSStoredGPSPathCopy;Copy GPS path +buttonConvoyToolsGPSStoredGPSPathPaste;Paste GPS path +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Copy truck position from multiple saves +buttonConvoyToolsGPSTruckPositionMultySavePaste;Create multiple saves with different truck positions +buttonCopy;Copy +buttonDBClear;Clear +buttonDBExport;Export +buttonDBImport;Import +buttonEdit;Edit +buttonEditCPlist;Edit list +buttonExport;Export +buttonExportSettings;Export +buttonFreightMarketAddJob;Add Job to list +buttonFreightMarketClearJobList;Clear list +buttonFreightMarketRandomizeCargo;Random +buttonImport;Import +buttonImportSettings;Import +buttonMainAddCustomFolder;Add Custom Folder +buttonMainCloseSave;Unload +buttonMainDecryptSave;Decrypt +buttonMainGameSwitchATS;ATS +buttonMainGameSwitchETS;ETS2 +buttonMainLoadSave;Load +buttonMainLoadSaveSteamCloud;Disable Steam Cloud +buttonMainWriteSave;Save +buttonOK;OK +buttonPaste;Paste +buttonPlayerLevelMaximum;MAX >> +buttonPlayerLevelMinimum;<< MIN +buttonProfilesAndSavesOpenSaveFolder;Open Folder +buttonRenameProfile;Rename profile +buttonReplaceColors;↑↑↑ Replace ↑↑↑ +buttonRestoreProfileBackup;Restore profile Backup +buttonSave;Save +buttonSelectFile;Select file ... +buttonShareTruckTruckDetailsCopy;Copy Truck Datails +buttonShareTruckTruckDetailsPaste;Paste Truck Datails +buttonShareTruckTruckPaintCopy;Copy Paint Settings +buttonShareTruckTruckPaintPaste;Paste Paint Settings +buttonShareTruckWholeTruckCopy;Copy All Truck Settings +buttonShareTruckWholeTruckPaste;Paste All Truck Settings +buttonUserColorsShareColors;Share colors +buttonUserCompanyCitiesUnVisit;Unvisit +buttonUserCompanyCitiesVisit;Visit +buttonUserCompanyDriversFire;Fire +buttonUserCompanyDriversHire;Hire +buttonUserCompanyGaragesBuy;Buy +buttonUserCompanyGaragesBuyDowngrade;Downgrade +buttonUserCompanyGaragesBuyUpgrade;Buy and Upgrade +buttonUserCompanyGaragesSell;Sell +buttonUserCompanyGaragesUpgrade;Upgrade +buttonUserTrailerSelectCurrent;Select Current Trailer +buttonUserTrailerSwitchCurrent;Set as Current Trailer +buttonUserTruckSelectCurrent;Current +buttonUserTruckSwitchCurrent;Switch current Truck to this Truck +checkBoxCreateBackup;Make backup .zip file +checkBoxFreightMarketFilterDestination;Filter +checkBoxFreightMarketFilterSource;Filter +checkBoxFreightMarketRandomDest;RND +checkBoxFullCloning;Full save cloning +checkBoxMutiCloning;Multiple clones +checkBoxProfilesAndSavesProfileBackups;Backups +contextMenuStripCompanyDriversEdit;Edit +contextMenuStripCompanyDriversFire;Fire +contextMenuStripCompanyDriversHire;Hire +contextMenuStripFreightMarketJobListDelete;Delete +contextMenuStripFreightMarketJobListEdit;Edit +dialogCaptionNoBackwardCompatibility;No Backward Compatibility +dialogCaptionUnsupportedVersion;Untested savefile version +dialogTextNoBackwardCompatibility;Savefile version {0} is too OLD.\r\nThis version of the program is not able to work with it.\r\n(You can decrypt save file and manually edit it at any time) +dialogTextUnsupportedVersion;Savefile version {0} was NOT TESTED.\r\nYou can proceed, but it can DAMAGE savefile AFTER SAVING.\r\nPlease use MANUAL SAVES instead of autosaves in this case!\r\n\r\nDo you want to try and LOAD THIS savefile? +error_could_not_complete_jobs_loop;Could not complete jobs loop +error_could_not_decode_file;Program was unable to decode file +error_could_not_find_file;Program was unable to find file +error_could_not_write_to_file;Program was unable to write to file +error_during_importing_db;Error during importing DataBase +error_exception;Program exception +error_file_not_decoded;File not decoded +error_file_was_modified;File was modified by the game +error_job_parameters_not_filled;Not all job parameters are filled +error_save_version_not_detected;Save file version was not detected +error_sql_exception;DataBase exception +FormAboutBox;About {0} +FormAddCustomFolder;Edit Custom folders +FormAIDriverEditor;Driver editor +FormColorPicker;Colour picker +FormLicensePlateEdit;License Plate Editor +FormProfileEditor;Profile manager +FormProfileEditorRenameCloneCloning;Cloning +FormProfileEditorRenameCloneRenaming;Renaming +FormProfileEditorSettingsImportExportExporting;Exporting from {0} +FormProfileEditorSettingsImportExportImporting;Importing to {0} +FormProgramSettings;Program Settings +FormSettings;Settings +FormShareUserColors;Share User colors +FormVehicleEditor;Vehicle Editor +groupBoxDataBase;Database +groupBoxDriverSkill;Skills +groupBoxFolderType;Folder type +groupBoxGameType;Game +groupBoxImportedColors;Imported colors +groupBoxMainProfilesAndSaves;Profiles And Saves +groupBoxOptions;Options +groupBoxProfilePlayerLevel;Player level +groupBoxProfileSkill;Skills +groupBoxProfileUserColors;User colors +groupBoxProfileUserColorsShort;User colors +groupBoxSelectFileExporting;Pack into .zip file +groupBoxSelectFileImporting;Form .zip file +groupBoxTargetProfileExporting;Put into ... +groupBoxTargetProfileImporting;Grab from ... +groupBoxUserTrailerShareTrailerSettings;Share Trailer Settings +groupBoxUserTrailerTrailer;Trailer +groupBoxUserTrailerTrailerDetails;Details +groupBoxUserTruckShareTruckSettings;Share Truck Settings +groupBoxUserTruckTruck;Truck +groupBoxUserTruckTruckDetails;Details +labelCargoMarketCity;City +labelCargoMarketCompany;Company +labelCargoMarketSource;Source +labelCheckUpdatesOnStartup;Check updates on startup +labelCity;city +labelCountry;Country +labelCurrency;Currency +labelDayShort;D +labelDistance;Distance +labelDownloadDescription;You can download latest version from +labelDriverName;Driver name: +labelFreightMarketCargo;Cargo +labelFreightMarketCity;City +labelFreightMarketCompany;Company +labelFreightMarketCompanyF;Company +labelFreightMarketCountryF;Country +labelFreightMarketDestination;Destination +labelFreightMarketDistance;Total path length: +labelFreightMarketFilterMain;Filter +labelFreightMarketSource;Source +labelFreightMarketTrailer;Trailer +labelFreightMarketUrgency;Urgency +labelHourShort;h +labelHowtoDescription;How to use it +labelJobPickupTime;Cargo relevance time +labelLicensePlate;License plate +labelLoopEvery;Loop every +labelnew;new +labelNewNameCloning;Name(s) for cloned profile(s): +labelNewNameRenaming;New profile name: +labelold;old +labelOr;- OR - +labelor;or +labelProfileName;Profile name: +labelProfileSkill0;ADR +labelProfileSkill1;Long Distance +labelProfileSkill2;High Value Cargo +labelProfileSkill3;Fragile Cargo +labelProfileSkill4;Just-In-Time Delivery +labelProfileSkill5;Ecodriving +labelSettings;Settings +labelShowSplashOnStartup;Show splash screen on startup +labelSupportedGameVersions;Supported game versions +labelTrailerPartNameBody;Body +labelTrailerPartNameCargo;Cargo +labelTrailerPartNameChassis;Chassis +labelTrailerPartNameWheels;Wheels +labelTruckDetailsFuel;Fuel +labelTruckPartNameCabin;Cabin +labelTruckPartNameChassis;Chassis +labelTruckPartNameEngine;Engine +labelTruckPartNameTransmission;Transmission +labelTruckPartNameWheels;Wheels +labelUserCompanyCompanyName;Company name +labelUserCompanyDrivers;Drivers +labelUserCompanyGarages;Garages +labelUserCompanyHQcity;HQ city +labelUserCompanyMoneyAccount;Account money +labelUserCompanyVisitedCities;Visited cities +labelUserTrailerLicensePlate;Licence plate +labelUserTruckLicensePlate;Licence plate +labelVersion;Version {0} (alpha) +labelWeight;Weight +message_database_created;Database structure created. +message_database_missing_creating_db;Database file is missing. Creating Database... +message_database_missing_creating_db_structure;Database file is missing. Creating Database structure... +message_decoding_save_file;Decoding save file... +message_exporting_database;Exporting DataBase... +message_file_saved;File saved. +message_importing_database;Importing DataBase... +message_loading_save_file;Loading save file... +message_no_matching_cities;No Cities matching filter settings. +message_operation_finished;Task complete. +message_preparing_data;Preparing data... +message_saving_file;Saving file... +radioButtonProfileFolderType;Profile folder +radioButtonRootFolderType;Root folder +radioButtonSaveFolderType;Save folder +radioButtonUnknownFolderType;Unknown +stringCargoContainer;(Container) +stringDriverShort;D +stringFormAboutBoxtextBoxDescription;This program created by\r\nLIPtoH <{0}>\r\n{1}\r\n\r\nTools and projects used to create this tool:\r\n\r\n +stringKilograms;Kilograms +stringKilometers;Kilometers +stringKilometersShort;km +stringLarge;Large +stringMiles;Miles +stringMilesShort;mi +stringNot owned;Not owned +stringPounds;Pounds +stringSmall;Small +stringTiny;Tiny +stringTrailerShort;T +stringVehicleShort;V +stringQuickJobTruckShort;Q +stringUsersTruckShort;U +stringInUse;In use +stringItemMissing;-- NONE -- +stringBodyType;{0} +stringAxlesCount;Axles - {0} +stringChainType;{0} +tabPageCargoMarket;Cargo Market +tabPageCompany;Company +tabPageConvoyTools;Convoy Tools +tabPageDrivers;Drivers +tabPageFreightMarket;Freight Market +tabPageGarages;Garages +tabPageProfile;Profile +tabPageTrailer;Trailer +tabPageTruck;Truck +tabPageVisitedCities;Visited cities +toolStripMenuItemAbout;About +toolStripMenuItemCheckUpdates;Check for updates +toolStripMenuItemCreateTrFile;Make translation +toolStripMenuItemDownload;Download +toolStripMenuItemExit;Exit +toolStripMenuItemHelp;Help +toolStripMenuItemLanguage;Language +toolStripMenuItemLocalPDF;Local PDF file +toolStripMenuItemProgram;Program +toolStripMenuItemProgramSettings;Program settings +toolStripMenuItemSettings;Settings +toolStripMenuItemTutorial;How to use it +toolStripMenuItemYouTubeVideo;YouTube Video +tooltipbuttonADR0;Explosives +tooltipbuttonADR1;Gases +tooltipbuttonADR2;Flammable liquids +tooltipbuttonADR3;Flammable solids +tooltipbuttonADR4;Toxic and infectious substances +tooltipbuttonADR5;Corrosive substances +tooltipbuttonPlayerLevelMaximum;150 level +tooltipbuttonPlayerLevelMinimum;0 level +tooltipbuttonProfilesAndSavesEditProfile;Profile manager +tooltipbuttonProfilesAndSavesRefreshAll;Refresh +tooltipbuttonProfilesAndSavesRestoreBackup;Restore from Backup +tooltipbuttonSkill;{0} level +tooltipbuttonTrailerElRepair;Repair this part +tooltipbuttonTrailerLicensePlateEdit;Edit License plate +tooltipbuttonTrailerRepair;Repair whole trailer +tooltipbuttonTruckElRepair;Repair this part +tooltipbuttonTruckLicensePlateEdit;Edit License plate +tooltipbuttonTruckReFuel;Refuel truck +tooltipbuttonTruckRepair;Repair whole truck +tooltipbuttonUserCompanyGaragesManage;Manage +tooltipcomboBoxPrevProfiles;[L] - Local saves\r\n[S] - Steam (only load)\r\n[C] - Custom +tooltiplabelJobPickupTime;How much time till cargo will disapeare from market\r\n(adds for every cargo) +tooltipprofileSkillsPanel0;ADR +tooltipprofileSkillsPanel1;Long Distance +tooltipprofileSkillsPanel2;High Value Cargo +tooltipprofileSkillsPanel3;Fragile Cargo +tooltipprofileSkillsPanel4;Just-In-Time Delivery +tooltipprofileSkillsPanel5;Ecodriving +panelShareColorsHelpDragDrop;Use [Drag & Drop] to move imported colors [One by one] or as a [Group] into the palette. +buttonUserCompanyGaragesSelectAll;Select All +buttonUserCompanyGaragesUnSelectAll;Unselect All +buttonUserCompanyDriversSelectAll;Select All +buttonUserCompanyDriversUnSelectAll;Unselect All +buttonUserCompanyCitiesSelectAll;Select All +buttonUserCompanyCitiesUnSelectAll;Unselect All +unsupportedGameVersionTitle;Unsupported {0} Version {1} +unsupportedGameVersionText;Your {0} version is currently not supported by this tool.\n\nInstalled Game Version: {1}\n\nCurrently Supported Versions: {2} +currencyEUR;Euro +currencyCHF;Swiss Franc +currencyCZK;Czech Koruna +currencyGBP;British Pound +currencyPLN;Polish Zloty +currencyHUF;Hungarian Forint +currencyDKK;Danish Krone +currencySEK;Swedish Krona +currencyNOK;Norwegian Krone +currencyRUB;Russian Ruble +currencyUSD;US Dollar +currencyCAD;Canadian Dollar +currencyMXN;Mexican Peso diff --git a/TS SE Tool/lang/Default/trailer_nameparts.txt b/TS SE Tool/lang/Default/trailer_nameparts.txt new file mode 100644 index 00000000..eb9e7cad --- /dev/null +++ b/TS SE Tool/lang/Default/trailer_nameparts.txt @@ -0,0 +1,33 @@ +#ETS2 +scs;SCS +krone;Krone +schwmuller;Schwarzmüller +#ATS +#ETS +scs_box;STD +scs_container;CNT +scs_flatbed;FLB +scs_log;LOG +krone_box_liner;Box Liner +krone_cool_liner;Cool Liner +krone_dry_liner;Dry Liner +krone_profi_liner;Profi Liner +krone_profi_liner_hd;Profi Liner HD +#ATS +scs_box;A-KRB-18 +scs_bulkfeed;A-SYK-19 +scs_chipvan;A-STP-19 +scs_container;A-KNT-19 +scs_flatbed;A-PLO-18 +scs_grainhopper;A-SYP-19 +scs_log;A-KLN-19 +#ETS +container;Container Carrier +curtainside;Curtainsider +dryvan;Dry Freighter +flatbed;Flatbed +flatbed_brck;Brick +flatbed_cont;Flatbed / Container +insulated;Insulated +log;Log +refrigerated;Refrigerated \ No newline at end of file diff --git a/TS SE Tool/lang/Default/truck_brands.txt b/TS SE Tool/lang/Default/truck_brands.txt new file mode 100644 index 00000000..2c9b659b --- /dev/null +++ b/TS SE Tool/lang/Default/truck_brands.txt @@ -0,0 +1,25 @@ +#ETS2 +daf.xf;DAF XF105 +daf.xf_euro6;DAF XF +iveco.hiway;Iveco Hi-Way +iveco.stralis;Iveco Stralis +man.tgx;MAN TGX +man.tgx_euro6;MAN TGX Euro 6 +mercedes.actros;Mercedes Actros +mercedes.actros2014;Mercedes New Actros +renault.magnum;Renault Magnum +renault.premium;Renault Premium +renault.t;Renault T +scania.r;Scania R 2009 +scania.r_2016;Scania R +scania.s_2016;Scania S +scania.streamline;Scania Streamline +volvo.fh16;Volvo FH16 2009 +volvo.fh16_2012;Volvo FH 2012 +#ATS +intnational.lonestar;International LoneStar +kenworth.t680;Kenworth T680 +kenworth.w900;Kenworth W900 +peterbilt.389;Peterbilt 389 +peterbilt.579;Peterbilt 579 +volvo.vnl;Volvo VNL \ No newline at end of file diff --git a/TS SE Tool/lang/Default/truck_models.txt b/TS SE Tool/lang/Default/truck_models.txt new file mode 100644 index 00000000..e69de29b diff --git a/TS SE Tool/lang/Default/urgency_translate.txt b/TS SE Tool/lang/Default/urgency_translate.txt new file mode 100644 index 00000000..aa4731fa --- /dev/null +++ b/TS SE Tool/lang/Default/urgency_translate.txt @@ -0,0 +1,4 @@ +[Default] +0;Standard +1;Important +2;Urgent diff --git a/TS SE Tool/lang/de-DE/flag.png b/TS SE Tool/lang/de-DE/flag.png new file mode 100644 index 00000000..9212c12f Binary files /dev/null and b/TS SE Tool/lang/de-DE/flag.png differ diff --git a/TS SE Tool/lang/de-DE/lngfile.txt b/TS SE Tool/lang/de-DE/lngfile.txt new file mode 100644 index 00000000..959888bd --- /dev/null +++ b/TS SE Tool/lang/de-DE/lngfile.txt @@ -0,0 +1,97 @@ +[de-DE] +buttonCargoMarketResetCargoCity;Reset Fracht Markt +buttonCargoMarketResetCargoCompany;Reset Fracht Markt +buttonConvoyToolsGPSStoredGPSPathCopy;GPS pfad kopieren +buttonConvoyToolsGPSStoredGPSPathPaste;GPS pfad einfügen +buttonFreightMarketClearJobList;Leere Liste +buttonFreightMarketRandomizeCargo;Zufall +buttonMainDecryptSave;Decodieren +buttonMainLoadSave;Laden +buttonMainWriteSave;Speichern +buttonProfilesAndSavesOpenSaveFolder;Öffne Ordner +buttonShareTruckTruckPaintCopy;Kopiere Farb einstelungen +buttonShareTruckTruckPaintPaste;Farbe einfügen +buttonUserColorsShareColors;Teile Farben +buttonUserCompanyCitiesUnVisit;Nicht besucht +buttonUserCompanyCitiesVisit;Besucht +buttonUserCompanyGaragesBuy;Kaufen +buttonUserCompanyGaragesBuyUpgrade;Kaufen und Upgraden +buttonUserCompanyGaragesSell;Verkaufen +buttonUserTrailerSelectCurrent;Wähle aktuellen Trailer +buttonUserTrailerSwitchCurrent;Setzte Aktuellen Trailer +buttonUserTruckSelectCurrent;Aktuell +buttonUserTruckSwitchCurrent;Wechel aktuellen Truck zu diesem +error_could_not_complete_jobs_loop;Jobeschleife konnte nicht abgeschlossen werden +error_could_not_decode_file;Das Programm konnte die Datei nicht decodieren +error_could_not_find_file;Das Programm konnte die Datei nicht finden +error_could_not_write_to_file;Das Programm konnte die Datei nicht schreiben +error_during_importing_db;Fehler beim Importieren der Datenbank +error_exception;Programmausnahme +error_file_not_decoded;Datei nicht decodiert +error_file_was_modified;Die Datei wurde vom Spiel geändert +error_job_parameters_not_filled;Nicht alle Jobparameter sind gefüllt +error_save_version_not_detected;Version der Sicherungsdatei wurde nicht gefunden +groupBoxMainProfilesAndSaves;Profile und Speicherdaten +groupBoxProfileUserColors;User colors +groupBoxUserTruckShareTruckSettings;Teile Truck Einstellungen +labelCargoMarketCity;Stadt +labelCargoMarketCompany;Firma +labelCargoMarketSource;Quelle +labelCity;stadt +labelFreightMarketCargo;Fracht +labelFreightMarketCity;Stadt +labelFreightMarketCompany;Firma +labelFreightMarketCompanyF;Firma +labelFreightMarketCountryF;Land +labelFreightMarketDestination;Ziel +labelFreightMarketDistance;Gesamtlänge: +labelFreightMarketSource;Quelle +labelFreightMarketUrgency;Dringlichkeit +labelProfileSkill1;Lange Auträge +labelProfileSkill2;Teure Frachten +labelProfileSkill3;Zerbrechliche Frachte +labelProfileSkill4;Just-In-Time Lieferung +labelProfileSkill5;Umweltbewusstes Fahren +labelTrailerPartNameCargo;Fracht +labelTrailerPartNameChassis;Aufbau +labelTrailerPartNameWheels;Reifen +labelTruckDetailsFuel;Tank +labelTruckPartNameCabin;Kabine +labelTruckPartNameChassis;Aufbau +labelTruckPartNameEngine;Motor +labelTruckPartNameTransmission;Getriebe +labelTruckPartNameWheels;Reifen +labelUserCompanyCompanyName;Firmen Name +labelUserCompanyGarages;Garagen +labelUserCompanyHQcity;Heimatstadt +labelUserCompanyMoneyAccount;Geld +labelUserCompanyVisitedCities;Besuchte Städte +labelUserTrailerLicensePlate;Kennzeichen +labelUserTruckLicensePlate;Kennzeichen +message_file_saved;Datei Gespeichert. +message_saving_file;Speicher Datei... +tabPageCargoMarket;Fracht Markt +tabPageCompany;Firma +tabPageFreightMarket;Fracht Markt +toolStripMenuItemAbout;Über +toolStripMenuItemCreateTrFile;Übersetzen +toolStripMenuItemExit;Beenden +toolStripMenuItemHelp;Hilfe +toolStripMenuItemLanguage;Sprache +toolStripMenuItemSettings;Einstellungen +tooltipbuttonProfilesAndSavesRefreshAll;Aktualisieren +currencyEUR;Euro +currencyCHF;Schweizer Franken +currencyCZK;Tschechische Krone +currencyGBP;Britisches Pfund +currencyPLN;Polnischer Zloty +currencyHUF;Ungarischer Forint +currencyDKK;Dänischer Krone +currencySEK;Schwedische Krona +currencyNOK;Norwegische Krone +currencyRUB;Russischer Rubel +currencyUSD;US-Dollar +currencyCAD;Kanadischer Dollar +currencyMXN;Mexikanischer Peso +unsupportedGameVersionTitle;Nicht unterstützte {0} Version {1} +unsupportedGameVersionText;Die von Ihnen installierte {0} Version ist derzeit nicht mit diesem Tool kompatibel.\n\nInstallierter Spielversion: {1}\n\nAktuell unterstützte Versionen: {2} diff --git a/TS SE Tool/lang/en-US/cities_translate.txt b/TS SE Tool/lang/en-US/cities_translate.txt new file mode 100644 index 00000000..703fe575 --- /dev/null +++ b/TS SE Tool/lang/en-US/cities_translate.txt @@ -0,0 +1,192 @@ +[en-US] +aberdeen;Aberdeen +amsterdam;Amsterdam +berlin;Berlin +bern;Bern +birmingham;Birmingham +bratislava;Bratislava +bremen;Bremen +brno;Brno +brussel;Brussels +calais;Calais +cambridge;Cambridge +cardiff;Cardiff +carlisle;Carlisle +dijon;Dijon +dortmund;Dortmund +dover;Dover +dresden;Dresden +duisburg;Duisburg +dusseldorf;Düsseldorf +edinburgh;Edinburgh +erfurt;Erfurt +felixstowe;Felixstowe +frankfurt;Frankfurt am Main +geneve;Geneva +glasgow;Glasgow +graz;Graz +grimsby;Grimsby +groningen;Groningen +hamburg;Hamburg +hannover;Hanover +innsbruck;Innsbruck +kassel;Kassel +kiel;Kiel +klagenfurt;Klagenfurt am Wörthersee +koln;Cologne +leipzig;Leipzig +liege;Liège +lille;Lille +linz;Linz +liverpool;Liverpool +london;London +luxembourg;Luxembourg +lyon;Lyon +magdeburg;Magdeburg +manchester;Manchester +mannheim;Mannheim +metz;Metz +milano;Milan +munchen;Munich +newcastle;Newcastle upon Tyne +nurnberg;Nuremberg +osnabruck;Osnabrück +paris;Paris +plymouth;Plymouth +poznan;Poznań +prague;Prague +reims;Reims +rostock;Rostock +rotterdam;Rotterdam +salzburg;Salzburg +sheffield;Sheffield +southampton;Southampton +strasbourg;Strasbourg +stuttgart;Stuttgart +swansea;Swansea +szczecin;Szczecin +torino;Turin +travemunde;Travemünde +venezia;Venice +verona;Verona +wien;Vienna +wroclaw;Wrocław +zurich;Zürich +bialystok;Białystok +budapest;Budapest +bystrica;Banská Bystrica +debrecen;Debrecen +gdansk;Gdańsk +katowice;Katowice +kosice;Košice +krakow;Kraków +lodz;Łódź +lublin;Lublin +olsztyn;Olsztyn +ostrava;Ostrava +pecs;Pécs +szeged;Szeged +warszawa;Warsaw +aalborg;Aalborg +bergen;Bergen +esbjerg;Esbjerg +frederikshv;Frederikshavn +gedser;Gedser +goteborg;Gothenburg +helsingborg;Helsingborg +hirtshals;Hirtshals +jonkoping;Jönköping +kalmar;Kalmar +kapellskar;Kapellskär +karlskrona;Karlskrona +kobenhavn;Copenhagen +kristiansand;Kristiansand +linkoping;Linköping +malmo;Malmö +nynashamn;Nynäshamn +odense;Odense +orebro;Örebro +oslo;Oslo +sodertalje;Södertälje +stavanger;Stavanger +stockholm;Stockholm +trelleborg;Trelleborg +uppsala;Uppsala +vasteraas;Västerås +vaxjo;Växjö +alban;Saint-Alban-du-Rhône +bordeaux;Bordeaux +bourges;Bourges +brest;Brest +civaux;Civaux +clermont;Clermont-Ferrand +golfech;Golfech +larochelle;La Rochelle +laurent;Saint-Laurent +lehavre;Le Havre +lemans;Le Mans +limoges;Limoges +marseille;Marseille +montpellier;Montpellier +nantes;Nantes +nice;Nice +paluel;Paluel +rennes;Rennes +roscoff;Roscoff +toulouse;Toulouse +ancona;Ancona +bari;Bari +bologna;Bologna +cagliari;Cagliari +cassino;Cassino +catania;Catania +catanzaro;Catanzaro +firenze;Florence +genova;Genoa +livorno;Livorno +messina;Messina +napoli;Naples +olbia;Olbia +palermo;Palermo +parma;Parma +pescara;Pescara +roma;Rome +sassari;Sassari +suzzara;Suzzara +taranto;Taranto +terni;Terni +daugavpils;Daugavpils +helsinki;Helsinki +kaliningrad;Kaliningrad +kaunas;Kaunas +klaipeda;Klaipėda +kotka;Kotka +kouvola;Kouvola +kunda;Kunda +lahti;Lahti +liepaja;Liepāja +loviisa;Loviisa +luga;Luga +mazeikiai;Mažeikiai +naantali;Naantali +narva;Narva +olkiluoto;Olkiluoto +paldiski;Paldiski +panevezys;Panevėžys +parnu;Pärnu +petersburg;Saint Petersburg +pori;Pori +pskov;Pskov +rezekne;Rēzekne +riga;Riga +siauliai;Šiauliai +sosnovy_bor;Sosnovy Bor +tallinn;Tallinn +tampere;Tampere +tartu;Tartu +turku;Turku +utena;Utena +valmiera;Valmiera +ventspils;Ventspils +vilnius;Vilnius +vyborg;Vyborg diff --git a/TS SE Tool/lang/en-US/countries_translate.txt b/TS SE Tool/lang/en-US/countries_translate.txt new file mode 100644 index 00000000..bea89a86 --- /dev/null +++ b/TS SE Tool/lang/en-US/countries_translate.txt @@ -0,0 +1,68 @@ +[en-US] ++all;All ++unsorted;Unsorted +austria;Austria +belgium;Belgium +bulgaria;Bulgaria +czech;Czech +denmark;Denmark +estonia;Estonia +finland;Finland +france;France +germany;Germany +hungary;Hungary +italy;Italy +latvia;Latvia +lithuania;Lithuania +luxembourg;Luxembourg +netherlands;Netherlands +norway;Norway +poland;Poland +romania;Romania +russia;Russia +slovakia;Slovakia +sweden;Sweden +switzerland;Switzerland +turkey;Turkey +uk;United Kingdom +arizona;Arizona +california;California +nevada;Nevada +new_mexico;New Mexico +oregon;Oregon +utah;Utah +washington;Washington +aland;Aland Island +albania;Albania +andorra;Andora +belarus;Belarus +bosnia;Bosnia Herzegovina +croatia;Croatia +cyprus;Cyprus +faroe;Faroe Islands +georgia;Georgia +greece;Greece +iceland;Iceland +iom;Isle of Man +ireland;Ireland +jersey;Jersey +liecht;Lichtenstein +macedonia;North Macedonia +mnegro;Montenegro +moldova;Moldovia +monaco;Monaco +nireland;Northern Ireland +portugal;Portugal +serbia;Serbia +slovenia;Slovenia +spain;Spain +svalbard;Svarlbard +ukraine;Ukraine +egypt;Egypt +iraq;Iraq +israel;Israel +jordan;Jordan +lebanon;Lebanon +saudia;Saudi Arabia +syria;Syria +westbank;West Bank diff --git a/TS SE Tool/lang/en-US/flag.png b/TS SE Tool/lang/en-US/flag.png new file mode 100644 index 00000000..5cd4fa3d Binary files /dev/null and b/TS SE Tool/lang/en-US/flag.png differ diff --git a/TS SE Tool/lang/en-US/lngfile.txt b/TS SE Tool/lang/en-US/lngfile.txt new file mode 100644 index 00000000..d32f4022 --- /dev/null +++ b/TS SE Tool/lang/en-US/lngfile.txt @@ -0,0 +1,183 @@ +[en-US] +buttonAddCustomPath;Add +buttonCancel;Cancel +buttonCargoMarketRandomizeCargoCity;Randomize Cargo list +buttonCargoMarketRandomizeCargoCompany;Randomize Cargo list +buttonCargoMarketResetCargoCity;Reset Cargo list +buttonCargoMarketResetCargoCompany;Reset Cargo list +buttonChooseFolder;Choose folder +buttonClearColor;Clear +buttonConvoyToolsGPSCurrentPositionCopy;Copy current position +buttonConvoyToolsGPSCurrentPositionPaste;Paste current position +buttonConvoyToolsGPSStoredGPSPathCopy;Copy GPS path +buttonConvoyToolsGPSStoredGPSPathPaste;Paste GPS path +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Copy truck position from multiple saves +buttonConvoyToolsGPSTruckPositionMultySavePaste;Create multiple saves with different truck positions +buttonDBClear;Clear +buttonDBExport;Export +buttonDBImport;Import +buttonEditCPlist;Edit list +buttonExport;Export +buttonFreightMarketAddJob;Add Job to list +buttonFreightMarketClearJobList;Clear list +buttonFreightMarketRandomizeCargo;Random +buttonImport;Import +buttonMainAddCustomFolder;Add Custom Folder +buttonMainDecryptSave;Decrypt +buttonMainLoadSave;Load +buttonMainWriteSave;Save +buttonProfilesAndSavesOpenSaveFolder;Open Folder +buttonReplaceColors;↑↑↑ Replace ↑↑↑ +buttonSave;Save +buttonShareTruckTruckDetailsCopy;Copy Truck Datails +buttonShareTruckTruckDetailsPaste;Paste Truck Datails +buttonShareTruckTruckPaintCopy;Copy Paint Settings +buttonShareTruckTruckPaintPaste;Paste Paint Settings +buttonShareTruckWholeTruckCopy;Copy All Truck Settings +buttonShareTruckWholeTruckPaste;Paste All Truck Settings +buttonUserColorsShareColors;Share colors +buttonUserCompanyCitiesUnVisit;Unvisit +buttonUserCompanyCitiesVisit;Visit +buttonUserCompanyGaragesBuy;Buy +buttonUserCompanyGaragesBuyDowngrade;Downgrade +buttonUserCompanyGaragesBuyUpgrade;Buy and Upgrade +buttonUserCompanyGaragesManage;Manage +buttonUserCompanyGaragesSell;Sell +buttonUserCompanyGaragesUpgrade;Upgrade +buttonUserTrailerSelectCurrent;Select Current Trailer +buttonUserTrailerSwitchCurrent;Set as Current Trailer +buttonUserTruckSelectCurrent;Current +buttonUserTruckSwitchCurrent;Switch current Truck to this Truck +checkBoxFreightMarketFilterDestination;Filter +checkBoxFreightMarketFilterSource;Filter +checkBoxProfilesAndSavesProfileBackups;Backups +error_could_not_complete_jobs_loop;Could not complete jobs loop +error_could_not_decode_file;Program was unable to decode file +error_could_not_find_file;Program was unable to find file +error_could_not_write_to_file;Program was unable to write to file +error_during_importing_db;Error during importing DataBase +error_exception;Program exception +error_file_not_decoded;File not decoded +error_file_was_modified;File was modified by the game +error_job_parameters_not_filled;Not all job parameters are filled +error_save_version_not_detected;Save file version was not detected +error_sql_exception;DataBase exception +FormAboutBox;About {0} +FormAddCustomFolder;Edit Custom folders +FormColorPicker;Color picker +FormSettings;Settings +FormShareUserColors;Share User colors +groupBoxDataBase;Database +groupBoxFolderType;Folder type +groupBoxGameType;Game +groupBoxImportedColors;Imported colors +groupBoxMainProfilesAndSaves;Profiles And Saves +groupBoxProfilePlayerLevel;Player level +groupBoxProfileSkill;Skills +groupBoxProfileUserColors;User colors +groupBoxUserTrailerShareTrailerSettings;Share Trailer Settings +groupBoxUserTrailerTrailer;Trailer +groupBoxUserTrailerTrailerDetails;Details +groupBoxUserTruckShareTruckSettings;Share Truck Settings +groupBoxUserTruckTruck;Truck +groupBoxUserTruckTruckDetails;Details +Kilometers;Kilometers +labelCargoMarketCity;City +labelCargoMarketCompany;Company +labelCargoMarketSource;Source +labelCity;city +labelCurrency;Currency +labelDistance;Distance +labelDownloadDescription;You can download latest version from +labelFreightMarketCargo;Cargo +labelFreightMarketCity;City +labelFreightMarketCompany;Company +labelFreightMarketCompanyF;Company +labelFreightMarketCountryF;Country +labelFreightMarketDestination;Destination +labelFreightMarketDistance;Total path length: +labelFreightMarketFilterMain;Filter +labelFreightMarketSource;Source +labelFreightMarketUrgency;Urgency +labelHowtoDescription;How to use it +labelJobPickupTime;Cargo relevance time +labelLoopEvery;Loop every +labelnew;new +labelold;old +labelor;or +labelProfileSkill1;Long Distance +labelProfileSkill2;High Value Cargo +labelProfileSkill3;Fragile Cargo +labelProfileSkill4;Just-In-Time Delivery +labelProfileSkill5;Ecodriving +labelSupportedGameVersions;Supported game versions +labelTrailerPartNameBody;Body +labelTrailerPartNameCargo;Cargo +labelTrailerPartNameChassis;Chassis +labelTrailerPartNameWheels;Wheels +labelTruckDetailsFuel;Fuel +labelTruckPartNameCabin;Cabin +labelTruckPartNameChassis;Chassis +labelTruckPartNameEngine;Engine +labelTruckPartNameTransmission;Transmission +labelTruckPartNameWheels;Wheels +labelUserCompanyCompanyName;Company name +labelUserCompanyGarages;Garages +labelUserCompanyHQcity;HQ city +labelUserCompanyMoneyAccount;Account money +labelUserCompanyVisitedCities;Visited cities +labelUserTrailerLicensePlate;License plate +labelUserTruckLicensePlate;License plate +labelVersion;Version {0} (alpha) +Large;Large +message_database_created;Database structure created. +message_database_missing_creating_db;Database file is missing. Creating Database... +message_database_missing_creating_db_structure;Database file is missing. Creating Database structure... +message_decoding_save_file;Decoding save file... +message_exporting_database;Exporting DataBase... +message_file_saved;File saved. +message_importing_database;Importing DataBase... +message_loading_save_file;Loading save file... +message_no_matching_cities;No Cities matching filter settings. +message_operation_finished;Task complete. +message_preparing_data;Preparing data... +message_saving_file;Saving file... +Miles;Miles +Not owned;Not owned +radioButtonProfileFolderType;Profile folder +radioButtonRootFolderType;Root folder +radioButtonSaveFolderType;Save folder +radioButtonUnknownFolderType;Unknown +Small;Small +tabPageCargoMarket;Cargo Market +tabPageCompany;Company +tabPageConvoyTools;Convoy Tools +tabPageFreightMarket;Freight Market +tabPageProfile;Profile +tabPageTrailer;Trailer +tabPageTruck;Truck +Tiny;Tiny +toolStripMenuItemAbout;About +toolStripMenuItemCreateTrFile;Make translation +toolStripMenuItemDownload;Download +toolStripMenuItemExit;Exit +toolStripMenuItemHelp;Help +toolStripMenuItemLanguage;Language +toolStripMenuItemProgram;Program +toolStripMenuItemSettings;Settings +tooltipbuttonProfilesAndSavesRefreshAll;Refresh +unsupportedGameVersionTitle;Unsupported {0} Version {1} +unsupportedGameVersionText;Your {0} version is currently not supported by this tool.\n\nInstalled Game Version: {1}\n\nCurrently Supported Versions: {2} +currencyEUR;Euro +currencyCHF;Swiss Franc +currencyCZK;Czech Koruna +currencyGBP;British Pound +currencyPLN;Polish Zloty +currencyHUF;Hungarian Forint +currencyDKK;Danish Krone +currencySEK;Swedish Krona +currencyNOK;Norwegian Krone +currencyRUB;Russian Ruble +currencyUSD;US Dollar +currencyCAD;Canadian Dollar +currencyMXN;Mexican Peso diff --git a/TS SE Tool/lang/en-US/urgency_translate.txt b/TS SE Tool/lang/en-US/urgency_translate.txt new file mode 100644 index 00000000..5f2be11f --- /dev/null +++ b/TS SE Tool/lang/en-US/urgency_translate.txt @@ -0,0 +1,4 @@ +[en-US] +0;Standard +1;Important +2;Urgent diff --git a/TS SE Tool/lang/es-ES/flag.png b/TS SE Tool/lang/es-ES/flag.png new file mode 100644 index 00000000..bfa0cb75 Binary files /dev/null and b/TS SE Tool/lang/es-ES/flag.png differ diff --git a/TS SE Tool/lang/es-ES/lngfile.txt b/TS SE Tool/lang/es-ES/lngfile.txt new file mode 100644 index 00000000..bbec8714 --- /dev/null +++ b/TS SE Tool/lang/es-ES/lngfile.txt @@ -0,0 +1,134 @@ +[es-ES] +buttonCargoMarketRandomizeCargoCity;Aleatorizar lista de cargas +buttonCargoMarketRandomizeCargoCompany;Aleatorizar lista de cargas +buttonCargoMarketResetCargoCity;Reiniciar lista de cargas +buttonCargoMarketResetCargoCompany;Reiniciar lista de cargas +buttonConvoyToolsGPSCurrentPositionCopy;Copiar dirección actual +buttonConvoyToolsGPSCurrentPositionPaste;Pegar dirección actual +buttonConvoyToolsGPSStoredGPSPathCopy;Copiar ruta de GPS +buttonConvoyToolsGPSStoredGPSPathPaste;Pegar ruta de GPS +buttonFreightMarketAddJob;Añadir trabajo a la lista +buttonFreightMarketClearJobList;Limpiar lista +buttonFreightMarketRandomizeCargo;Al azar +buttonMainAddCustomFolder;Agregar carpeta personalizada +buttonMainDecryptSave;Descifrar +buttonMainLoadSave;Cargar +buttonMainWriteSave;Guardar +buttonProfilesAndSavesOpenSaveFolder;Abrir carpeta +buttonShareTruckTruckDetailsCopy;Copiar detalles del camión +buttonShareTruckTruckDetailsPaste;Pegar detalles del camión +buttonShareTruckTruckPaintCopy;Copiar ajustes de pintura +buttonShareTruckTruckPaintPaste;Pegar ajustes de pintura +buttonShareTruckWholeTruckCopy;Copiar todos los ajustes del camión +buttonShareTruckWholeTruckPaste;Pegar todos los ajustes del camión +buttonUserColorsShareColors;Compartir colores +buttonUserCompanyCitiesUnVisit;Sin visitar +buttonUserCompanyCitiesVisit;Visitada +buttonUserCompanyGaragesBuy;Comprar +buttonUserCompanyGaragesBuyUpgrade;Comprar y Mejorar +buttonUserCompanyGaragesSell;Vender +buttonUserCompanyGaragesUpgrade;Mejorar +buttonUserTrailerSelectCurrent;Seleccionar Tráiler actual +buttonUserTrailerSwitchCurrent;Establecer como Tráiler actual +buttonUserTruckSelectCurrent;Actual +buttonUserTruckSwitchCurrent;Cambiar camión actual a este camión +checkBoxFreightMarketFilterDestination;Filtrar +checkBoxFreightMarketFilterSource;Filtrar +checkBoxFreightMarketRandomDest;Al azar +error_could_not_complete_jobs_loop;No se pudieron completar los bucles de trabajo +error_could_not_decode_file;No se pudo descifrar el archivo +error_could_not_find_file;No se pudo encontrar el archivo +error_could_not_write_to_file;No se puedo escribir el archivo +error_during_importing_db;Error al importar base de datos +error_exception;Excepción encontrada +error_file_not_decoded;Archivo no descifrado +error_file_was_modified;Archivo fue modificado por el juego +error_job_parameters_not_filled;Llene todos los parámetros necesarios +error_save_version_not_detected;Versión de archivo de guardado no detectada +groupBoxMainProfilesAndSaves;Perfiles y partidas +groupBoxProfilePlayerLevel;Nivel +groupBoxProfileSkill;Habilidades +groupBoxProfileUserColors;Colores +groupBoxUserTrailerTrailer;Tráiler +groupBoxUserTrailerTrailerDetails;Detalles +groupBoxUserTruckShareTruckSettings;Compartir detalles del camión +groupBoxUserTruckTruck;Camión +groupBoxUserTruckTruckDetails;Detalles +labelCargoMarketCity;Ciudad +labelCargoMarketCompany;Compañía +labelCargoMarketSource;Origen +labelCity;ciudad +labelFreightMarketCargo;Carga +labelFreightMarketCity;Ciudad +labelFreightMarketCompany;Compañía +labelFreightMarketCompanyF;Compañía +labelFreightMarketCountryF;País +labelFreightMarketDestination;Destino +labelFreightMarketDistance;Distancia total: +labelFreightMarketFilterMain;Filtrar +labelFreightMarketSource;Origen +labelFreightMarketUrgency;Urgencia +labelProfileSkill1;Larga distancia +labelProfileSkill2;Mercancía de gran valor +labelProfileSkill3;Mercancía frágil +labelProfileSkill4;Entrega a tiempo +labelProfileSkill5;Conducción económica +labelTrailerPartNameBody;Cuerpo +labelTrailerPartNameCargo;Carga +labelTrailerPartNameChassis;Chasis +labelTrailerPartNameWheels;Ruedas +labelTruckDetailsFuel;Combustible +labelTruckPartNameCabin;Cabina +labelTruckPartNameChassis;Chasis +labelTruckPartNameEngine;Motor +labelTruckPartNameTransmission;Transmisión +labelTruckPartNameWheels;Ruedas +labelUserCompanyCompanyName;Nombre de Compañía +labelUserCompanyGarages;Garajes +labelUserCompanyHQcity;Ciudad sede +labelUserCompanyMoneyAccount;Dinero en cuenta +labelUserCompanyVisitedCities;Ciudades visitadas +labelUserTrailerLicensePlate;Placa +labelUserTruckLicensePlate;Placa +message_database_created;Estructura de base de datos creada. +message_database_missing_creating_db;No se encontró la base de datos. Creando base de datos... +message_database_missing_creating_db_structure;No se encontró la base de datos. Creando estructura de base de datos... +message_decoding_save_file;Descifrando archivo... +message_exporting_database;Exportando Base de Datos... +message_file_saved;Archivo guardado. +message_importing_database;Importando Base de Datos... +message_loading_save_file;Cargando archivo... +message_no_matching_cities;No hay ciudades que coincidan con los filtros actuales. +message_operation_finished;Tarea completada. +message_preparing_data;Preparando datos... +message_saving_file;Guardando archivo... +tabPageCargoMarket;Mercado de Mercancías +tabPageCompany;Compañía +tabPageConvoyTools;Herramientas de Convoy +tabPageFreightMarket;Mercado de Transportes +tabPageProfile;Perfil +tabPageTrailer;Tráiler +tabPageTruck;Camión +toolStripMenuItemAbout;Acerca de +toolStripMenuItemCreateTrFile;Hacer una traducción +toolStripMenuItemExit;Salir +toolStripMenuItemHelp;Ayuda +toolStripMenuItemLanguage;Idioma +toolStripMenuItemProgram;Programa +toolStripMenuItemSettings;Ajustes +tooltipbuttonProfilesAndSavesRefreshAll;Refrescar +currencyEUR;Euro +currencyCHF;Franco Suizo +currencyCZK;Corona Checa +currencyGBP;Libra Estadounidense +currencyPLN;Zloty Polaco +currencyHUF;Forint Húngaro +currencyDKK;Krone Danesa +currencySEK;Krona Sueca +currencyNOK;Krone Noruega +currencyRUB;Rublo Ruso +currencyUSD;Dólar de los Estados Unidos +currencyCAD;Dólar Canadiense +currencyMXN;Peso Mexicano +unsupportedGameVersionTitle;Versión {0} No Soportada {1} +unsupportedGameVersionText;La versión {0} que tienes instalada actualmente no es compatible con esta herramienta.\n\nVersión del Juego Instalada: {1}\n\nVersiones Actualmente Soportadas: {2} diff --git a/TS SE Tool/lang/fr-FR/flag.png b/TS SE Tool/lang/fr-FR/flag.png new file mode 100644 index 00000000..815cebea Binary files /dev/null and b/TS SE Tool/lang/fr-FR/flag.png differ diff --git a/TS SE Tool/lang/fr-FR/lngfile.txt b/TS SE Tool/lang/fr-FR/lngfile.txt new file mode 100644 index 00000000..7cf713af --- /dev/null +++ b/TS SE Tool/lang/fr-FR/lngfile.txt @@ -0,0 +1,169 @@ +[fr-FR] +buttonAddCustomPath;Ajouter +buttonCancel;Annuler +buttonCargoMarketRandomizeCargoCity;Liste aléatoire des cargaisons +buttonCargoMarketRandomizeCargoCompany;Liste aléatoire des cargaisons +buttonCargoMarketResetCargoCity;Réinitialiser la liste des cargaisons +buttonCargoMarketResetCargoCompany;Réinitialiser la liste des cargaisons +buttonChooseFolder;Choisir le dossier +buttonClearColor;Effacer la couleur +buttonConvoyToolsGPSCurrentPositionCopy;Copier la position actuelle +buttonConvoyToolsGPSCurrentPositionPaste;Coller la position actuelle +buttonConvoyToolsGPSStoredGPSPathCopy;Copier la route GPS +buttonConvoyToolsGPSStoredGPSPathPaste;Coller la route GPS +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Copiez la position du camion à partir de plusieurs sauvegardes +buttonConvoyToolsGPSTruckPositionMultySavePaste;Créez plusieurs sauvegardes avec différentes positions de camion +buttonDBClear;Effacer +buttonDBExport;Exporter +buttonDBImport;Importer +buttonEditCPlist;Modifier la liste +buttonExport;Exporter +buttonFreightMarketAddJob;Ajouter un travail à la liste +buttonFreightMarketClearJobList;Effacer la liste +buttonFreightMarketRandomizeCargo;Aléatoire +buttonImport;Importer +buttonMainAddCustomFolder;Ajouter un dossier personnalisé +buttonMainDecryptSave;Décrypter +buttonMainLoadSave;Charger +buttonMainWriteSave;Sauvegarder +buttonProfilesAndSavesOpenSaveFolder;Ouvrir le dossier +buttonReplaceColors;↑↑↑ Remplacer ↑↑↑ +buttonSave;Sauvegarder +buttonShareTruckTruckDetailsCopy;Copier les détails du camion +buttonShareTruckTruckDetailsPaste;Coller les détails du camion +buttonShareTruckTruckPaintCopy;Copier les paramètres de peinture +buttonShareTruckTruckPaintPaste;Coller les paramètres de peinture +buttonShareTruckWholeTruckCopy;Copier tous les paramètres du camion +buttonShareTruckWholeTruckPaste;Coller tous les paramètres du camion +buttonUserColorsShareColors;Partager les couleurs +buttonUserCompanyCitiesUnVisit;Non visité +buttonUserCompanyCitiesVisit;Visité +buttonUserCompanyGaragesBuy;Acheter +buttonUserCompanyGaragesBuyDowngrade;Rétrograder +buttonUserCompanyGaragesBuyUpgrade;Acheter et améliorer +buttonUserCompanyGaragesManage;Gérer +buttonUserCompanyGaragesSell;Vendre +buttonUserCompanyGaragesUpgrade;Améliorer +buttonUserTrailerSelectCurrent;Sélectionner la remorque actuelle +buttonUserTrailerSwitchCurrent;Remplacer la remorque actuelle par cette remorque +buttonUserTruckSelectCurrent;Sélectionner le camion actuel +buttonUserTruckSwitchCurrent;Remplacer le camion actuel par ce camion +checkBoxFreightMarketFilterDestination;Filtrer +checkBoxFreightMarketFilterSource;Filtrer +checkBoxProfilesAndSavesProfileBackups;Sauvegardes +error_could_not_complete_jobs_loop;Impossible de terminer la boucle des travaux +error_could_not_decode_file;Le programme n'a pas pu décoder le fichier +error_could_not_find_file;Le programme n'a pas pu trouver le fichier +error_could_not_write_to_file;Le programme n'a pas pu écrire dans le fichier +error_during_importing_db;Erreur lors de l'importation de la base de données +error_exception;Exception de programme +error_file_not_decoded;Fichier non décodé +error_file_was_modified;Le fichier a été modifié par le jeu +error_job_parameters_not_filled;Tous les paramètres du travail ne sont pas remplis +error_save_version_not_detected;La version du fichier d'enregistrement n'a pas été détectée +FormAddCustomFolder;Modifier les dossiers personnalisés +FormColorPicker;Pipette de couleurs +FormSettings;Réglages +FormShareUserColors;Partager les couleurs de l'utilisateur +groupBoxFolderType;Type de dossier +groupBoxGameType;Jeu +groupBoxImportedColors;Couleurs importées +groupBoxMainProfilesAndSaves;Profils Et Sauvegardes +groupBoxProfilePlayerLevel;Niveau du joueur +groupBoxProfileSkill;Compétences +groupBoxProfileUserColors;Couleurs utilisateur +groupBoxUserTrailerShareTrailerSettings;Partager les paramètres de la remorque +groupBoxUserTrailerTrailer;Remorque +groupBoxUserTrailerTrailerDetails;Détails +groupBoxUserTruckShareTruckSettings;Partager les paramètres du camion +groupBoxUserTruckTruck;Camion +groupBoxUserTruckTruckDetails;Détails +Kilometers;Kilomètres +labelCargoMarketCity;Ville +labelCargoMarketCompany;Compagnie +labelCity;Ville +labelCurrency;Monnaie +labelDownloadDescription;Vous pouvez télécharger la dernière version depuis +labelFreightMarketCargo;Cargaison +labelFreightMarketCity;Ville +labelFreightMarketCompany;Compagnie +labelFreightMarketCompanyF;Compagnie +labelFreightMarketCountryF;Pays +labelFreightMarketDistance;Longueur totale du trajet: +labelFreightMarketFilterMain;Filtrer +labelFreightMarketSource;Origine +labelFreightMarketUrgency;Urgence +labelHowtoDescription;Comment l'utiliser +labelJobPickupTime;Heure de prise en charge de la cargaison +labelLoopEvery;Boucle tous les +labelnew;Nouveau +labelold;Ancien +labelor;ou +labelProfileSkill1;Longue distance +labelProfileSkill2;Cargaison haute valeur +labelProfileSkill3;Cargaison fragile +labelProfileSkill4;Livraison juste à temps +labelProfileSkill5;Eco-conduite +labelSupportedGameVersions;Versions de jeu prises en charge +labelTrailerPartNameBody;Type +labelTrailerPartNameCargo;Cargaison +labelTrailerPartNameWheels;Roues +labelTruckPartNameCabin;Cabine +labelTruckPartNameEngine;Moteur +labelTruckPartNameWheels;Roues +labelUserCompanyCompanyName;Nom de la compagnie +labelUserCompanyHQcity;Ville du siège +labelUserCompanyMoneyAccount;Compte en banque +labelUserCompanyVisitedCities;Villes visitées +labelUserTrailerLicensePlate;Immatriculation +labelUserTruckLicensePlate;Immatriculation +Large;Grand +message_database_created;Structure database créée. +message_database_missing_creating_db;Le fichier de données est manquant. Création des données... +message_database_missing_creating_db_structure;Le fichier de données est manquant. Création de la structure... +message_decoding_save_file;Décodage fichier de sauvegarde... +message_exporting_database;Exportation des données... +message_file_saved;Fichier sauvegardé. +message_importing_database;Importation des données... +message_loading_save_file;Chargement fichier de sauvegarde... +message_no_matching_cities;Pas de ville correspondant au filtre. +message_operation_finished;Tâche terminée. +message_preparing_data;Préparation des données... +message_saving_file;Sauvegarde du fichier... +Not owned;Non possédé +radioButtonProfileFolderType;Dossier profil +radioButtonRootFolderType;Dossier racine +radioButtonSaveFolderType;Sauvegarder le dossier +radioButtonUnknownFolderType;Inconnu +Small;Petit +tabPageCargoMarket;Offres de traction +tabPageCompany;Compagnie +tabPageConvoyTools;Outils Convoi +tabPageFreightMarket;Offres de fret +tabPageProfile;Profil +tabPageTrailer;Remorque +tabPageTruck;Camion +Tiny;Minuscule +toolStripMenuItemCreateTrFile;Rédiger une traduction +toolStripMenuItemDownload;Télécharger +toolStripMenuItemExit;Quitter +toolStripMenuItemHelp;Aide +toolStripMenuItemLanguage;Langue +toolStripMenuItemProgram;Programme +toolStripMenuItemSettings;Réglages +tooltipbuttonProfilesAndSavesRefreshAll;Rafraîchir +currencyEUR;Euro +currencyCHF;Franc Suisse +currencyCZK;Couronne Tchèque +currencyGBP;Livre Sterling +currencyPLN;Złoty Polonais +currencyHUF;Forint Hongrois +currencyDKK;Krone Danoise +currencySEK;Krona Suédoise +currencyNOK;Krone Norvégienne +currencyRUB;Rouble Russe +currencyUSD;Dollar Américain +currencyCAD;Dollar Canadien +currencyMXN;Peso Mexicain +unsupportedGameVersionTitle;Version {0} Non Supportée {1} +unsupportedGameVersionText;Votre version {0} n'est actuellement pas prise en charge par cet outil.\n\nVersion du Jeu Installée: {1}\n\nVersions Actuellement Supportées: {2} diff --git a/TS SE Tool/lang/it-IT/cities_translate.txt b/TS SE Tool/lang/it-IT/cities_translate.txt new file mode 100644 index 00000000..d77e12b0 --- /dev/null +++ b/TS SE Tool/lang/it-IT/cities_translate.txt @@ -0,0 +1,66 @@ +[it-IT] +berlin;Berlino +bern;Berna +bremen;Brema +brussel;Bruxelles +dijon;Digione +dresden;Dresda +dusseldorf;Dusseldorf +edinburgh;Edinburgo +frankfurt;Francoforte sul Meno +geneve;Ginevra +hamburg;Hamburgo +koln;Colonia +liege;Liegi +london;Londra +luxembourg;Lussemburgo +lyon;Lione +magdeburg;Magdeburgo +munchen;Monaco +nurnberg;Nuremberg +osnabruck;Osnabruck +paris;Parigi +poznan;Poznan +prague;Praga +salzburg;Salisburgo +strasbourg;Strasburgo +stuttgart;Stoccarda +travemunde;Travemunde +wien;Vienna +wroclaw;Wroclaw +zurich;Zurigo +bialystok;Bialystok +bystrica;Bansk Bystrica +gdansk;Gdansk +kosice;Kosice +krakow;Cracovia +lodz;Lodz +lublin;Lublino +pecs;Pecs +warszawa;Varsavia +goteborg;Goteborg +jonkoping;Jonkoping +kapellskar;Kapellskar +kobenhavn;Copenhagen +linkoping;Linkoping +malmo;Malmo +nynashamn;Nynashamn +orebro;Orebro +sodertalje;Sodertalje +stockholm;Stoccolma +vasteraas;Vasteraas +vaxjo;Vaxjo +marseille;Marsiglia +nice;Nizza +toulouse;Tolosa +genova;Genoa +roma;Rome +klaipeda;Klaipeda +mazeikiai;Mazeikiai +panevezys;Panevezys +parnu;Parnu +petersburg;San Pietroburgo +rezekne;Rezekne +riga;Riga +siauliai;Siauliai +tallinn;Tallin \ No newline at end of file diff --git a/TS SE Tool/lang/it-IT/countries_translate.txt b/TS SE Tool/lang/it-IT/countries_translate.txt new file mode 100644 index 00000000..0e14ffd9 --- /dev/null +++ b/TS SE Tool/lang/it-IT/countries_translate.txt @@ -0,0 +1,40 @@ +[it-IT] +belgium;Belgio +czech;Repubblica Ceca +denmark;Danimarca +finland;Finlandia +france;Francia +germany;Germania +hungary;Ungheria +italy;Italia +latvia;Lettonia +lithuania;Lithania +luxembourg;Lussemburgo +netherlands;Olanda +norway;Norvegia +poland;Polonia +slovakia;Slovacchia +switzerland;Svizzera +turkey;Turchia +uk;Regno Unito +andorra;Andorra +belarus;Bielorussia +croatia;Croazia +cyprus;Cipro +faroe;Isole Faroe +greece;Grecia +iceland;Islanda +iom;Isola di Man +ireland;Irlanda +macedonia;Macedonia del Nord +moldova;Moldavia +nireland;Irlanda del Nord +portugal;Portogallo +spain;Spagna +ukraine;Ucraina +egypt;Egitto +israel;Israele +jordan;Gordania +lebanon;Libano +saudia;Arabia Saudita +syria;Siria \ No newline at end of file diff --git a/TS SE Tool/lang/it-IT/flag.png b/TS SE Tool/lang/it-IT/flag.png new file mode 100644 index 00000000..c9e8ce0d Binary files /dev/null and b/TS SE Tool/lang/it-IT/flag.png differ diff --git a/TS SE Tool/lang/it-IT/lngfile.txt b/TS SE Tool/lang/it-IT/lngfile.txt new file mode 100644 index 00000000..f71be805 --- /dev/null +++ b/TS SE Tool/lang/it-IT/lngfile.txt @@ -0,0 +1,181 @@ +[it-IT] +buttonAddCustomPath;Aggiungi +buttonCancel;Cancella +buttonCargoMarketRandomizeCargoCity;Elenco casuale citta' dei trasporti +buttonCargoMarketRandomizeCargoCompany;Elenco casuale compagnie di trasporti +buttonCargoMarketResetCargoCity;Resetta elenco trasporti +buttonCargoMarketResetCargoCompany;Resetta elenco compagnie di trasporto +buttonChooseFolder;Scegli cartella +buttonClearColor;Pulisci +buttonConvoyToolsGPSCurrentPositionCopy;Copia posizione attuale +buttonConvoyToolsGPSCurrentPositionPaste;Incolla posizione attuale +buttonConvoyToolsGPSStoredGPSPathCopy;Copia percorso GPS +buttonConvoyToolsGPSStoredGPSPathPaste;Incolla percorso GPS +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Copia posizione camion da piu' salvataggi +buttonConvoyToolsGPSTruckPositionMultySavePaste;Crea piu' salvataggi da con differenti posizioni del camion +buttonDBClear;Pulisci +buttonDBExport;Esporta +buttonDBImport;Importa +buttonEditCPlist;Modifica elenco +buttonExport;Esporta +buttonFreightMarketAddJob;Aggiungi lavoro all'elenco +buttonFreightMarketClearJobList;Pulisci elenco +buttonFreightMarketRandomizeCargo;Casuale +buttonImport;Importa +buttonMainAddCustomFolder;Aggiungi cartella personalizzata +buttonMainDecryptSave;Decripta +buttonMainLoadSave;Carica +buttonMainWriteSave;Salva +buttonProfilesAndSavesOpenSaveFolder;Apri cartella +buttonReplaceColors;↑↑↑ Sostituisci ↑↑↑ +buttonSave;Salva +buttonShareTruckTruckDetailsCopy;Copia impostazioni camion +buttonShareTruckTruckDetailsPaste;Incolla impostazioni camion +buttonShareTruckTruckPaintCopy;Copia impostazioni verniciatura +buttonShareTruckTruckPaintPaste;Incolla impostazioni verniciatura +buttonShareTruckWholeTruckCopy;Copia tutte le impostazioni del camion +buttonShareTruckWholeTruckPaste;Incolla tutte le impostazioni del camion +buttonUserColorsShareColors;Condividi colori +buttonUserCompanyCitiesUnVisit;Non visitato +buttonUserCompanyCitiesVisit;Visita +buttonUserCompanyGaragesBuy;Acquista +buttonUserCompanyGaragesBuyDowngrade;Retrocedi +buttonUserCompanyGaragesBuyUpgrade;Acquista e aggiorna +buttonUserCompanyGaragesManage;Gestisci +buttonUserCompanyGaragesSell;Vendi +buttonUserCompanyGaragesUpgrade;Aggiorna +buttonUserTrailerSelectCurrent;Seleziona rimorchio attuale +buttonUserTrailerSwitchCurrent;Imposta come rimorchio attuale +buttonUserTruckSelectCurrent;Attuale +buttonUserTruckSwitchCurrent;Sostituisci camion attuale con questo +checkBoxFreightMarketFilterDestination;Filtra +checkBoxFreightMarketFilterSource;Filtra +error_could_not_complete_jobs_loop;Impossibile completare il ciclo dei lavori +error_could_not_decode_file;Impossibile decodificare il file +error_could_not_find_file;Impossibile trovare il file +error_could_not_write_to_file;Impossibile scrivere il file +error_during_importing_db;Errore durante l'importazione dell'archivio +error_exception;Eccezione del programma +error_file_not_decoded;File non decodificato +error_file_was_modified;Il file è stato modificato dal gioco +error_job_parameters_not_filled;Non tutti i parametri del lavoro sono riempiti +error_save_version_not_detected;Versione del file di salvataggio non rilevata +error_sql_exception;Eccezione dell'archivio +FormAboutBox;Riguardo {0} +FormAddCustomFolder;Modifica cartelle personali +FormColorPicker;Cattura colore +FormSettings;Impostazioni +FormShareUserColors;Condividi colori utente +groupBoxDataBase;Archivio +groupBoxFolderType;Tipo cartella +groupBoxGameType;Gioco +groupBoxImportedColors;Colori importati +groupBoxMainProfilesAndSaves;Profili e salvataggi +groupBoxProfilePlayerLevel;Livello giocatore +groupBoxProfileSkill;Abilità +groupBoxProfileUserColors;Colori utente +groupBoxUserTrailerShareTrailerSettings;Condividi impostazioni rimorchio +groupBoxUserTrailerTrailer;Rimorchio +groupBoxUserTrailerTrailerDetails;Dettagli +groupBoxUserTruckShareTruckSettings;COndividi impostazioni camion +groupBoxUserTruckTruck;Camion +groupBoxUserTruckTruckDetails;Dettagli +Kilometers;Chilometri +labelCargoMarketCity;Citta' +labelCargoMarketCompany;Compagnia +labelCargoMarketSource;Origine +labelCity;Citta' +labelCurrency;Moneta +labelDistance;Distanza +labelDownloadDescription;Puoi scaricare l'ultima versione da +labelFreightMarketCargo;Carico +labelFreightMarketCity;Citta' +labelFreightMarketCompany;Compagnia +labelFreightMarketCompanyF;Compagnia +labelFreightMarketCountryF;Paese +labelFreightMarketDestination;Destinazione +labelFreightMarketDistance;Lunghezza totale percorso: +labelFreightMarketFilterMain;Filtro +labelFreightMarketSource;Origine +labelFreightMarketUrgency;Urgencza +labelHowtoDescription;Come fare +labelJobPickupTime;Tempo rilevanza carico +labelLoopEvery;Cicla ogni +labelnew;nuovo +labelold;vecchio +labelor;o +labelProfileSkill1;Lunghezza distanza +labelProfileSkill2;Valore massimo del carico +labelProfileSkill3;Fragilita' carico +labelProfileSkill4;Consegna in tempo +labelProfileSkill5;Guida economica +labelSupportedGameVersions;Versioni del gioco supportate +labelTrailerPartNameBody;Corpo +labelTrailerPartNameCargo;Carico +labelTrailerPartNameChassis;Telaio +labelTrailerPartNameWheels;Ruote +labelTruckDetailsFuel;Carburante +labelTruckPartNameCabin;Cabina +labelTruckPartNameChassis;Telaio +labelTruckPartNameEngine;Motore +labelTruckPartNameTransmission;Trasmissione +labelTruckPartNameWheels;Ruote +labelUserCompanyCompanyName;Nome Compagnia +labelUserCompanyHQcity;Citta' HQ +labelUserCompanyMoneyAccount;Quantità denaro +labelUserCompanyVisitedCities;Citta' visitate +labelUserTrailerLicensePlate;Targa +labelUserTruckLicensePlate;Targa +labelVersion;Versione {0} (alpha) +Large;Grande +message_database_created;Struttura archivio creata. +message_database_missing_creating_db;File archivo mancante. Creando l'archivio... +message_database_missing_creating_db_structure;File archivo mancante. Creando la struttura dell'archivio... +message_decoding_save_file;Decodificando file salvataggio... +message_exporting_database;Esportando l'archivio... +message_file_saved;File salvato. +message_importing_database;Importando l'archivio... +message_loading_save_file;Caricando file salvataggio... +message_no_matching_cities;Nessuna citta' corrisponde ai criteri del filtro. +message_operation_finished;Lavoro completo. +message_preparing_data;Preparando i dati... +message_saving_file;Salvando il file... +Miles;Miglia +Not owned;Non posseduti +radioButtonProfileFolderType;Cartella profili +radioButtonRootFolderType;Cartella principale +radioButtonSaveFolderType;Cartella salvataggi +radioButtonUnknownFolderType;Sconosciuto +Small;Piccolo +tabPageCargoMarket;Negozio carichi +tabPageCompany;Compangnia +tabPageConvoyTools;Strumenti per rimorchi +tabPageFreightMarket;Negozio merci +tabPageProfile;Profilo +tabPageTrailer;Rimorchio +tabPageTruck;Camion +Tiny;Minuscolo +toolStripMenuItemAbout;Riguardo +toolStripMenuItemCreateTrFile;Traduci +toolStripMenuItemDownload;Scarica +toolStripMenuItemExit;Esci +toolStripMenuItemHelp;Aiuto +toolStripMenuItemLanguage;Lingua +toolStripMenuItemProgram;Programma +toolStripMenuItemSettings;Impostazioni +tooltipbuttonProfilesAndSavesRefreshAll;Ricarica +currencyEUR;Euro +currencyCHF;Franchi Svizzeri +currencyCZK;Corona Cecoslovacca +currencyGBP;Sterlina Britannica +currencyPLN;Złoty Polacco +currencyHUF;Fiorino Ungherese +currencyDKK;Corona Danese +currencySEK;Corona Svedese +currencyNOK;Corona Norvegese +currencyRUB;Rublo Russo +currencyUSD;Dollaro Americano +currencyCAD;Dollaro Canadese +currencyMXN;Pesos Messicani +unsupportedGameVersionTitle;Versione {0} Non Supportata {1} +unsupportedGameVersionText;La tua versione {0} di gioco attualmente non è supportata da questo strumento.\n\nVersione Gioco Installata: {1}\n\nVersioni Attualmente Supportate: {2} diff --git a/TS SE Tool/lang/it-IT/urgency_translate.txt b/TS SE Tool/lang/it-IT/urgency_translate.txt new file mode 100644 index 00000000..7a34a849 --- /dev/null +++ b/TS SE Tool/lang/it-IT/urgency_translate.txt @@ -0,0 +1,4 @@ +[it-IT] +0;Standard +1;Importante +2;Urgente diff --git a/TS SE Tool/lang/ja-JP/cargo_translate.txt b/TS SE Tool/lang/ja-JP/cargo_translate.txt new file mode 100644 index 00000000..aea25b1b --- /dev/null +++ b/TS SE Tool/lang/ja-JP/cargo_translate.txt @@ -0,0 +1,363 @@ +[ja-JP] +acetylene;アセチレン +acid;酸 +air_mails;エアメール +aircft_tires;航空機用タイヤ +aircond;空調機器 +almond;アーモンド +ammunition;弾薬 +apples;リンゴ +apples_c;リンゴ +aromatics;芳香族炭化水素 +arsenic;ヒ素 +asph_miller;アスファルト切削機 +atl_cod_flt;タイセイヨウダラの切り身 +backfl_prev;逆流防止装置 +barley;大麦 +basil;バジル +beans;豆 +beef_meat;牛肉 +beverages;飲料 +beverages_c;飲料 +big_bag_seed;大袋種子 +boiler_parts;ボイラーパーツ (特殊) +boric_acid;ホウ酸 +bottle_water;水のボトル +bottles;空のボトル +brake_fluid;ブレーキフルード +brake_pads;ブレーキパッド +bricks;レンガ +bulldozer;ブルドーザー +butter;バター +cable;ケーブル +cable_reel;工業用ケーブルリール +can_sardines;イワシの缶詰 +canned_beans;豆の缶詰 +canned_beef;牛肉の缶詰 +canned_pork;豚肉の缶詰 +canned_tuna;ツナ缶 +car_balt1;自動車 (Baltic 1) +car_balt2;自動車 (Baltic 2) +car_it;自動車 (イタリア) +carb_water;炭酸水 +carbn_pwdr;炭素微粒子(カーボンブラック) +carbn_pwdr_c;炭素微粒子(カーボンブラック) +carcomp;自動車部品 +carrots;人参 +carrots_c;人参 +cars_big;自動車 (大きい) +cars_fr;自動車 (フランス) +cars_mix;自動車 (混合) +cars_small;自動車 (小さい) +case600;クローラトラクタ +cat_785c;重ダンプトラック シャーシ (特殊) +cat627;スクレーパー +cauliflower;カリフラワー +caviar;キャビア +cement;セメント +cheese;チーズ +chem_sorb_c;化学吸着剤 +chem_sorbent;化学吸着剤 +chemicals;化学製品 +chewing_gums;チューイングガム +chicken_meat;鶏肉 +chimney_syst;煙突排煙装置 +chlorine;塩素 +chocolate;チョコレート +clothes;衣類 +clothes_c;衣類 +coal;石炭 +coconut_milk;ココナッツミルク +coconut_oil;ココナッツオイル +coil;金属コイル +colors;ペンキ +comp_process;コンピュータープロセッサ +computers;コンピューター +concen_juice;濃縮果汁ジュース +concr_beams;コンクリート梁 +concr_beams2;コンクリート梁 +concr_cent;コンクリート型枠 +concr_stair;コンクリート階段 +condensator;工業用コンデンサー (特殊) +const_house;完成済みプレハブ住宅 +cont_trees;鉢植えの木 +contamin;汚染物質 +copp_rf_gutt;銅製の雨どい +corks;コルク +cott_cheese;カッテージチーズ +ctubes;コンクリートチューブ +ctubes_b;コンクリートチューブ +curtains;カーテン +cut_flowers;切り花 +cyanide;シアン化物 +desinfection;消毒剤 +diesel;軽油 +diesel_gen;ディーゼル発電機 +dozer;ブルドーザー - Z35K +driller;ドリラー - D-50 +dry_fruit;ドライフルーツ +dry_milk;粉ミルク +dryers;乾燥機 +drymilk;粉ミルク +dynamite;ダイナマイト +elect_wiring;電線 +electro_comp;電子部品 +electronics;電子機器 +emp_wine_bar;空のワイン樽 +emp_wine_bot;空のワインボトル +empty_barr;空の樽 +empty_palet;空パレット +emptytank;リザーバータンク +ethane;エタン +ex_bucket;油圧ショベル バケット (特殊) +excav_soil;掘削土 +excavator;油圧ショベル +excavator_bucket;油圧ショベル バケット (特殊) +exhausts_c;排気装置 +explosives;爆発物 +fertilizer;肥料 +fireworks;花火 +fish_chips;白身魚のフライ +floorpanels;フロアパネル +flour;小麦粉 +fluorine;フッ素 +food;加工食品 +forklifts;フォークリフト +fresh_fish;鮮魚 +froz_octopi;冷凍のタコ +frozen_food;冷凍食品 +frozen_fruit;冷凍フルーツ +frozen_hake;冷凍メルルーサ +frozen_veget;冷凍野菜 +frsh_herbs;フレッシュハーブ +fruits;フルーツ +fuel_oil;重油 +fuel_tanks;燃料タンク +fueltanker;フューエルタンカー +furniture;家具 +garlic;ニンニク +glass;ガラスパネル +glass_packed;ガラス製品 +gnocchi;ニョッキ(パスタ) +goat_cheese;ヤギのチーズ +grain;穀物 +granite_cube;花崗岩のキューブ +grapes;ブドウ +graph_grease;グラファイト グリース +grass_rolls;グラスロール +gravel;砂利 +guard_rails;ガードレール +gummy_bears;熊のグミ +gypsum;石膏 +harvest_bins;収穫コンテナ +hay;藁のペール +hchemicals;高熱化学製品 +heat_exch;熱交換器 (特殊) +heat_exchanger;熱交換器 (特殊) +helicopter;ヘリコプター - Ring-429 +hi_volt_cabl;高圧ケーブル +hipresstank;プレッシャータンク +hmetal;重金属 +home_acc;家庭用アクセサリー +honey;蜂蜜 +house_pref;プレハブ住宅 +househd_appl;家庭用品 +hwaste;医療系廃棄物 +hydrochlor;塩酸 +hydrogen;水素 +ibc_cont;IBCコンテナ +icecream;アイスクリーム +iced_coffee;アイスコーヒー缶 +iron_pipes;鉄パイプ +iveco_vans;Bracoバン +kalmar240;リーチスタッカー +kalmar240_s;リーチスタッカー シャーシ +kerosene;灯油 +ketchup;ケチャップ +komatsu155;ブルドーザー +lamb_stom;ラムの胃袋 +largetubes;大型チューブ +lattice;建設用階段 (特殊) +lavender;ラベンダー +lead;鉛 +limestone;石灰岩 +limonades;レモネード +live_catt_fr;牛 (フランス) +live_cattle;牛 +liver_paste;レバーペースト +locomotive;機関車 - Vossloh G6 +logs;丸太 +lumber;木材 +lumber_b;木材 +lye;灰汁 +m_59_80_r63;重ダンプトラック 巨大タイヤ (特殊) +machine_pts;機械部品 +magnesium;マグネシウム +maple_syrup;メープルシロップ +marb_blck;大理石ブロック +marb_blck2;大理石ブロック +marb_slab;大理石板 +mason_jars;メイソンジャー +mbt;移動式バリア +meat;食肉 +med_equip;医療機器 +med_vaccine;医療ワクチン +mercuric;塩化第二水銀 +metal_beams;鉄骨梁 +metal_cans;金属缶 +metal_center;円錐型金属カバー +metal_pipes;鉄パイプ +michelin_59_80_r63;重ダンプトラック 巨大タイヤ (特殊) +milk;牛乳 +mobile_crane;移動式クレーン - Rex-Tex 45 +mondeos;乗用車 +moor_buoy;係留ブイ +mortar;モルタル +moto_tires;二輪車用タイヤ +motor_oil;自動車用オイル +motor_oil_c;自動車用オイル +motorcycles;二輪車 +mozzarela;モッツァレラチーズ +mtl_coil;金属コイル +mystery_box;大規模ハイテクパーツ (特殊) +mystery_cyl;ハイテクデバイス (特殊) +natur_rubber;天然ゴム +neon;ネオン +nitrocel;ニトロセルロース +nitrogen;窒素 +nonalco_beer;ノンアルコールビール +nuts;クルミ +nylon_cord;ナイロンコード +office_suppl;事務用品 +oil;オイル +oil_filt_c;オイルフィルター +oil_filters;オイルフィルター +olive_oil;オリーブオイル +olives;オリーブ +onion;玉ねぎ +oranges;オレンジ +ore;鉱石 +outdr_flr_tl;屋外用フロアタイル +overweight;低床セミトレーラー +packag_food;加工食品 +paper;事務用紙 +pasta;パスタ +pears;洋梨 +peas;エンドウ豆 +perfor_frks;二輪車用フロントフォーク +pesticide;農薬 +pesto;ペスト ジェノヴェーゼ +pet_food;ペットフード +pet_food_c;ペットフード +petrol;ガソリン +phosphor;白リン弾 +pilot_boat;サービスボート (特殊) +pipes;鉄パイプ +plant_substr;ソイル(土壌) +plast_film;プラスチックフィルムロール +plast_film_c;プラスチックフィルムロール +plastic_gra;粉末プラスティック +plows;プラウ +plumb_suppl;配管資材 +plums;プラム +pnut_butter;ピーナッツバター +polyst_box;ポリスチレンボックス +pork_meat;豚肉 +post_packag;郵便小包 +pot_flowers;鉢植え +potahydro;水酸化カリウム +potassium;カリウム +potatoes;ポテト +precast_strs;成型済みの階段 +princess;ヨット - クイーンV39 +propane;プロパン +protec_cloth;防護服 +radiators;ラジエーター +rawmilk;生乳 +re_bars;鋼棒 +refl_posts;反射板ポスト +rice;米 +rice_c;米 +roadroller;ロードローラー +roller;ロードローラー - DYNA CC-2200 +roof_tiles;屋根瓦 +roofing_felt;屋根用フェルト +rooflights;天窓 +rye;ライムギ +salm_fillet;サケの切り身 +salt_spice_c;塩&香辛料 +salt_spices;塩&香辛料 +sand;砂 +sandwch_pnls;サンドイッチパネル +sausages;ソーセージ +sawpanels;おがくずパネル +scaffoldings;足場材 +scania_tr;トラック - Scania +scooters;スクーター +scrap_cars;スクラップ自動車 +scrap_metals;屑鉄 +sheep_wool;羊毛 +shock_absorb;ショックアブソーバー +silica;二酸化ケイ素 +silo;巨大サイロ (特殊) +smokd_eel;ウナギの燻製 +smokd_sprats;スプラットの燻製 +sodchlor;次亜塩素酸ナトリウム +sodhydro;水酸化ナトリウム +sodium;ナトリウム +soil;掘削土 +solvents;溶剤 +soy_milk;豆乳 +sq_tub;角型鋼管 +steel_cord;スチールコード +stone_dust;石粉 +stone_wool;ロックウール +stones;石 +straw_bales;藁のペール +sugar;砂糖 +sulfuric;硫酸 +tableware;食器 +terex3160;オールテレーンクレーン +tomatoes;トマト +toys;おもちゃ +tracks;無限軌道 +tractor;トラクター - RS-666 +tractors;トラクター +train_part;鉄道の輪軸 +train_part2;鉄道の台車 +transformat;トランス - PK900 +transformer;トランス +transmis;変速機 +truck_batt;トラック用バッテリー +truck_batt_c;トラック用バッテリー +truck_rims;トラック用ホイール +truck_rims_c;トラック用ホイール +truck_tyres;トラック用タイヤ +tube;ガスパイプラインパーツ +tvs;テレビ +tyres;タイヤ +used_battery;使用済み自動車用バッテリー +used_pack;使用済み梱包材 +used_packag;使用済み梱包材 +used_plast;使用済みプラスチック +used_plast_c;使用済みプラスチック +vegetable;野菜 +vent_tube;換気シャフト +ventilation;換気シャフト +vinegar;西洋酢 +vinegar_c;西洋酢 +volvo_cars;高級SUV +volvo_tr;トラック - Volvo +wallpanels;壁パネル +watermelons;スイカ +wheat;小麦 +windml_eng;風力タービン ナセル +windml_tube;風力タービン タワー +wirtgen250;旋盤 +wood_bark;木の樹皮 +wooden_beams;木の梁 +wrk_cloth;作業着 +wshavings;木くず +yacht;ヨット +yogurt;ヨーグルト +young_seed;稚苗 diff --git a/TS SE Tool/lang/ja-JP/cities_translate.txt b/TS SE Tool/lang/ja-JP/cities_translate.txt new file mode 100644 index 00000000..760cb89b --- /dev/null +++ b/TS SE Tool/lang/ja-JP/cities_translate.txt @@ -0,0 +1,536 @@ +[ja-JP] +aberdeen;アバディーン +amsterdam;アムステルダム +berlin;ベルリン +bern;ベルン +birmingham;ベリンハム +bratislava;ブラチスラヴァ +bremen;ブレーメン +brno;ブルノ +brussel;ブリュッセル +calais;カレー +cambridge;ケンブリッジ +cardiff;カーディフ +carlisle;カーライル +dijon;ディジョン +dortmund;ドルトムント +dover;ドーバー +dresden;ドレスデン +duisburg;デュースブルク +dusseldorf;デュッセルドルフ +edinburgh;エディンバラ +erfurt;エアフルト +felixstowe;フェリックストー +frankfurt;フランクフルト・アム・マイン +geneve;ジュネーヴ +glasgow;グラスゴー +graz;グラーツ +grimsby;グリムズビー +groningen;フローニンゲン +hamburg;ハンブルグ +hannover;ハノーファー +innsbruck;インスブルック +kassel;カッセル +kiel;キール +klagenfurt;クラーゲンフルト・アム・ヴェルターゼー +koln;ケルン +leipzig;ライプツィヒ +liege;リエージュ +lille;リール +linz;リンツ +liverpool;リバプール +london;ロンドン +luxembourg;ルクセンブルク +lyon;リヨン +magdeburg;マクデブルグ +manchester;マンチェスター +mannheim;マンハイム +metz;メス +milano;マルメー +munchen;ミュンヘン +newcastle;ニューカッスル・アポン・タイン +nurnberg;ニュルンベルグ +osnabruck;オスナブリュック +paris;パリ +plymouth;プリマス +poznan;ポズナン +prague;プラハ +reims;ランス +rostock;ロストック +rotterdam;ロッテルダム +salzburg;ザルツブルグ +sheffield;シェフィールド +southampton;サウザンプトン +strasbourg;ストラスブール +stuttgart;シュツットガルト +swansea;スウォンシー +szczecin;シチェチン +torino;トリノ +travemunde;トラーヴェミュンデ +venezia;ヴェネツィア +verona;ヴェローナ +wien;ウィーン +wroclaw;ヴロツワフ +zurich;チューリッヒ +bialystok;ビャウィストク +budapest;ブダペスト +bystrica;バンスカー ビストリツァ +debrecen;デブレツェン +gdansk;グダニスク +katowice;カトウィツェ +kosice;コシツェ +krakow;クラクフ +lodz;ウッチ +lublin;ルブリン +olsztyn;オルシュテイン +ostrava;オストラヴァ +pecs;ペーチ +szeged;セゲド +warszawa;ワルシャワ +aalborg;オールボー +bergen;ベルゲン +esbjerg;エスビャー +frederikshv;フレゼリクスハウン +gedser;ゲッサー +goteborg;ヨーテボリ +helsingborg;ヘルシンボリ +hirtshals;ヒャツハルス +jonkoping;ヨンショーピング +kalmar;カルマル +kapellskar;カペルシャー +karlskrona;カールスクルーナ +kobenhavn;コペンハーゲン +kristiansand;クリスチャンサン +linkoping;リンシェーピング +malmo;ミラノ +nynashamn;ニュネスハムン +odense;オーデンセ +orebro;エレブルー +oslo;オスロ +sodertalje;セーデルテリエ +stavanger;スタヴァンゲル +stockholm;ストックホルム +trelleborg;トレレボリ +uppsala;ウプサラ +vasteraas;ヴェステローズ +vaxjo;ベクショー +ajaccio;アジャクシオ +alban;サン=タルバン=デュ=ローヌ +bastia;バスティア +bonifacio;ボニファシオ +bordeaux;ボルドー +bourges;ブールジュ +brest;ブレスト +calvi;カルビ +civaux;シヴォー +clermont;クレルモン=フェラン +golfech;ゴルフシュ +larochelle;ラ・ロシェル +laurent;サン=ローラン +lehavre;ル・アーヴル +lemans;ル・マン +lile_rousse;リル=ルッス +limoges;リモージュ +marseille;マルセイユ +montpellier;モンペリエ +nantes;ナント +nice;ニース +paluel;パリュエル +porto_vecchi;ポルト=ベッキオ +rennes;レンヌ +roscoff;ロスコフ +toulouse;トゥールーズ +ancona;アンコーナ +bari;バーリ +bologna;ボローニャ +cagliari;カリャリ +cassino;カッシーノ +catania;カターニア +catanzaro;カタンザーロ +firenze;フィレンツェ +genova;ジェノヴァ +livorno;リヴォルノ +messina;メッシーナ +napoli;ナポリ +olbia;オリビア +palermo;パレルモ +parma;パルマ +pescara;ペスカーラ +roma;ローマ +sangiovanni;ヴィッラ・サン・ジョヴァンニ +sassari;サッサリ +suzzara;スッサーラ +taranto;ターラント +terni;テルニ +daugavpils;ダウカフピルス +helsinki;ヘルシンキ +kaliningrad;カリーニングラード +kaunas;カウナス +klaipeda;クライペダ +kotka;コトカ +kouvola;コウヴォラ +kunda;クンダ +lahti;ラハティ +liepaja;リエパーヤ +loviisa;ロヴィーサ +luga;ルーガ +mazeikiai;マジェイケイ +naantali;ナーンタリ +narva;ナルヴァ +olkiluoto;オルキルオト +paldiski;パルディスキ +panevezys;パネヴェジース +parnu;パルヌ +petersburg;サンクトペテルブルグ +pori;ポリ +pskov;プスコフ +rezekne;レーゼクネ +riga;リガ +siauliai;シャウレイ +sosnovy_bor;ソスノヴィ・ボール +tallinn;タリン +tampere;タンペレ +tartu;タルトゥ +turku;トゥルク +utena;ウテナ +valmiera;ヴァルミエラ +ventspils;ヴェンツピルス +vilnius;ヴィリニュス +vyborg;ヴィボルグ +bakersfield;ベーカーズフィールド +barstow;バーストー +carlsbad;カールズバッド +el_centro;エル セントロ +eureka;ユーレカ +fresno;フレズノ +hornbrook;ホーンブルック +huron;ヒューロン +los_angeles;ロサンゼルス +oakdale;オークデール +oakland;オークランド +oxnard;オックスナード +redding;レディング +sacramento;サクラメント +san_diego;サンディエゴ +san_francisc;サンフランシスコ +san_rafael;サンラフェル +santa_cruz;サンタクルーズ +santa_maria;サンタマリア +stockton;ストックトン +truckee;トラッキー +ukiah;ユカイア +carson_city;カーソンシティ +elko;エルコ +ely;イーリー +jackpot;ジャックポット +las_vegas;ラスベガス +pioche;ピオッシュ +primm;プリム +reno;リノ +tonopah;トノパー +winnemucca;ウィネマッカ +camp_verde;キャンプヴェルデ +clifton;クリフトン +ehrenberg;エーレンバーグ +flagstaff;フラッグスタッフ +g_canyon_vlg;グランドキャニオンビレッジ +holbrook;ホールブルック +kayenta;カエンタ +kingman;キングマン +nogales;ノガレス +page;ページ +phoenix;フェニックス +san_simon;サン シモン +show_low;ショー ロー +sierra_vista;シエラビスタ +tucson;ツーソン +yuma;ユマ +alamogordo;アラモゴード +albuquerque;アルバカーキ +artesia;アストリア +carlsbad_nm;カールズバッド(NM) +clovis;クローヴィス +farmington;ファーミントン +gallup;ギャラップ +hobbs;ホッブズ +las_cruces;ラスクルーセス +raton;ラトン +roswell;ロズウェル +santa_fe;サンタフェ +socorro;ソコーロ +tucumcari;トゥクカムリ +astoria;アストリア +bend;ベンド +burns;バーンズ +coos_bay;クーズベイ +eugene;ユージーン +klamath_f;クラマスフォールズ +lakeview;レイクビュー +medford;メドフォード +newport;ニューポート +ontario;オンタリオ +pendleton;ペンドルトン +portland;ポートランド +salem;セイラム +the_dalles;ダレス +aarhus;オーフス +aberystwyth;アベリストウィス +akranes;アクラネース +akureyri;アークレイリ +alajarvi;アラヤーヴィ +alexandroup;アレクサンドルポリス +andorra;アンドラ・ラ・ベリャ +antwerp;アントウェルペン +arad;アラド +are;オーレ +arnhem;アーネム +augustow;アウグストゥフ +aurach;アウラハ +bacau;バカウ +bado;バート・エーンハウゼン +balti;バルティ +balvi;バルビ +barcelona;バルセロナ +basel;バーセル +bayonne;バイヨンヌ +belfast;ベルファスト +beograd;ベオグラード +bilbao;ビルバオ +birsay;ビルセー +bitola;ビトラ +blonduos;ブリョンドゥオゥス +bobolice;ボボリツェ +bolungarvik;ボルンガルヴィーク +bonn;ボン +borgarnes;ボルガルーネス +bremerhaven;ブレーマーハーフェン +broadford;ブロードフォード +bucuresti;ブカレスト +burg;ブルク・アウフ・フェーマルン +bydgoszcz;ビドゴシュチ +cairnryan;ケルンリーン +canterbury;カンタベリー +chelmsford;チェルムズフォード +chisinau;キシナウ +cieszyn;チェシン +cluj;クルジュ=ナポカ +constanta;コンスタンツァ +craiova;クラヨバ +croydon;クロイドン +dombas;ドンボス +donostia;ドノスティア +douglas;ダグラス +drammen;ドラメン +dublin;ダブリン +dumfries;ダンフリース +eindhoven;アイントホーフェン +elblag;エルブロング +elk;エウク +evie;エヴィー +fishguard;フィッシュガード +flensburg;フレンスブルグ +folkestone;フォークストーン +forst;フォルスト +fraserburgh;フレーザーバーグ +ftwilliam;フォート・ウィリアム +furth;フュルト +galway;ゴールウェイ +gavle;イェブレ +gdynia;グディニャ +gorzow;ゴジェフ・ヴィエルコポルスキ +groedig;グレーディヒ +grudziadz;グルジョンツ +grumantbyen;グルマント +gusev;グセフ +gyor;ジェール +hainburg;ハインブルグ +halle;ハレ(ザーレ) +hamar;ハーマル +hammerfest;ハンメルフェスト +haparanda;ハパランダ +hawes;ハウス +heilbronn;ハイルブロン +herning;ヘルニング +hiorthhamn;ヒオルットハム +hofn;ヘプン +holmavik;ホールマビーク +holstebro;ホルスタブロ +holyhead;ホーリーヘッド +honningsvag;ホニングスヴォーグ +huesca;ウエスカ +hull;ハル +inverness;インヴァネス +ioannina;イオアニナ +irun;イルン +isafjordur;イサフィヨルド +ivalo;イヴァロ +jaca;ハカ +jekabpils;ジェカビル +joensuu;ヨエンスー +jonquera;ラ・ジョンケラ +jyvaskyla;ユヴァスキュラ +kalix;カーリスク +kandalaksha;カンダラクシャ +karlstad;カールスタード +karsamaki;カルサマキ +kavala;カバラ +keflavik;ケプラビーク +kemi;ケミ +kemijarvi;ケミヤルビ +kielce;キェルツェ +kirkenes;キルケネス +kirkwall;カークウォール +kittila;キッティラ +klaksvik;クラクスヴィーク +koblenz;コブレンツ +kokkola;コッコラ +kolding;コレング +kolka;コルカ +koszalin;コシャリン +krafla;クラプラ +kragujevac;クラグイェヴァク +kristianstad;クリスチャンスタッド +kristiinank;クアグア(クリスチーネスタッド) +krosno;クロスノ +kuopio;クオピオ +larnaka;ラルナカ +larne;ラーン +lefkosia;ニコシア +lemesos;リマソール +leskovac;レスコヴァツ +lillehammer;リレハンメル +limerick;リムリック +lisburn;リスバーン +ljubljana;リュブリャナ +ljugarn;ユガーン +lleida;リェイダ +londonderry;ロンドンデリー +longyearbyen;ロングイェールビーン +mainz;マインツ +manresa;マンレサ +maribor;マリボル +mariehamn;マリエハムン +mikkeli;ミッケリ +mlada;ムラダー・ポレスラフ +moerdijk;ムールデイク +montana;モンタナ +mukacheve;ムカチェボ +murmansk;ムルマンスク +narbonne;ナルボンヌ +nikel;ニケリ +nis;ニーシ +novisad;ノービサード +nowogard;ノボガルト +oban;オーバン +oberhausen;オーバーハウゼン +obsteig;オブシュタイク +ohrid;オフリド +olomouc;オロモウツ +opole;オポーレ +oppdal;オプダル +oradea;オラデア +orkanger;オルカンガール +orleans;オルレアン +ornskoldsvik;エルンシェルツビク +osijek;オシエク +ostersund;エステルスンド +ostroleka;オストロウェンカ +ostrowm;オストロマゾウィッカ +otta;オタ +oulu;オウル +padborg;パドボグ +pafos;パポス +pamplona;パンプローナ +pau;スティック +perpignan;ペルビニャン +perth;パース +piatra;ピアトラニアムツ +pila;ピワ +pleven;プレヴァン +ploce;プレート +plock;プロック +porthmadog;ポルスマドゲ +portree;ポートレート +portsmouth;ポーツマス +prilep;プリレブ +przemysl;プシェミシル +ptolemaida;プトレマイス +radom;ラドム +ramsey;ラムゼー +reutte;ロイテ +reydar;レイザルフィヨルズル +reykjavik;レイキャビク +rijeka;リエカ +ronne;ロンネ +rovaniemi;ロヴァニエミ +ruse;ルース +rzeszow;ジェシェフ +sangerhausen;サンガーハウゼン +sanok;サノク +selfoss;セルフォス +senj;センジ +seydis;セイジスフィヨルズル +sibenik;シベニク(クロアチア) +sibenik2;不明 (シベニク2) +sibiu;シビウ +siedlce;シェドルツェ +skelleftea;シュレフテオ +skopje;スコピエ +slbrod;スラヴォンスキ・ブロッド +sligo;スライゴー +sodankyla;ソダンキュラ +soderhamn;セーデルハムン +soria;ソリア +split;スプリット +sthelier;セイントヘリエ +stornoway;ストーノーウェイ +stranraer;ストランラー +subotica;スボティッツア +sundsvall;スンズヴァル +suwalki;ウヴァウキ +swinoujscie;シチェ +tanabru;タナブルー +teruel;テルエル +thessaloniki;テッサロニキ +thurso;サーソー +timisoara;ティミショアラ +tornio;トルニオ +torshavn;トースハウン +trieste;トリエステ +trinity;トリニティ +trnava;トルナバ +trondheim;トロンハイム +uelzen;ユルツェン +ukmerge;ウクメルゲ +ullapool;ウラプール +ulm;ウルム +umea;ウメオ +utsjoki;ウツヨキ +uzhhorod;ウジホロド +vaasa;ヴァーサ +vaduz;ファドゥーツ +valencia;バレンシア +vantaa;ヴァンター +varkaus;バルカウス +vasaros;ウァシャロシュナメニ +verkhnetulom;ヴェルフネトゥロムスキー +vestmann;ウエストマン +viborg;ビボル +vidin;ヴィディン +viitasaari;ヴィータサーリ +vik;ヴィク +vinaros;ヴィナロス +visby;ヴィスビー +vranje;ヴラニェ +walcz;バウチュ +wexford;ウェックスフォード +wick;ウィック +wiesbaden;ヴィースバーデン +ystad;イスタード +zadar;ザダル +zagreb;ザグレブ +zamosc;ザモシチ +zaragoza;サラゴザ +zgorzelec;ズゴジェレツ +zrenjanin;ズレニャニン +zwolle;ズウォレ diff --git a/TS SE Tool/lang/ja-JP/countries_translate.txt b/TS SE Tool/lang/ja-JP/countries_translate.txt new file mode 100644 index 00000000..33d0ff99 --- /dev/null +++ b/TS SE Tool/lang/ja-JP/countries_translate.txt @@ -0,0 +1,46 @@ +[ja-JP] ++all;全て +austria;オーストリア +belgium;ベルギー +bulgaria;ブルガリア +czech;チェコ +denmark;デンマーク +estonia;エストニア +finland;フィンランド +france;フランス +germany;ドイツ +hungary;ハンガリー +italy;イタリア +latvia;ラトビア +lithuania;リトアニア +luxembourg;ルクセンブルグ +netherlands;オランダ +norway;ノルウェー +poland;ポーランド +romania;ルーマニア +russia;ロシア +slovakia;スロベキア +sweden;スウェーデン +switzerland;スイス +turkey;七面鳥 +uk;イギリス +arizona;アリゾナ +california;カリフォルニア +nevada;ネバダ +new_mexico;ニューメキシコ +oregon;オレゴン +utah;ユタ +washington;ワシントン +aland;オーランド諸島 +andorra;アンドラ公国 +belarus;ベラルーシ +croatia;クロアチア +faroe;フェロー諸島 +iceland;アイスランド +ireland;アイルランド +liecht;リヒテンシュタイン +moldova;モルドバ +serbia;セルビア +slovenia;スロバニア +spain;スペイン +ukraine;ウクライナ diff --git a/TS SE Tool/lang/ja-JP/flag.png b/TS SE Tool/lang/ja-JP/flag.png new file mode 100644 index 00000000..1005b20d Binary files /dev/null and b/TS SE Tool/lang/ja-JP/flag.png differ diff --git a/TS SE Tool/lang/ja-JP/lngfile.txt b/TS SE Tool/lang/ja-JP/lngfile.txt new file mode 100644 index 00000000..2d13d2bd --- /dev/null +++ b/TS SE Tool/lang/ja-JP/lngfile.txt @@ -0,0 +1,161 @@ +[ja-JP] +buttonCancel;キャンセル +buttonCargoMarketRandomizeCargoCity;ランダム生成 +buttonCargoMarketRandomizeCargoCompany;ランダム生成 +buttonCargoMarketResetCargoCity;リストのリセット +buttonCargoMarketResetCargoCompany;リストのリセット +buttonClearColor;クリア +buttonDBClear;クリア +buttonDBExport;エクスポート +buttonDBImport;インポート +buttonExport;エクスポート +buttonFreightMarketAddJob;リストにジョブを追加 +buttonFreightMarketClearJobList;リストのクリア +buttonFreightMarketRandomizeCargo;ランダム +buttonImport;インポート +buttonMainAddCustomFolder;読込フォルダの追加 +buttonMainDecryptSave;復号 +buttonMainLoadSave;ロード +buttonMainWriteSave;セーブ +buttonPlayerLevelMaximum;最大 >> +buttonPlayerLevelMinimum;<< 最小 +buttonProfilesAndSavesOpenSaveFolder;フォルダを開く +buttonReplaceColors;↑↑↑ 置き換え ↑↑↑ +buttonSave;セーブ +buttonShareTruckTruckDetailsCopy;トラックの設定をコピー +buttonShareTruckTruckDetailsPaste;トラックの設定を張り付ける +buttonShareTruckTruckPaintCopy;ペイントの設定をコピー +buttonShareTruckTruckPaintPaste;ペイントの設定を張り付ける +buttonShareTruckWholeTruckCopy;すべてのトラック設定をコピー +buttonShareTruckWholeTruckPaste;すべてのトラック設定を張り付ける +buttonUserColorsShareColors;カラーの共有 +buttonUserCompanyCitiesUnVisit;未訪問 +buttonUserCompanyCitiesVisit;訪問済 +buttonUserCompanyGaragesBuy;購入 +buttonUserCompanyGaragesBuyDowngrade;ダウングレード +buttonUserCompanyGaragesBuyUpgrade;購入してアップグレード +buttonUserCompanyGaragesSell;売却 +buttonUserCompanyGaragesUpgrade;アップグレード +buttonUserTrailerSelectCurrent;使用中のトレーラー +buttonUserTrailerSwitchCurrent;このトレーラーを使用する +buttonUserTruckSelectCurrent;乗車中の車両 +buttonUserTruckSwitchCurrent;このトラックを乗車中にする +checkBoxFreightMarketFilterDestination;フィルター +checkBoxFreightMarketFilterSource;フィルター +checkBoxFreightMarketRandomDest;ランダム +checkBoxProfilesAndSavesProfileBackups;バックアップ +error_could_not_complete_jobs_loop;仕事のループ設定に失敗しました +error_could_not_decode_file;ファイルの複合化に失敗しました +error_could_not_find_file;ファイルが見つかりません +error_could_not_write_to_file;書き込みに失敗しました +error_during_importing_db;データベースへのインポート中にエラー +error_exception;プログラムで例外エラーが発生 +error_file_not_decoded;ファイルが復号化されていません +error_file_was_modified;セーブファイルはゲームによって変更されました +error_job_parameters_not_filled;すべてのジョブデータが入力されるわけではありません +error_save_version_not_detected;ファイルにバージョン情報がありませんでした +error_sql_exception;データベースで例外エラーが発生 +FormSettings;設定 +FormShareUserColors;カラーパレットの共有 +groupBoxDataBase;データベース +groupBoxImportedColors;カラーのインポート +groupBoxMainProfilesAndSaves;プロフィールとセーブ +groupBoxProfilePlayerLevel;プレイヤーのレベル +groupBoxProfileSkill;スキル +groupBoxProfileUserColors;設定したカラーパレット +groupBoxUserTrailerShareTrailerSettings;トレーラー設定の共有 +groupBoxUserTrailerTrailer;トレーラー +groupBoxUserTrailerTrailerDetails;詳細 +groupBoxUserTruckShareTruckSettings;トラック設定の共有 +groupBoxUserTruckTruck;トラック +groupBoxUserTruckTruckDetails;詳細 +Kilometers;キロメートル +labelCargoMarketCity;都市 +labelCargoMarketCompany;会社 +labelCargoMarketSource;ソース +labelCity;都市 +labelCurrency;通貨 +labelDayShort;日 +labelDistance;距離 +labelFreightMarketCargo;貨物 +labelFreightMarketCity;都市 +labelFreightMarketCompany;会社 +labelFreightMarketCompanyF;会社 +labelFreightMarketCountryF;国 +labelFreightMarketDestination;目的地 +labelFreightMarketDistance;総走行距離: +labelFreightMarketFilterMain;フィルター +labelFreightMarketSource;出発地 +labelFreightMarketUrgency;緊急度 +labelHourShort;時間 +labelJobPickupTime;貨物の配達期限 +labelLoopEvery;経由地 +labelnew;新しい +labelold;古い +labelProfileSkill1;長距離 +labelProfileSkill2;高額貨物 +labelProfileSkill3;精密貨物 +labelProfileSkill4;ジャストインタイム +labelProfileSkill5;エコドライブ +labelTrailerPartNameBody;荷台 +labelTrailerPartNameCargo;貨物 +labelTrailerPartNameChassis;シャーシ +labelTrailerPartNameWheels;ホイール +labelTruckDetailsFuel;燃料 +labelTruckPartNameCabin;キャビン +labelTruckPartNameChassis;シャーシ +labelTruckPartNameEngine;エンジン +labelTruckPartNameTransmission;トランスミッション +labelTruckPartNameWheels;ホイール +labelUserCompanyCompanyName;会社名 +labelUserCompanyGarages;ガレージ +labelUserCompanyHQcity;本社の所在地 +labelUserCompanyMoneyAccount;所持金 +labelUserCompanyVisitedCities;訪れた都市 +labelUserTrailerLicensePlate;ナンバープレート +labelUserTruckLicensePlate;ナンバープレート +Large;大規模 +message_database_created;データベース構成が作成されました. +message_database_missing_creating_db;データベースがありません データベースを作成します... +message_database_missing_creating_db_structure;データベース構成がありません データベースを作成します... +message_decoding_save_file;セーブファイルの複合中... +message_exporting_database;データベースのエクスポート中... +message_file_saved;ファイルの保存が完了. +message_importing_database;データベースのインポート中... +message_loading_save_file;セーブデータのロード中... +message_no_matching_cities;フィルターに一致する都市がありません. +message_operation_finished;完了しました. +message_preparing_data;準備中... +message_saving_file;セーブ中... +Miles;マイル +Not owned;未訪問 +Small;小規模 +tabPageCargoMarket;カーゴマーケット +tabPageCompany;会社 +tabPageConvoyTools;コンボイツール +tabPageFreightMarket;フレイトマーケット +tabPageProfile;プロフィール +tabPageTrailer;トレーラー +tabPageTruck;トラック +Tiny;極小 +toolStripMenuItemDownload;ダウンロード +toolStripMenuItemHelp;ヘルプ +toolStripMenuItemLanguage;言語 +toolStripMenuItemProgram;プログラム +toolStripMenuItemSettings;設定 +tooltipbuttonProfilesAndSavesRefreshAll;リフレッシュ +currencyEUR;ユーロ +currencyCHF;スイスフラン +currencyCZK;チェコクローネ +currencyGBP;ポンド +currencyPLN;ポーランドゾロティー +currencyHUF;ハンガリーフォリント +currencyDKK;デンマーククローネ +currencySEK;スウェーデンクルーネ +currencyNOK;ノルウェーコルーネ +currencyRUB;ロシアルーブル +currencyUSD;アメリカドル +currencyCAD;カナダドル +currencyMXN;メキシコペソ +unsupportedGameVersionTitle;サポートされていない{0}バージョン{1} +unsupportedGameVersionText;あなたがインストールしている現在の{0}バージョンは、このツールによってサポートされていません。\n\nインストール済みのゲームバージョン:{1}\n\n現在サポートされているバージョン:{2} diff --git a/TS SE Tool/lang/ja-JP/urgency_translate.txt b/TS SE Tool/lang/ja-JP/urgency_translate.txt new file mode 100644 index 00000000..cb4266f9 --- /dev/null +++ b/TS SE Tool/lang/ja-JP/urgency_translate.txt @@ -0,0 +1,4 @@ +[ja-JP] +0;通常 +1;重要 +2;緊急 diff --git a/TS SE Tool/lang/ko-KR/cities_translate.txt b/TS SE Tool/lang/ko-KR/cities_translate.txt new file mode 100644 index 00000000..cef19522 --- /dev/null +++ b/TS SE Tool/lang/ko-KR/cities_translate.txt @@ -0,0 +1,192 @@ +[ko-KR] +aalborg;올보르 +aberdeen;애버딘 +alban;생 알방 듀 혼느 +amsterdam;암스테르담 +ancona;안코나 +bari;바리 +bergen;베르겐 +berlin;베를린 +bern;베른 +bialystok;비아위스토크 +birmingham;버밍엄 +bologna;볼로냐 +bordeaux;보르도 +bourges;부르주 +bratislava;브라티슬라바 +bremen;브레멘 +brest;브레스트 +brno;브르노 +brussel;브뤼셀 +budapest;부다페스트 +bystrica;반스카 비스트리차 +cagliari;칼리아리 +calais;칼레 +cambridge;케임브리지 +cardiff;카디프 +carlisle;칼라일 +cassino;카시노 +catania;카타니아 +catanzaro;카탄차로 +civaux;시보 +clermont;클레르몽 +daugavpils;다우가프필스 +debrecen;데브레첸 +dijon;디종 +dortmund;도르트문트 +dover;도버 +dresden;드레스덴 +duisburg;뒤스부르크 +dusseldorf;뒤셀도르프 +edinburgh;에든버러 +erfurt;에르푸르트 +esbjerg;에스비에르 +felixstowe;펠릭스토우 +firenze;피렌체 +frankfurt;프랑크푸르트 암 마인 +frederikshv;프레데릭스하운 +gdansk;그단스크 +gedser;게세르 +geneve;제네바 +genova;제노바 +glasgow;글래스고 +golfech;골페슈 +goteborg;예테보리 +graz;그라츠 +grimsby;그림즈비 +groningen;흐로닝언 +hamburg;함부르크 +hannover;하노버 +helsingborg;헬싱보리 +helsinki;헬싱키 +hirtshals;히르트스할스 +innsbruck;인스브루크 +jonkoping;옌셰핑 +kaliningrad;칼리닌그라드 +kalmar;칼마르 +kapellskar;카펠스카 +karlskrona;칼스크로나 +kassel;카셀 +katowice;카토비체 +kaunas;카우나스 +kiel;킬 +klagenfurt;클라겐푸르트 암 뵈르테제 +klaipeda;클라이페다 +kobenhavn;코펜하겐 +koln;쾰른 +kosice;코시체 +kotka;코트카 +kouvola;코우볼라 +krakow;크라쿠프 +kristiansand;크리스티안산 +kunda;쿤다 +lahti;라티 +larochelle;라로셀 +laurent;생로랑 +lehavre;르아브르 +leipzig;라이프치히 +lemans;르망 +liege;리에주 +liepaja;리예파야 +lille;릴 +limoges;리모주 +linkoping;린셰핑 +linz;린츠 +liverpool;리버풀 +livorno;리보르노 +lodz;우치 +london;런던 +loviisa;로비사 +lublin;루블린 +luga;루가 +luxembourg;룩셈부르크 +lyon;리옹 +magdeburg;마그데부르크 +malmo;말뫼 +manchester;맨체스터 +mannheim;만하임 +marseille;마르세유 +mazeikiai;마제이카이아이 +messina;메시나 +metz;메스 +milano;밀라노 +montpellier;몽펠리에 +munchen;뮌헨 +naantali;난탈리 +nantes;낭트 +napoli;나폴리 +narva;나르바 +newcastle;뉴캐슬 어폰 타인 +nice;니스 +nurnberg;뉘른베르크 +nynashamn;뉘네스함 +odense;오덴세 +olbia;올비아 +olkiluoto;올킬루오토 +olsztyn;올슈틴 +orebro;외레브로 +oslo;오슬로 +osnabruck;오스나브뤼크 +ostrava;오스트라바 +paldiski;팔디스키 +palermo;팔레르모 +paluel;팔루엘 +panevezys;파네베지스 +paris;파리 +parma;파르마 +parnu;패르누 +pecs;페치 +pescara;페스카라 +petersburg;상트페테르부르크 +plymouth;플리머스 +pori;포리 +poznan;포즈난 +prague;프라하 +pskov;프스코프 +reims;랭스 +rennes;렌 +rezekne;레제크네 +riga;리가 +roma;로마 +roscoff;로스코프 +rostock;로스토크 +rotterdam;로테르담 +salzburg;잘츠부르크 +sassari;사사리 +sheffield;셰필드 +siauliai;샤울라이 +sodertalje;쇠데르텔리에 +sosnovy_bor;소스노비보르 +southampton;사우샘프턴 +stavanger;스타방에르 +stockholm;스톡홀름 +strasbourg;스트라스부르 +stuttgart;슈투트가르트 +suzzara;수자라 +swansea;스완지 +szczecin;슈체친 +szeged;세게드 +tallinn;탈린 +tampere;탐페레 +taranto;타란토 +tartu;타르투 +terni;테르니 +torino;토리노 +toulouse;툴루즈 +travemunde;트라베뮌데 +trelleborg;트렐레보리 +turku;투르쿠 +uppsala;웁살라 +utena;우테나 +valmiera;발미에라 +vasteraas;베스테로스 +vaxjo;벡셰 +venezia;베네치아 +ventspils;벤츠필스 +verona;베로나 +vilnius;빌뉴스 +vyborg;비보르크 +warszawa;바르샤바 +wien;비엔나 +wroclaw;브로츠와프 +zurich;취리히 diff --git a/TS SE Tool/lang/ko-KR/countries_translate.txt b/TS SE Tool/lang/ko-KR/countries_translate.txt new file mode 100644 index 00000000..0de86a39 --- /dev/null +++ b/TS SE Tool/lang/ko-KR/countries_translate.txt @@ -0,0 +1,68 @@ +[ko-KR] ++all;모두 ++unsorted;정렬안함 +austria;오스트리아 +belgium;벨기에 +bulgaria;불가리아 +czech;체코 공화국 +denmark;덴마크 +estonia;에스토니아 +finland;핀란드 +france;프랑스 +germany;독일 +hungary;헝가리 +italy;이탈리아 +latvia;라트비아 +lithuania;리투아니아 +luxembourg;룩셈부르크 +netherlands;네덜란드 +norway;노르웨이 +poland;폴란드 +romania;루마니아 +russia;러시아 +slovakia;슬로바키아 +sweden;스웨덴 +switzerland;스위스 +turkey;터키 +uk;영국 +arizona;애리조나 +california;캘리포니아 +nevada;네바다 +new_mexico;뉴멕시코 +oregon;오리건 +utah;유타 +washington;워싱턴 +aland;올란드 +albania;알바니아 +andorra;안도라 +belarus;벨라루스 +bosnia;보스니아 헤르체코비나 +croatia;크로아티아 +cyprus;키프로스 +faroe;페로 제도 +georgia;조지아 +greece;그리스 +iceland;아이슬란드 +iom;맨 섬 +ireland;아일랜드 +jersey;저지 +liecht;리히텐슈타인 +macedonia;마케도니아 +mnegro;몬테네그로 +moldova;몰도바 +monaco;모나코 +nireland;북 아일랜드 +portugal;포르투갈 +serbia;세르비아 +slovenia;슬로베니아 +spain;스페인 +svalbard;스발바르 +ukraine;우크라이나 +egypt;이집트 +iraq;이라크 +israel;이스라엘 +jordan;요르단 +lebanon;레바논 +saudia;사우디 아라비아 +syria;시리아 +westbank;웨스트 뱅크 diff --git a/TS SE Tool/lang/ko-KR/flag.png b/TS SE Tool/lang/ko-KR/flag.png new file mode 100644 index 00000000..1c46665f Binary files /dev/null and b/TS SE Tool/lang/ko-KR/flag.png differ diff --git a/TS SE Tool/lang/ko-KR/lngfile.txt b/TS SE Tool/lang/ko-KR/lngfile.txt new file mode 100644 index 00000000..1bc2bdf8 --- /dev/null +++ b/TS SE Tool/lang/ko-KR/lngfile.txt @@ -0,0 +1,272 @@ +[ko-KR] +buttonAccept;수락 +buttonAddCustomPath;추가 +buttonAddUserColor;+ 슬롯 +buttonApply;적용 +buttonCancel;취소 +buttonCargoMarketRandomizeCargoCity;랜덤 화물 도시 +buttonCargoMarketRandomizeCargoCompany;화물 회사 랜덤 +buttonCargoMarketResetCargoCity;화물 도시 초기화 +buttonCargoMarketResetCargoCompany;화물 회사 초기화 +buttonChooseFolder;폴더 선택 +buttonClearColor;취소 +buttonCloneProfile;프로필 복제 +buttonConvoyToolsGPSCurrentPositionCopy;사용자 위치 복사 +buttonConvoyToolsGPSCurrentPositionPaste;사용자 위치 붙여넣기 +buttonConvoyToolsGPSStoredGPSPathCopy;GPS 경로 복사 +buttonConvoyToolsGPSStoredGPSPathPaste;GPS 경로 붙여넣기 +buttonConvoyToolsGPSTruckPositionMultySaveCopy;여러 저장에서 트럭 위치 복사 +buttonConvoyToolsGPSTruckPositionMultySavePaste;다른 트럭 위치로 여러 저장 생성 +buttonDBClear;취소 +buttonDBExport;내보내기 +buttonDBImport;들여오기 +buttonEditCPlist;리스트 수정 +buttonExport;내보내기 +buttonExportSettings;내보내기 +buttonFreightMarketAddJob;작업 추가 +buttonFreightMarketClearJobList;작업 취소 +buttonFreightMarketRandomizeCargo;랜덤 +buttonImport;불러오기 +buttonImportSettings;불러오기 +buttonMainAddCustomFolder;사용자 폴더 추가 +buttonMainCloseSave;언로드 +buttonMainDecryptSave;암호 해독 +buttonMainGameSwitchATS;ATS +buttonMainGameSwitchETS;ETS2 +buttonMainLoadSave;불러오기 +buttonMainLoadSaveSteamCloud;스팀 클라우드 비활성화 +buttonMainWriteSave;저장 +buttonPlayerLevelMaximum;최대 >> +buttonPlayerLevelMinimum;<< 최소 +buttonProfilesAndSavesOpenSaveFolder;폴더 열기 +buttonRenameProfile;프로필 이름 변경 +buttonReplaceColors;↑↑↑ 교체 ↑↑↑ +buttonRestoreProfileBackup;프로필 백업 복원 +buttonSave;저장 +buttonSelectFile;파일 선택 ... +buttonShareTruckTruckDetailsCopy;트럭 세부사항 복사 +buttonShareTruckTruckDetailsPaste;트럭 세부사항 붙여넣기 +buttonShareTruckTruckPaintCopy;페인트 복사 +buttonShareTruckTruckPaintPaste;페인트 붙여넣기 +buttonShareTruckWholeTruckCopy;모든 트럭 설정 복사 +buttonShareTruckWholeTruckPaste;모든 트럭 설정 붙여넣기 +buttonUserColorsShareColors;색 공유 +buttonUserCompanyCitiesUnVisit;방문안함 +buttonUserCompanyCitiesVisit;방문함 +buttonUserCompanyGaragesBuy;차고 구매 +buttonUserCompanyGaragesBuyDowngrade;차고 다운그레이드 +buttonUserCompanyGaragesBuyUpgrade;차고 업그레이드 +buttonUserCompanyGaragesManage;차고 매니저 +buttonUserCompanyGaragesSell;차고 판매 +buttonUserCompanyGaragesUpgrade;차고 업그레이드 +buttonUserTrailerSelectCurrent;현재 트레일러 선택 +buttonUserTrailerSwitchCurrent;현재 트레일러 교체 +buttonUserTruckSelectCurrent;현재 트럭 선택 +buttonUserTruckSwitchCurrent;현재 트럭 교체 +checkBoxCreateBackup;백업 .zip 파일 만들기 +checkBoxFreightMarketFilterDestination;필터 대상 +checkBoxFreightMarketFilterSource;필터 소스 +checkBoxFreightMarketRandomDest;무작위 목적지 +checkBoxFullCloning;모든 세이브 복제 +checkBoxMutiCloning;멀티 복제 +checkBoxProfilesAndSavesProfileBackups;프로필 백업 +dialogCaptionNoBackwardCompatibility;이전 버전과의 호환성 없음 +dialogCaptionUnsupportedVersion;테스트되지 않은 저장 파일 버전 +dialogTextNoBackwardCompatibility;저장 파일 버전 {0} 너무 오래되었다.\r\n이 버전의 프로그램은 작업할 수 없습니다..\r\n(저장 파일의 암호를 해독하고 언제든지 수동으로 편집할 수 있습니다.) +dialogTextUnsupportedVersion;저장 파일 버전 {0} 테스트되지 않음.\r\n진행할 수 있습니다, 저장 후 세이브 파일을 손상시킬 수 있습니다.\r\n이 경우 자동 저장 대신 수동 저장을 사용하십시오!\r\n\r\n이 세이브 파일을 로드하시겠습니까? +error_could_not_complete_jobs_loop;작업 루프를 완료할 수 없습니다. +error_could_not_decode_file;프로그램이 파일을 디코딩할 수 없습니다 +error_could_not_find_file;프로그램이 파일을 찾을 수 없습니다 +error_could_not_write_to_file;프로그램이 파일에 쓸 수 없습니다. +error_during_importing_db;데이터베이스를 가져오는 동안 오류가 발생했습니다. +error_exception;프로그램 예외 +error_file_not_decoded;파일이 디코딩되지 않음 +error_file_was_modified;게임에서 파일을 수정 +error_job_parameters_not_filled;모든 작업 매개변수가 채워지지 않았습니다. +error_save_version_not_detected;저장 파일 버전이 감지되지 않았습니다. +error_sql_exception;데이터베이스 예외 +FormAboutBox;정보 {0} +FormAddCustomFolder;사용자 폴더 수정 +FormColorPicker;색 선택기 +FormLicensePlateEdit;번호판 편집기 +FormProfileEditor;포로필 매니저 +FormProfileEditorRenameCloneCloning;복제 +FormProfileEditorRenameCloneRenaming;이름 변경 +FormProfileEditorSettingsImportExportExporting;다음에서 내보내기 {0} +FormProfileEditorSettingsImportExportImporting;다음으로 가져오기 {0} +FormProgramSettings;프로그램 설정 +FormSettings;설정 +FormShareUserColors;사용자 색 공유 +groupBoxDataBase;데이터베이스 +groupBoxFolderType;폴더 종류 +groupBoxGameType;게임 +groupBoxImportedColors;색 가져요기 +groupBoxMainProfilesAndSaves;프로필 및 저장 +groupBoxOptions;옵션 +groupBoxProfilePlayerLevel;플레이어 레벨 +groupBoxProfileSkill;스킬 +groupBoxProfileUserColors;사용자 색 +groupBoxSelectFileExporting;.zip 파일로 압축 +groupBoxSelectFileImporting;.zip 파일로 부터 +groupBoxTargetProfileExporting;...에 넣다 +groupBoxTargetProfileImporting;...에서 가져오기 +groupBoxUserTrailerShareTrailerSettings;트레일러 설정 공유 +groupBoxUserTrailerTrailer;트레일러 +groupBoxUserTrailerTrailerDetails;세부사항 +groupBoxUserTruckShareTruckSettings;트럭 설정 공유 +groupBoxUserTruckTruck;트럭 +groupBoxUserTruckTruckDetails;세부사항 +labelCargoMarketCity;도시 +labelCargoMarketCompany;회사 +labelCargoMarketSource;소스 +labelCheckUpdatesOnStartup;시작 시 업데이트 확인 +labelCity;도시 +labelCountry;국가 +labelCurrency;화폐 +labelDayShort;D +labelDistance;거리 +labelDownloadDescription;최신 버전을 다운로드할 수 있습니다. +labelFreightMarketCargo;화물 +labelFreightMarketCity;도시 +labelFreightMarketCompany;회사 +labelFreightMarketCompanyF;회사 +labelFreightMarketCountryF;나라 +labelFreightMarketDestination;목적지 +labelFreightMarketDistance;전체 경로 길이: +labelFreightMarketFilterMain;필터 +labelFreightMarketSource;출처 +labelFreightMarketTrailer;트레일러 +labelFreightMarketUrgency;중요도 +labelHourShort;h +labelHowtoDescription;사용 방법 +labelJobPickupTime;화물 관련 시간 +labelLicensePlate;번호판 +labelLoopEvery;루프 간격 +labelnew;신형 +labelNewNameCloning;복제된 프로필의 이름: +labelNewNameRenaming;새 프로필 이름: +labelold;구형 +labelOr;- OR - +labelor;or +labelProfileName;프로필 이름: +labelProfileSkill0;ADR +labelProfileSkill1;장거리 +labelProfileSkill2;고부가가치 화물 +labelProfileSkill3;깨지기 쉬운 화물 +labelProfileSkill4;정시 배송 +labelProfileSkill5;친환경 운전 +labelSettings;설정 +labelShowSplashOnStartup;시작 시 시작 화면 표시 +labelSupportedGameVersions;지원되는 게임 버전 +labelTrailerPartNameBody;바디 +labelTrailerPartNameCargo;화물 +labelTrailerPartNameChassis;샤시 +labelTrailerPartNameWheels;휠 +labelTruckDetailsFuel;연료 +labelTruckPartNameCabin;캐빈 +labelTruckPartNameChassis;샤시 +labelTruckPartNameEngine;엔진 +labelTruckPartNameTransmission;변속기 +labelTruckPartNameWheels;휠 +labelUserCompanyCompanyName;회사 이름 +labelUserCompanyGarages;차고 +labelUserCompanyHQcity;본사 +labelUserCompanyMoneyAccount;돈 +labelUserCompanyVisitedCities;방문 도시 +labelUserTrailerLicensePlate;트레일러 번호판 +labelUserTruckLicensePlate;트럭 번호판 +labelVersion;버전 {0} (알파) +labelWeight;중량 +message_database_created;데이터베이스 구조가 생성. +message_database_missing_creating_db;데이터베이스 파일이 없습니다. 데이터베이스 생성... +message_database_missing_creating_db_structure;데이터베이스 파일이 없습니다. 데이터베이스 구조 생성... +message_decoding_save_file;세이브 파일 디코딩... +message_exporting_database;데이터베이스 내보내기... +message_file_saved;파일 저장. +message_importing_database;데이터베이스 불러오기... +message_loading_save_file;세이브파일 불러오기... +message_no_matching_cities;필터 설정과 일치하는 도시가 없습니다.. +message_operation_finished;작업 완료. +message_preparing_data;데이터 준비... +message_saving_file;파일 저장... +radioButtonProfileFolderType;프로필 폴더 +radioButtonRootFolderType;루트 폴더 +radioButtonSaveFolderType;저장 폴더 +radioButtonUnknownFolderType;알려지지 않음 +stringCargoContainer;(Container) +stringDriverShort;D +stringKilograms;kg +stringKilometers;Km +stringKilometersShort;km +stringLarge;대형 +stringMiles;mile +stringMilesShort;mi +stringNot owned;소유 안함 +stringPounds;lb +stringSmall;소형 +stringTiny;초소형 +stringTrailerShort;T +stringVehicleShort;V +tabPageCargoMarket;화물 시장 +tabPageCompany;회사 +tabPageConvoyTools;콘보이 툴 +tabPageFreightMarket;배송 시장 +tabPageProfile;프로필 +tabPageTrailer;트레일러 +tabPageTruck;트럭 +toolStripMenuItemAbout;정보 +toolStripMenuItemCheckUpdates;업데이트 확인 +toolStripMenuItemCreateTrFile;번역 만들기 +toolStripMenuItemDownload;다운로드 +toolStripMenuItemExit;닫기 +toolStripMenuItemHelp;도움말 +toolStripMenuItemLanguage;언어 +toolStripMenuItemLocalPDF;로컬 PDF 파일 +toolStripMenuItemProgram;프로그램 +toolStripMenuItemProgramSettings;프로그램 설정 +toolStripMenuItemSettings;설정 +toolStripMenuItemTutorial;사용 방법 +toolStripMenuItemYouTubeVideo;YouTube 영상 +tooltipbuttonADR0;폭발물 +tooltipbuttonADR1;가스 +tooltipbuttonADR2;가연성 액체 +tooltipbuttonADR3;가연성 고체 +tooltipbuttonADR4;독성 및 전염성 물질 +tooltipbuttonADR5;부식성 물질 +tooltipbuttonPlayerLevelMaximum;150 레벨 +tooltipbuttonPlayerLevelMinimum;0 레벨 +tooltipbuttonProfilesAndSavesEditProfile;프로필 매니저 +tooltipbuttonProfilesAndSavesRefreshAll;새로고침 +tooltipbuttonProfilesAndSavesRestoreBackup;백업에서 복원 +tooltipbuttonSkill;{0} 레벨 +tooltipbuttonTrailerElRepair;이 부분 수리 +tooltipbuttonTrailerLicensePlateEdit;번호판 수정 +tooltipbuttonTrailerRepair;전체 트레일러 수리 +tooltipbuttonTruckElRepair;이 부분 수리 +tooltipbuttonTruckLicensePlateEdit;번호판 수정 +tooltipbuttonTruckReFuel;트럭 연료 보급 +tooltipbuttonTruckRepair;전체 트럭 수리 +tooltipbuttonUserCompanyGaragesManage;매니저 +tooltipcomboBoxPrevProfiles;[L] - 로컬 저장\r\n[S] - 스팀 (불러오기 전용)\r\n[C] - 커스텀 +tooltiplabelJobPickupTime;화물이 시장에서 사라질 때까지 시간\r\n(모든 화물에 추가) +tooltipprofileSkillsPanel0;ADR +tooltipprofileSkillsPanel1;장거리 +tooltipprofileSkillsPanel2;고부가가치 화물 +tooltipprofileSkillsPanel3;깨지기 쉬운 화물 +tooltipprofileSkillsPanel4;정시 배송 +tooltipprofileSkillsPanel5;연비 운전 +currencyEUR;유로 +currencyCHF;스위스 프랑 +currencyCZK;체코 크로나 +currencyGBP;파운드 +currencyPLN;폴란드 즈워티 +currencyHUF;헝가리 포린트 +currencyDKK;덴마크 크로네 +currencySEK;스웨덴 크로네 +currencyNOK;노르웨이 크로네 +currencyRUB;러시아 루블 +currencyUSD;미국 달러 +currencyCAD;캐나다 달러 +currencyMXN;멕시코 페소 +unsupportedGameVersionTitle;지원되지 않는 {0} 버전 {1} +unsupportedGameVersionText;당신이 설치한 현재 {0} 버전은 이 도구에 의해 지원되지 않습니다.\n\n설치된 게임 버전: {1}\n\n현재 지원되는 버전: {2} diff --git a/TS SE Tool/lang/ko-KR/urgency_translate.txt b/TS SE Tool/lang/ko-KR/urgency_translate.txt new file mode 100644 index 00000000..6343f988 --- /dev/null +++ b/TS SE Tool/lang/ko-KR/urgency_translate.txt @@ -0,0 +1,4 @@ +[ko-KR] +0;정시 +1;중요 +2;긴급 diff --git a/TS SE Tool/lang/nl-NL/cities_translate.txt b/TS SE Tool/lang/nl-NL/cities_translate.txt new file mode 100644 index 00000000..47ec8319 --- /dev/null +++ b/TS SE Tool/lang/nl-NL/cities_translate.txt @@ -0,0 +1,30 @@ +[nl-NL] +berlin;Berlijn +bratislava;Presburg +budapest;Boedapest +catania;Catánia +firenze;Florence +genova;Genua +goteborg;Gotenburg +kobenhavn;Kopenhagen +koln;Keulen +krakow;Krakau +liege;Luik +lille;Rijsel +london;Londen +luga;Loega +magdeburg;Maagdenburg +milano;Milaan +napoli;Napels +nurnberg;Neurenberg +paris;Parijs +prague;Praag +pskov;Pleskau +riga;Riga +roma;Rome +strasbourg;Straatsburg +taranto;Tarente +torino;Turijn +venezia;Venetië +warszawa;Warschau +wien;Wenen \ No newline at end of file diff --git a/TS SE Tool/lang/nl-NL/countries_translate.txt b/TS SE Tool/lang/nl-NL/countries_translate.txt new file mode 100644 index 00000000..7a3e51b0 --- /dev/null +++ b/TS SE Tool/lang/nl-NL/countries_translate.txt @@ -0,0 +1,55 @@ +[nl-NL] ++all;Alle ++unsorted;Ongersorteerd +austria;Oostenrijk +belgium;België +bulgaria;Bulgarije +czech;Tsjechië +denmark;Denemarken +estonia;Estland +france;Frankrijk +germany;Duitsland +hungary;Hongarije +italy;Italië +latvia;Letland +lithuania;Litouwen +luxembourg;Luxemburg +netherlands;Nederland +norway;Norwegen +poland;Polen +romania;Roemenië +russia;Rusland +slovakia;Slowakije +sweden;Zweden +switzerland;Zwitzerland +turkey;Turkije +uk;Verenigd Koninkrijk +california;Californië +aland;Åland +albania;Albanië +andorra;Andorra +belarus;Wit-Rusland +bosnia;Bosnië en Herzegovina +croatia;Kroatië +faroe;Faeröer +georgia;Georgië +greece;Griekenland +iceland;IJsland +ireland;Ierland +liecht;Liechtenstein +macedonia;Noord-Macedonië +moldova;Moldavië +nireland;Noord-Ierland +serbia;Servië +slovenia;Slovenië +spain;Spanje +svalbard;Spitsbergen +ukraine;Ukraïne +egypt;Egypte +iraq;Irak +israel;Israël +jordan;Jordanië +lebanon;Libanon +saudia;Saudi-Arabië +syria;Syrië +westbank;Westelijke Jordaanoever diff --git a/TS SE Tool/lang/nl-NL/flag.png b/TS SE Tool/lang/nl-NL/flag.png new file mode 100644 index 00000000..58aa2620 Binary files /dev/null and b/TS SE Tool/lang/nl-NL/flag.png differ diff --git a/TS SE Tool/lang/nl-NL/lngfile.txt b/TS SE Tool/lang/nl-NL/lngfile.txt new file mode 100644 index 00000000..e9bbef31 --- /dev/null +++ b/TS SE Tool/lang/nl-NL/lngfile.txt @@ -0,0 +1,161 @@ +[nl-NL] +buttonAddCustomPath;Toevoegen +buttonCancel;Annuleren +buttonCargoMarketRandomizeCargoCity;Willekeurige Vrachtlijst +buttonCargoMarketRandomizeCargoCompany;Willekeurige Vrachtlijst +buttonCargoMarketResetCargoCity;Reset Vrachtlijst +buttonCargoMarketResetCargoCompany;Reset Vrachtlijst +buttonChooseFolder;Kies map +buttonConvoyToolsGPSCurrentPositionCopy;Kopieer huidige positie +buttonConvoyToolsGPSCurrentPositionPaste;Plak huidige positie +buttonConvoyToolsGPSStoredGPSPathCopy;Kopieer GPS pad +buttonConvoyToolsGPSStoredGPSPathPaste;Plak GPS pad +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Kopieer truck positie van meerdere opslagbestanden +buttonConvoyToolsGPSTruckPositionMultySavePaste;Maak meerdere opslagbestanden met verschillende truck posities +buttonDBExport;Exporteren +buttonDBImport;Importeren +buttonEditCPlist;Wijzig lijst +buttonExport;Exporteren +buttonFreightMarketAddJob;Voeg Job toe aan lijst +buttonFreightMarketClearJobList;Lijst legen +buttonImport;Importeren +buttonMainAddCustomFolder;Aangepaste map toevoegen +buttonMainDecryptSave;Decoderen +buttonMainLoadSave;Laden +buttonMainWriteSave;Opslaan +buttonProfilesAndSavesOpenSaveFolder;Open Map +buttonReplaceColors;↑↑↑ Vervangen ↑↑↑ +buttonSave;Opslaan +buttonShareTruckTruckDetailsCopy;Kopieer Truck Datails +buttonShareTruckTruckDetailsPaste;Plak Truck Details +buttonShareTruckTruckPaintCopy;Kopieer Verf Instellingen +buttonShareTruckTruckPaintPaste;Plak Verf Instellingen +buttonShareTruckWholeTruckCopy;Kopieer Alle Truck Instellingen +buttonShareTruckWholeTruckPaste;Plak Alle Truck Instellingen +buttonUserColorsShareColors;Deel kleuren +buttonUserCompanyCitiesUnVisit;Niet bezoeken +buttonUserCompanyCitiesVisit;Bezoeken +buttonUserCompanyGaragesBuy;Koop +buttonUserCompanyGaragesBuyUpgrade;Kopen en Upgraden +buttonUserCompanyGaragesManageBeheer +buttonUserCompanyGaragesSell;Verkoop +buttonUserTrailerSelectCurrent;Selecteer Huidige Trailer +buttonUserTrailerSwitchCurrent;Instellen als Huidige Trailer +buttonUserTruckSelectCurrent;Huidige +buttonUserTruckSwitchCurrent;Wissel huidige Truck naar deze Truck +error_could_not_complete_jobs_loop;Kon Jobs loop niet afmaken +error_could_not_decode_file;Programma kon bestand niet decoderen +error_could_not_find_file;Programma kon bestand niet vinden +error_could_not_write_to_file;Programma kon niet naar bestand schrijven +error_during_importing_db;Fout tijdens importeren van DataBase +error_exception;Programma Uitzondering +error_file_not_decoded;Bestand niet gedecodeerd +error_file_was_modified;Bestand was veranderd door spel +error_job_parameters_not_filled;Niet alle job parameters zijn ingevuld +error_save_version_not_detected;Opslagbestandversie niet gevonden +error_sql_exception;DataBase Uitzondering +FormAboutBox;Over {0} +FormAddCustomFolder;Wijzig Aangepaste mappen +FormColorPicker;Kleurenkiezer +FormSettings;Instellingen +FormShareUserColors;Deel Gebruikerskleuren +groupBoxFolderType;Maptype +groupBoxImportedColors;Geïmporteerde kleuren +groupBoxMainProfilesAndSaves;Profielen en Opslagbestanden +groupBoxProfilePlayerLevel;Spelersniveau +groupBoxProfileSkill;Vaardigheden +groupBoxProfileUserColors;Gebruikerskleuren +groupBoxUserTrailerShareTrailerSettings;Deel Trailer Instellingen +groupBoxUserTruckShareTruckSettings;Details Truck Instellingen +labelCargoMarketCity;Stad +labelCargoMarketCompany;Bedrijf +labelCargoMarketSource;Afkomst +labelCity;Stad +labelCurrency;Valuta +labelDistance;Afstand +labelDownloadDescription;De laatste versie is te krijgen bij +labelFreightMarketCargo;Vracht +labelFreightMarketCity;Stad +labelFreightMarketCompany;Bedrijf +labelFreightMarketCompanyF;Bedrijf +labelFreightMarketCountryF;Land +labelFreightMarketDestination;Bestemming +labelFreightMarketDistance;Totale afstand: +labelFreightMarketSource;Afkomst +labelFreightMarketUrgency;Urgentie +labelHowtoDescription;Hoe te gebruiken +labelJobPickupTime;Vracht tijd +labelLoopEvery;Loop voor elke +labelnew;nieuw +labelold;oud +labelor;of +labelProfileSkill1;Lange afstand +labelProfileSkill2;Waardevolle vracht +labelProfileSkill3;Breekbare vracht +labelProfileSkill4;Just-In-Time Levering +labelProfileSkill5;Milieuvriendelijk rijden +labelSupportedGameVersions;Ondersteunde spelversies +labelTrailerPartNameBody;Opbouw +labelTrailerPartNameCargo;Vracht +labelTrailerPartNameWheels;Wielen +labelTruckDetailsFuel;Brandstof +labelTruckPartNameCabin;Cabine +labelTruckPartNameEngine;Motor +labelTruckPartNameTransmission;Versnellingsbak +labelTruckPartNameWheels;Wielen +labelUserCompanyCompanyName;Bedrijfsnaam +labelUserCompanyHQcity;HQ Stad +labelUserCompanyMoneyAccount;Bankrekening +labelUserCompanyVisitedCities;Bezochte steden +labelUserTrailerLicensePlate;Kentekenplaat +labelUserTruckLicensePlate;Kentekenplaat +labelVersion;Versie {0} (alpha) +message_database_created;Databasestructuur gemaakt. +message_database_missing_creating_db;Databasebestand niet aanwezig. Database aanmaken... +message_database_missing_creating_db_structure;Databasebestand is niet aanwezig. Databasestructuur aanmaken... +message_decoding_save_file;Opslagbestand decoderen... +message_exporting_database;DataBase exporteren... +message_file_saved;Bestand opgeslagen. +message_importing_database;DataBase importeren... +message_loading_save_file;Opslagbestand laden... +message_no_matching_cities;Geen steden gevonden met filterinstellingen. +message_operation_finished;Taak volbracht. +message_preparing_data;Data voorbereiden... +message_saving_file;Bestand opslaan... +radioButtonProfileFolderType;Profielmap +radioButtonRootFolderType;Root map +radioButtonSaveFolderType;Opslagmap +radioButtonUnknownFolderType;Onbekend +stringKilometers;Kilometers +stringLarge;Groot +stringMiles;Mijl +stringNot owned;Niet in bezit +stringSmall;Klein +stringTiny;Minuscuul +tabPageCargoMarket;Ladingmarkt +tabPageCompany;Bedrijf +tabPageConvoyTools;Konvooien +tabPageFreightMarket;Vrachtencentrum +tabPageProfile;Profiel +toolStripMenuItemAbout;Over +toolStripMenuItemCreateTrFile;Maak vertaling +toolStripMenuItemExit;Afsluiten +toolStripMenuItemLanguage;Taal +toolStripMenuItemProgram;Programma +toolStripMenuItemSettings;Instellingen +tooltipbuttonProfilesAndSavesRefreshAll;Verversen +currencyEUR;Euro +currencyCHF; Zwitsers Frank +currencyCZK; Tsjechische Kroon +currencyGBP; Britse Pond +currencyPLN; Poolse Złoty +currencyHUF; Hongaarse Forint +currencyDKK; Deense Krone +currencySEK; Zweedse Kroon +currencyNOK; Noorse Krone +currencyRUB; Russische Roebel +currencyUSD; Amerikaanse Dollar +currencyCAD; Canadese Dollar +currencyMXN; Mexicaanse Peso +unsupportedGameVersionTitle;Ondersteunde {0} Versie {1} +unsupportedGameVersionText;De door u geïnstalleerde {0} versie wordt momenteel niet ondersteund door dit hulpmiddel.\n\nGeïnstalleerde Spelversie: {1}\n\nMomenteel Ondersteunde Versies: {2} diff --git a/TS SE Tool/lang/nl-NL/urgency_translate.txt b/TS SE Tool/lang/nl-NL/urgency_translate.txt new file mode 100644 index 00000000..7fafd048 --- /dev/null +++ b/TS SE Tool/lang/nl-NL/urgency_translate.txt @@ -0,0 +1,4 @@ +[nl-NL] +0;Standaard +1;Belangrijk +2;Dringend diff --git a/TS SE Tool/lang/pl-PL/cities_translate.txt b/TS SE Tool/lang/pl-PL/cities_translate.txt new file mode 100644 index 00000000..f0dbd686 --- /dev/null +++ b/TS SE Tool/lang/pl-PL/cities_translate.txt @@ -0,0 +1,192 @@ +[pl-PL] +aberdeen;Aberdeen +amsterdam;Amsterdam +berlin;Berlin +bern;Berno +birmingham;Birmingham +bratislava;Bratysława +bremen;Brema +brno;Brno +brussel;Bruksela +calais;Calais +cambridge;Cambridge +cardiff;Cardiff +carlisle;Carlisle +dijon;Dijon +dortmund;Dortmund +dover;Dover +dresden;Drezno +duisburg;Duisburg +dusseldorf;Düsseldorf +edinburgh;Edynburg +erfurt;Erfurt +felixstowe;Felixstowe +frankfurt;Frankfurt nad Menem +geneve;Genewa +glasgow;Glasgow +graz;Graz +grimsby;Grimsby +groningen;Groningen +hamburg;Hamburg +hannover;Hanower +innsbruck;Innsbruck +kassel;Kassel +kiel;Kilonia +klagenfurt;Klagenfurt am Wörthersee +koln;Kolonia +leipzig;Lipsk +liege;Liège +lille;Lille +linz;Linz +liverpool;Liverpool +london;Londyn +luxembourg;Luksemburg +lyon;Lyon +magdeburg;Magdeburg +manchester;Manchester +mannheim;Mannheim +metz;Metz +milano;Mediolan +munchen;Monachium +newcastle;Newcastle upon Tyne +nurnberg;Norymberga +osnabruck;Osnabrück +paris;Paryż +plymouth;Plymouth +poznan;Poznań +prague;Praga +reims;Reims +rostock;Rostock +rotterdam;Rotterdam +salzburg;Salzburg +sheffield;Sheffield +southampton;Southampton +strasbourg;Strasburg +stuttgart;Stuttgart +swansea;Swansea +szczecin;Szczecin +torino;Turyn +travemunde;Travemünde +venezia;Wenecja +verona;Werona +wien;Wiedeń +wroclaw;Wrocław +zurich;Zurych +bialystok;Białystok +budapest;Budapeszt +bystrica;Bańska Bystrzyca +debrecen;Debreczyn +gdansk;Gdańsk +katowice;Katowice +kosice;Koszyce +krakow;Kraków +lodz;Łódź +lublin;Lublin +olsztyn;Olsztyn +ostrava;Ostrawa +pecs;Pecz +szeged;Segedyn +warszawa;Warszawa +aalborg;Aalborg +bergen;Bergen +esbjerg;Esbjerg +frederikshv;Frederikshavn +gedser;Gedser +goteborg;Göteborg +helsingborg;Helsingborg +hirtshals;Hirtshals +jonkoping;Jönköping +kalmar;Kalmar +kapellskar;Kapellskär +karlskrona;Karlskrona +kobenhavn;Kopenhaga +kristiansand;Kristiansand +linkoping;Linköping +malmo;Malmö +nynashamn;Nynäshamn +odense;Odense +orebro;Örebro +oslo;Oslo +sodertalje;Södertälje +stavanger;Stavanger +stockholm;Sztokholm +trelleborg;Trelleborg +uppsala;Uppsala +vasteraas;Västerås +vaxjo;Växjö +alban;Saint-Alban-du-Rhône +bordeaux;Bordeaux +bourges;Bourges +brest;Brest +civaux;Civaux +clermont;Clermont-Ferrand +golfech;Golfech +larochelle;La Rochelle +laurent;Saint-Laurent +lehavre;Hawr +lemans;Le Mans +limoges;Limoges +marseille;Marsylia +montpellier;Montpellier +nantes;Nantes +nice;Nicea +paluel;Paluel +rennes;Rennes +roscoff;Roscoff +toulouse;Tuluza +ancona;Ankona +bari;Bari +bologna;Bolonia +cagliari;Cagliari +cassino;Cassino +catania;Katania +catanzaro;Catanzaro +firenze;​​Florencja +genova;Genua +livorno;Livorno +messina;Mesyna +napoli;Neapol +olbia;Olbia +palermo;Palermo +parma;Parma +pescara;Pescara +roma;Rzym +sassari;Sassari +suzzara;Suzzara +taranto;Tarent +terni;Terni +daugavpils;Dyneburg +helsinki;Helsinki +kaliningrad;Kaliningrad +kaunas;Kowno +klaipeda;Kłajpeda +kotka;Kotka +kouvola;Kouvola +kunda;Kunda +lahti;Lahti +liepaja;Lipawa +loviisa;Loviisa +luga;Ługa +mazeikiai;Możejki +naantali;Naantali +narva;Narwa +olkiluoto;Olkiluoto +paldiski;Paldiski +panevezys;Poniewież +parnu;Parnawa +petersburg;Sankt Petersburg +pori;Pori +pskov;Psków +rezekne;Rzeżyca +riga;Ryga +siauliai;Szawle +sosnovy_bor;Sosnowy Bór +tallinn;Tallinn +tampere;Tampere +tartu;Tartu +turku;Turku +utena;Uciana +valmiera;Valmiera +ventspils;Windawa +vilnius;Wilno +vyborg;Wyborg \ No newline at end of file diff --git a/TS SE Tool/lang/pl-PL/countries_translate.txt b/TS SE Tool/lang/pl-PL/countries_translate.txt new file mode 100644 index 00000000..0e1f744f --- /dev/null +++ b/TS SE Tool/lang/pl-PL/countries_translate.txt @@ -0,0 +1,66 @@ +[pl-PL] +austria;Austria +belgium;Belgia +bulgaria;Bułgaria +czech;Czechy +denmark;Dania +estonia;Estonia +finland;Finlanda +france;Francja +germany;Niemcy +hungary;Węgry +italy;Włochy +latvia;Łotwa +lithuania;Litwa +luxembourg;Luksemburg +netherlands;Holandia +norway;Norwegia +poland;Polska +romania;Rumunia +russia;Rosja +slovakia;Słowacja +sweden;Szwecja +switzerland;Szwajcaria +turkey;Turcja +uk;Wielka Brytania +arizona;Arizona +california;Kalifornia +nevada;Nevada +new_mexico;Nowy Meksyk +oregon;Oregon +utah;Utah +washington;Waszyngton +aland;Wyspy Alandzkie +albania;Albania +andorra;Andora +belarus;Białoruś +bosnia;Bośnia i Hercegowina +croatia;Chorwacja +cyprus;Cypr +faroe;Wyspy Owcze +georgia;Gruzja +greece;Grecja +iceland;Islandia +iom;Wyspa Man +ireland;Irlandia +jersey;Jersey +liecht;Liechtenstein +macedonia;Macedonia Północna +mnegro;Czarnogóra +moldova;Mołdawia +monaco;Monako +nireland;Irlandia Północna +portugal;Portugalia +serbia;Serbia +slovenia;Słowenia +spain;Hiszpania +svalbard;Svalbard +ukraine;Ukraina +egypt;Egipt +iraq;Irak +israel;Izrael +jordan;Jordania +lebanon;Liban +saudia;Arabia Saudyjska +syria;Syria +westbank;Zachodni Brzeg \ No newline at end of file diff --git a/TS SE Tool/lang/pl-PL/flag.png b/TS SE Tool/lang/pl-PL/flag.png new file mode 100644 index 00000000..0753bce4 Binary files /dev/null and b/TS SE Tool/lang/pl-PL/flag.png differ diff --git a/TS SE Tool/lang/pl-PL/lngfile.txt b/TS SE Tool/lang/pl-PL/lngfile.txt new file mode 100644 index 00000000..3f69fe45 --- /dev/null +++ b/TS SE Tool/lang/pl-PL/lngfile.txt @@ -0,0 +1,181 @@ +[pl-PL] +buttonAddCustomPath;Dodaj +buttonCancel;Anuluj +buttonCargoMarketRandomizeCargoCity;Losowe miasto +buttonCargoMarketRandomizeCargoCompany;Losowa firma +buttonCargoMarketResetCargoCity;Resetuj miasto +buttonCargoMarketResetCargoCompany;Resetuj firmę +buttonChooseFolder;Wybierz folder +buttonClearColor;Wyczyść kolor +buttonConvoyToolsGPSCurrentPositionCopy;Kopiuj obecną pozycję +buttonConvoyToolsGPSCurrentPositionPaste;Wklej obecną pozycję +buttonConvoyToolsGPSStoredGPSPathCopy;Kopiuj ścieżkę GPS +buttonConvoyToolsGPSStoredGPSPathPaste;Wklej ścieżkę GPS +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Kopiuj pozycję ciężarówki z wielu zapisów +buttonConvoyToolsGPSTruckPositionMultySavePaste;Stwórz wiele zapisów z różnymi pozycjami ciężarówki +buttonDBClear;Wyczyść +buttonDBExport;Eksportuj +buttonDBImport;Importuj +buttonEditCPlist;Edytuj listę +buttonExport;Eksportuj +buttonFreightMarketAddJob;Dodaj pracę do listy +buttonFreightMarketClearJobList;Wyczyść listę +buttonFreightMarketRandomizeCargo;Losuj +buttonImport;Importuj +buttonMainAddCustomFolder;Dodaj niestandardowy folder +buttonMainDecryptSave;Odszyfruj zapis +buttonMainLoadSave;Załaduj zapis +buttonMainWriteSave;Zapisz +buttonProfilesAndSavesOpenSaveFolder;Otwórz folder +buttonReplaceColors;↑↑↑ Zamień ↑↑↑ +buttonSave;Zapisz +buttonShareTruckTruckDetailsCopy;Kopiuj detale ciężarówki +buttonShareTruckTruckDetailsPaste;Wklej detale ciężarówki +buttonShareTruckTruckPaintCopy;Kopiuj ustawienia malowania +buttonShareTruckTruckPaintPaste;Wklej ustawienia malowania +buttonShareTruckWholeTruckCopy;Kopiuj wszystkie ustawienia ciężarówki +buttonShareTruckWholeTruckPaste;Wklej wszystkie ustawienia ciężarówki +buttonUserColorsShareColors;Udostępnij kolory +buttonUserCompanyCitiesUnVisit;Cofnij odwiedzenie miasta +buttonUserCompanyCitiesVisit;Odwiedź wybrane miasto +buttonUserCompanyGaragesBuy;Kup garaż +buttonUserCompanyGaragesBuyDowngrade;Cofnij ulepszenie +buttonUserCompanyGaragesBuyUpgrade;Kup i ulepsz +buttonUserCompanyGaragesManage;Zarządzaj garażami +buttonUserCompanyGaragesSell;Sprzedaj garaż +buttonUserCompanyGaragesUpgrade;Ulepsz garaż +buttonUserTrailerSelectCurrent;Wybierz obecną naczepę +buttonUserTrailerSwitchCurrent;Zmień obecną naczepę +buttonUserTruckSelectCurrent;Wybierz obecną ciężarówkę +buttonUserTruckSwitchCurrent;Zmień ciężarówkę na wybraną +checkBoxFreightMarketFilterDestination;Filtruj +checkBoxFreightMarketFilterSource;Filtruj +checkBoxProfilesAndSavesProfileBackups;Kopie zapasowe +error_could_not_complete_jobs_loop;Nie udało się ukończyć prac +error_could_not_decode_file;Nie udało się odszyfrować pliku +error_could_not_find_file;Nie udało się znaleźć pliku +error_could_not_write_to_file;Nie udało się zapisać do pliku +error_during_importing_db;Błąd podczas importowania bazy danych +error_exception;Wyjątek programu +error_file_not_decoded;Plik nieodszyfrowany +error_file_was_modified;Plik został zmodyfikowany przez grę +error_job_parameters_not_filled;Nie wszystkie parametry pracy zostały wypełnione +error_save_version_not_detected;Nie wykryto pliku zapisu +error_sql_exception;Wyjątek bazy danych +FormAddCustomFolder;Edytuj niestandardowe foldery +FormColorPicker;Wybieranie koloru +FormSettings;Ustawienia +FormShareUserColors;Udostępnij kolory użytkownika +groupBoxDataBase;Baza danych +groupBoxFolderType;Typ folderu +groupBoxGameType;Gra +groupBoxImportedColors;Importowane kolory +groupBoxMainProfilesAndSaves;Profile i zapisy +groupBoxProfilePlayerLevel;Poziom gracza +groupBoxProfileSkill;Umiejętności +groupBoxProfileUserColors;Kolory użytkownika +groupBoxUserTrailerShareTrailerSettings;Udostępnij ustawienia naczepy +groupBoxUserTrailerTrailer;Naczepa +groupBoxUserTrailerTrailerDetails;Detale +groupBoxUserTruckShareTruckSettings;Udostępnij ustawienia ciężarówki +groupBoxUserTruckTruck;Ciężarówka +groupBoxUserTruckTruckDetails;Detale +Kilometers;Kilometry +labelCargoMarketCity;Miasto +labelCargoMarketCompany;Firma +labelCargoMarketSource;Nadawca +labelCity;miasto +labelCurrency;Waluta +labelDistance;Dystans +labelDownloadDescription;Możesz pobrać najnowszą wersję z +labelFreightMarketCargo;Ładunek +labelFreightMarketCity;Miasto +labelFreightMarketCompany;Firma +labelFreightMarketCompanyF;Firma +labelFreightMarketCountryF;Kraj +labelFreightMarketDestination;Odbiorca +labelFreightMarketDistance;Całkowita długość trasy: +labelFreightMarketFilterMain;Filtruj +labelFreightMarketSource;Nadawca +labelFreightMarketUrgency;Pilność +labelHowtoDescription;Jak korzystać z programu +labelJobPickupTime;Czas na odbiór ładunku +labelLoopEvery;Powtarzaj co +labelnew;nowa +labelold;stara +labelor;lub +labelProfileSkill1;Długodystansowiec +labelProfileSkill2;Ładunek o wysokiej wartości +labelProfileSkill3;Delikatny ładunek +labelProfileSkill4;Dostawa na czas +labelProfileSkill5;Ekologiczna jazda +labelSupportedGameVersions;Wspierane wersje gry +labelTrailerPartNameBody;Nadwozie +labelTrailerPartNameCargo;Ładunek +labelTrailerPartNameChassis;Podwozie +labelTrailerPartNameWheels;Koła +labelTruckDetailsFuel;Paliwo +labelTruckPartNameCabin;Kabina +labelTruckPartNameChassis;Podwozie +labelTruckPartNameEngine;Silnik +labelTruckPartNameTransmission;Skrzynia biegów +labelTruckPartNameWheels;Koła +labelUserCompanyCompanyName;Nazwa firmy +labelUserCompanyGarages;Garaże +labelUserCompanyHQcity;Główna siedziba +labelUserCompanyMoneyAccount;Pieniądze na koncie +labelUserCompanyVisitedCities;Odwiedzone miasta +labelUserTrailerLicensePlate;Tablica +labelUserTruckLicensePlate;Tablica +Large;Duży +message_database_created;Utworzono strukturę bazy danych. +message_database_missing_creating_db;Brak pliku bazy danych. Tworzenie bazy danych... +message_database_missing_creating_db_structure;Brak pliku bazy danych. Tworzenie struktury bazy danych... +message_decoding_save_file;Deszyfrowanie pliku zapisu +message_exporting_database;Eksportowanie bazy danych... +message_file_saved;Zapisano plik. +message_importing_database;Importowanie bazy danych... +message_loading_save_file;Ładowanie pliku zapisu... +message_no_matching_cities;Brak miast pasujących do ustawień filtrów. +message_operation_finished;Zadanie zakończone. +message_preparing_data;Przygotowywanie danych... +message_saving_file;Zapisywanie pliku... +Miles;Mile +Not owned;Not owned +radioButtonProfileFolderType;Folder profilu +radioButtonRootFolderType;Folder główny +radioButtonSaveFolderType;Folder zapisu +radioButtonUnknownFolderType;Nieznany +Small;Mały +tabPageCargoMarket;Rynek ładunków +tabPageCompany;Firma +tabPageConvoyTools;Narzędzia konwoju +tabPageFreightMarket;Rynek przesyłek +tabPageProfile;Profil +tabPageTrailer;Naczepa +tabPageTruck;Ciężarówka +Tiny;Podstawowy +toolStripMenuItemAbout;O nas +toolStripMenuItemCreateTrFile;Stwórz tłumaczenie +toolStripMenuItemDownload;Pobierz +toolStripMenuItemExit;Wyjdź +toolStripMenuItemHelp;Pomoc +toolStripMenuItemLanguage;Język +toolStripMenuItemProgram;Program +toolStripMenuItemSettings;Ustawienia +tooltipbuttonProfilesAndSavesRefreshAll;Odśwież +currencyEUR;Euro +currencyCHF;Szwajcarski frank +currencyCZK;Czeska korona +currencyGBP;Brytyjski funt +currencyPLN;Złoty polski +currencyHUF;Węgierski forint +currencyDKK;Duńska korona +currencySEK;Szwedzka korona +currencyNOK;Norweska korona +currencyRUB;Rosyjski rubel +currencyUSD;Amerikański dolar +currencyCAD;Kanadyjski dolar +currencyMXN;Meksykański peso +unsupportedGameVersionTitle;Nieobsługiwana wersja {0} {1} +unsupportedGameVersionText;Twoja aktualnie zainstalowana wersja {0} nie jest obsługiwana przez ten narzędzie.\n\nZainstalowana wersja gry: {1}\n\nObecnie obsługiwane wersje: {2} diff --git a/TS SE Tool/lang/pl-PL/urgency_translate.txt b/TS SE Tool/lang/pl-PL/urgency_translate.txt new file mode 100644 index 00000000..64714ad4 --- /dev/null +++ b/TS SE Tool/lang/pl-PL/urgency_translate.txt @@ -0,0 +1,4 @@ +[pl-PL] +0;Zwykła +1;Ważna +2;Pilna diff --git a/TS SE Tool/lang/pt-BR/cargo_translate.txt b/TS SE Tool/lang/pt-BR/cargo_translate.txt new file mode 100644 index 00000000..538344c6 --- /dev/null +++ b/TS SE Tool/lang/pt-BR/cargo_translate.txt @@ -0,0 +1,373 @@ +[pt-BR] +acetylene;Acetileno +acid;Ácido +air_mails;Correio aéreo +aircft_tires;Pneus para aeronaves +aircond;Arcondicionado +almond;Amêndoa +ammunition;Munição +apples;Maçãs +apples_c;Maçãs +aromatics;Aromatico +arsenic;Arsênico +asph_miller;Moedor de Asfalto - Writigen 808 +atl_cod_flt;Filé de bacalhau do Atlântico +backfl_prev;Preventores de Retorno +barley;Cevada +basil;Manjericão +beans;Feijões +beef_meat;Carne +beverages;Bebidas +beverages_c;Bebidas +big_bag_seed;Sacos grandes de sementes +boiler_parts;Peça da caldeira (especial) +boric_acid;Ácido bórico +bottle_water;Água engarrafada +bottles;Garrafas vazias +brake_fluid;Fluido de freio +brake_pads;Pastilhas de freio +bricks;Tijolos +bulldozer;Escavadeira +butter;Manteiga +cable;Cabos +cable_reel;Carretel de cabo industrial +can_sardines;Sardinhas enlatadas +canned_beans;Feijões enlatados +canned_beef;Carne enlatada +canned_pork;Carne de porco enlatada +canned_tuna;Atum enlatado +car_balt1;Carros (Báltico 1) +car_balt2;Carros (Báltico 2) +car_it;Carros (Itália) +caravan;Reboque +carb_water;Água com gás +carbn_pwdr;Carbono em pó +carbn_pwdr_c;Carbono em pó +carcomp;Componentes de carro +carrots;Cenouras +carrots_c;Cenouras +cars_big;Carros grandes +cars_fr;Carros (França) +cars_mix;Carros mistos +cars_small;Carros pequenos +case600;Trator de esteiras +cat_785c;Raspador +cat627;Chassi de caminhão de transporte (Especial) +cauliflower;Couve-flor +caviar;Caviar +cement;Cimento +cheese;Queijo +chem_sorb_c;Sorbente químico +chem_sorbent;Sorbente químico +chemicals;Produtos quimicos +chewing_gums;Pastilhas elásticas +chicken_meat;Carne de frango +chimney_syst;Sistemas de chaminé +chlorine;Cloro +chocolate;Chocolate +clothes;Roupas +clothes_c;Roupas +coal;Carvão +coconut_milk;Leite de côco +coconut_oil;Óleo de côco +coil;Bobina de metal +colors;Cores +comp_process;Processadores de computador +computers;Computador +concen_juice;Sucos concentrados +concr_beams;Vigas de concreto +concr_beams2;Vigas de concreto +concr_cent;Centralização de concreto +concr_stair;Escadas em concreto +condensator;Capacitor industrial (Especial) +const_house;Materiais de construção +cont_trees;Árvores em contêineres +contamin;Material contaminado +copp_rf_gutt;Calhas pluviais em cobre +corks;Cortiças +cott_cheese;Queijo tipo cottage +ctubes;Tubos de concreto +ctubes_b;Tubos de concreto_b +curtains;Cortinas +cut_flowers;Flores cortadas +cyanide;Cianeto +desinfection;Desinfetante +diesel;Diesel +diesel_gen;Geradores a diesel +digger1000;Escavadeira 1000 +digger500;Escavadeira 500 +diggers;Escavadeiras +dozer;Trator de esteira - Z35K +driller;Perfurador - D-50 +dry_fruit;Frutas secas +dry_milk;Leite em pó +dryers;Secadoras +drymilk;Leite em pó +dynamite;Dinamite +elect_wiring;Fiação elétrica +electro_comp;Componentes eletrônicos +electronics;Eletrônicos +emp_wine_bar;Barris de vinho vazios +emp_wine_bot;Garrafas de vinho vazias +empty_barr;Barris vazios +empty_palet;Paletes vazias +emptytank;Tanque reservatório +ethane;Etano +ex_bucket;Caçamba para escavadeira (Especial) +excav_soil;Solo escavado +excavator;Escavadeira +excavator_bucket;Caçamba para escavadeira (Especial) +exhausts_c;Sistemas de exaustão +explosives;Explosivos +fertilizer;Fertilizante +fireworks;Fogos de artifício +fish_chips;Palito de peixe +floorpanels;Painéis de piso +flour;Farinha +fluorine;Flúor +food;Alimentos +forklifts;Empilhadeiras +fresh_fish;Peixe fresco +froz_octopi;Polvo congelado +frozen_food;Comida congelada +frozen_fruit;Frutas congeladas +frozen_hake;Merluza congelada +frozen_veget;Vegetais congelados +frsh_herbs;Ervas frescas +fruits;Frutas +fuel_oil;Óleo combustível +fuel_tanks;Tanques de combustível +fueltanker;Petroleiro +furniture;Mobília +garlic;Alho +glass;Painéis de vidro +glass_packed;Vidro embalado +gnocchi;Nhoque +goat_cheese;Queijo de cabra +grain;Grão +granite_cube;Cubos de granito +grapes;Uvas +graph_grease;Graxa de grafite +grass_rolls;Rolos de grama +gravel;Cascalho +guard_rails;Corrimão +gummy_bears;Gomas +gypsum;Gesso +harvest_bins;Caixas de colheita +hay;Feno +hchemicals;Produtos químicos quentes +heat_exch;Permutador de calor (Especial) +heat_exchanger;Permutador de calor (Especial) +helicopter;Helicóptero - Ring-429 +hi_volt_cabl;Cabos de alta tensão +hipresstank;Tanque de pressão +hmetal;Metais pesados +home_acc;Acessórios para casa +honey;Mel +house_pref;Casa pré-fabricada +househd_appl;Electrodomésticos +hwaste;Resíduos hospitalares +hydrochlor;Ácido clorídrico +hydrogen;Hidrogênio +ibc_cont;Contentores IBC +icecream;Sorvete +iced_coffee;Café gelado enlatado +iron_pipes;Tubos de ferro +iveco_vans;Vans +kalmar240;Empilhadeira +kalmar240_s;Chassi de empilhadeira +kerosene;Querosene +ketchup;Ketchup +komatsu155;Escavadeira +lamb_stom;Buchos de cordeiro +largetubes;Tubos grandes +lattice;Escada para construção (Especial) +lavender;Lavanda +lead;Chumbo +limestone;Calcário +limonades;Limonada +live_catt_fr;Gado vivo (França) +live_cattle;Gado vivo +liver_paste;Pasta de fígado +locomotive;Locomotiva - Vossloh G6 +logs;Tronco cortado +lpg;Gás liquefeito de petróleo +lumber;Madeira +lumber_b;Madeira_b +lye;Detergente +m_59_80_r63;Pneus enormes (Especiais) +machine_pts;Peças de máquinas +magnesium;Magnésio +maple_syrup;Aminoácidos +marb_blck;Blocos de mármore_b +marb_blck2;Blocos de mármore +marb_slab;Laje de mármore +mason_jars;Pote de conserva +mbt;Barreira móvel +meat;Carne +med_equip;Equipamento médico +med_vaccine;Vacinas médicas +mercuric;Ácido mercúrico +metal_beams;Vigas de metal +metal_cans;Latas de metal +metal_center;Centro de metal +metal_pipes;Tubos de ferro_b +michelin_59_80_r63;Pneus enormes (Especiais) +milk;Leite +mobile_crane;Guindaste móvel - Rex-Tex 45 +mondeos;Carros +moor_buoy;Boia de amarração +mortar;Argamassa +moto_tires;Pneus para motos +motor_oil;Óleo de motor +motor_oil_c;Óleo de motor C +motorcycles;Motocicletas +mozzarela;Mussarela +mtl_coil;Bobina de metal +mystery_box;Peça tecnológica maciça (Especial) +mystery_cyl;Dispositivo de alta tecnologia (Especial) +natur_rubber;Borracha natural +neon;Néon +nitrocel;Nitrocelulose +nitrogen;Nitrogênio +nonalco_beer;Cerveja sem álcool +nuts;Nozes +nylon_cord;Cordão de nylon +office_suppl;Material de escritório +oil;Oil +oil_filt_c;Filtros de óleo +oil_filters;Filtros de óleo +olive_oil;Azeite de oliva +olives;Azeitonas +onion;Cebolas +oranges;Laranjas +ore;Minério +outdr_flr_tl;Telhas de assoalho exteriores +overweight;Semi-reboques baixos +packag_food;Comida embalada +paper;Papel de escritório +pasta;Macarrão +pears;Peras +peas;Ervilhas +perfor_frks;Garfo amortecedor +pesticide;Pesticidas +pesto;Pesto +pet_food;Alimentos para animais +pet_food_c;Alimentos para animais +petrol;Gasolina +phosphor;Fósforo branco +pilot_boat;Barco de serviço (Especial) +pipes;Tubos de ferro +plant_substr;Substrato vegetal +plast_film;Rolos de filme plástico +plast_film_c;Rolos de filme plástico +plastic_gra;Grânulos de plástico +plows;Arados +plumb_suppl;Acessórios para canalizações +plums;Ameixas +pnut_butter;Manteiga de amendoim +polyst_box;Caixas de poliestireno +pork_meat;Carne de porco +post_packag;Pacotes de correio +pot_flowers;Flores em vasos +potahydro;Hidróxido de potássio +potassium;Potássio +potatoes;Batatas +precast_strs;Escadas pré-fabricadas +press_sl_val;Válvulas de corrediça de alta pressão +princess;Iate - Queen V39 +propane;Propano +prosciutto;Presunto +protec_cloth;Roupa de proteção +pumps;Bombas +radiators;Radiadores +rawmilk;Leite cru +re_bars;Barras de reforço +refl_posts;Poste refletivo +rice;Arroz +rice_c;Arroz +roadroller;Cilindro +roller;Cilindro - DYNA CC-2200 +roof_tiles;Telhas +roofing_felt;Feltro +rooflights;Iluminação zenital +rye;Centeio +salm_fillet;Filé de salmão +salt_spice_c;Sal e especiarias +salt_spices;Sal e especiarias +sand;Areia +sandwch_pnls;Telhado de painéis sanduíche +sausages;Salsicha +sawpanels;Painéis de serragem +scaffoldings;Andaimes +scania_tr;Caminhões Scania +scooters;Mobiletes +scrap_cars;Carros sucateados +scrap_metals;Sucatas de metal +seal_bearing;Rolamentos vedados +sheep_wool;Lã de ovelha +shock_absorb;Amortecedores +silica;Sílica +silo;Silo gigante (Especial) +smokd_eel;Enguia defumada +smokd_sprats;Arenques defumados +sodchlor;Hipoclorito de sódio +sodhydro;Hidróxido de sódio +sodium;Sódio +soil;Solo +solvents;Solventes +soy_milk;Leite de soja +spher_valves;Válvulas esféricas +sq_tub;Tubos quadrados +steel_cord;Cabo de aço +stone_dust;Pó de pedra +stone_wool;Lã de pedra +stones;Pedras +straw_bales;Fardos de palha +sugar;Açúcar +sulfuric;Ácido sulfúrico +tableware;Louça +terex3160;Guindaste todo-o-terreno +tomatoes;Tomates +toys;Brinquedos +tracks;Esteiras +tractor;Trator - RS-666 +tractors;Tratores +train_part;Material rodante do trem +train_part2;Eixos de trem +transformat;Transformador - PK900 +transformer;Transformador +transmis;Transmissões +truck_batt;Baterias de caminhão +truck_batt_c;Baterias de caminhão +truck_rims;Jantes para camião +truck_rims_c;Jantes para camião +truck_tyres;Pneus para caminhões +tube;Peças de gasodutos +tvs;Televisores +tyres;Pneus +used_battery;Baterias de carro usado +used_pack;Embalagens usadas +used_packag;Embalagens usadas +used_plast;Plásticos usados +used_plast_c;Plásticos usados +vegetable;Legumes +vent_tube;Poço de ventilação +ventilation;Poço de ventilação +vinegar;Vinagre +vinegar_c;Vinagre +volvo_cars;SUVs de luxo +volvo_tr;Caminhões Volvo +wallpanels;Painéis de parede +watermelons;Melancias +wheat;Trigo +windml_eng;Nacele da turbina eólica +windml_tube;Torre de turbina eólica +wirtgen250;Fresadora +wood_bark;Casca de madeira +wooden_beams;Vigas de madeira +wrk_cloth;Roupas de trabalho +wshavings;Aparas de madeira +yacht;Iate +yogurt;Iogurte +young_seed;Mudas diff --git a/TS SE Tool/lang/pt-BR/cities_translate.txt b/TS SE Tool/lang/pt-BR/cities_translate.txt new file mode 100644 index 00000000..01c993b3 --- /dev/null +++ b/TS SE Tool/lang/pt-BR/cities_translate.txt @@ -0,0 +1,31 @@ +[pt-BR] +amsterdam;Amsterdã +berlin;Berlim +brno;Bruno +brussel;Bruxelas +geneve;Genebra +hamburg;Hamburgo +koln;Colônia +london;Londres +luxembourg;Luxemburgo +magdeburg;Magdeburgo +milano;Milão +munchen;Munique +nurnberg;Nuremberg +prague;Praga +rotterdam;Roterdã +strasbourg;Estrasburgo +torino;Turim +wien;Viena +zurich;Zurique +warszawa;Warsaw +goteborg;Gothenburg +kobenhavn;Copenhagen +stockholm;Estocolmo +laurent;São Lourenço +marseille;Marselha +bologna;Bolonha +firenze;Florença +genova;Gênova +napoli;Nápoles +petersburg;São Petersburgo diff --git a/TS SE Tool/lang/pt-BR/companies_translate.txt b/TS SE Tool/lang/pt-BR/companies_translate.txt new file mode 100644 index 00000000..b26877c4 --- /dev/null +++ b/TS SE Tool/lang/pt-BR/companies_translate.txt @@ -0,0 +1,51 @@ +[pt-BR] ++all;Todas +agrominta;Agrominta UAB (Usinas) +agrominta_a;Agrominta UAB (Animais) +batisse_road;Bâtisse (Trabalho na estrada) +batisse_wind;Bâtisse (Turbina de vento) +bit_rd_grg;Bitumen (Garagem) +bit_rd_svc;Bitumen (Serviço) +bit_rd_wrk;Bitumen (Trabalho na estrada) +cemelt_bas;Cemeltex (Base de escavação) +cemelt_fl_ru;Cemeltex (Casa) (ru) +cemelt_fla;Cemeltex (Casa) +cemelt_hal;Cemeltex (Salão) +cemelt_win;Cemeltex (Turbina de vento) +cha_el_mkt;Charged (Mercado) +cha_el_whs;Charged (Armazém) +chm_che_plnt;Chemso Ltd. (Usina) +cm_min_plnt;Coastline Mining (Usina) +cm_min_qry;Coastline Mining (Pedreira) +costruzi_fla;Costruzione di Edifici (Casa) +costruzi_hal;Costruzione di Edifici (Salão) +costruzi_win;Costruzione di Edifici (Turbina eólica) +eviksi;Evikši ZS (Usinas) +eviksi_a;Evikši ZS (Animais) +gal_oil_gst;Gallon Oil (Posto de gasolina) +gal_oil_ref;Gallon Oil (Refinaria) +gm_food_plnt;Global Mills (Fábrica de alimentos) +hs_mkt;Home Store (Mercado) +hs_whs;Home Store (Armazém) +konstnr;KN KonstNorr (Base de escavação) +konstnr_br;KN KonstNorr (Ponte) +konstnr_hs;KN KonstNorr (Casa) +konstnr_wind;KN KonstNorr (Turbina eólica) +onnelik;Õnnelik talu (Usinas) +onnelik_a;Õnnelik talu (Animais) +pns_con_grg;Plaster & Sons (Garagem) +pns_con_whs;Plaster & Sons (Armazém) +scania_dlr;Scania (Revendedora) +scania_fac;Scania (Fábrica) +st_met_whs;Steeler (Armazém) +vm_car_dlr;Voltison (Revendedora) +vm_car_pln;Voltison (Usina) +vm_car_whs;Voltison (Armazém) +volvo_dlr;Volvo (Revendedora) +volvo_fac;Volvo (Fábrica) +wal_food_mkt;Wallbert (Mercado) +wal_food_whs;Wallbert (Armazém) +wal_mkt;Wallbert (Mercado) +wal_whs;Wallbert (Armazém) +zelenye;Zelenye polya (Usinas) +zelenye_a;Zelenye polya (Animais) diff --git a/TS SE Tool/lang/pt-BR/countries_translate.txt b/TS SE Tool/lang/pt-BR/countries_translate.txt new file mode 100644 index 00000000..edbdf8d6 --- /dev/null +++ b/TS SE Tool/lang/pt-BR/countries_translate.txt @@ -0,0 +1,47 @@ +[pt-BR] ++all;Todos ++unsorted;Não classificado +austria;Áustria +belgium;Bélgica +bulgaria;Bulgária +czech;Tcheca +denmark;Dinamarca +estonia;Estônia +finland;Finlândia +france;França +germany;Alemanha +hungary;Hungria +italy;Itália +latvia;Letônia +lithuania;Lituânia +luxembourg;Luxemburgo +netherlands;Holanda +norway;Noruega +poland;Polônia +romania;Romênia +russia;Rússia +slovakia;Eslováquia +sweden;Suécia +switzerland;Suíça +turkey;Turquia +uk;Reino Unido +arizona;Arizona +california;Califórnia +nevada;Nevada +new_mexico;Novo México +oregon;Oregon +utah;Utah +washington;Washington +aland;Ilhas de Aland +andorra;Andorra +belarus;Bielorrússia +croatia;Croácia +faroe;Ilhas Faroé +iceland;Islândia +ireland;Irlanda +liecht;Liechtenstein +moldova;Moldávia +serbia;Sérvia +slovenia;Eslovênia +spain;Espanha +ukraine;Ucrânia diff --git a/TS SE Tool/lang/pt-BR/flag.png b/TS SE Tool/lang/pt-BR/flag.png new file mode 100644 index 00000000..1046d147 Binary files /dev/null and b/TS SE Tool/lang/pt-BR/flag.png differ diff --git a/TS SE Tool/lang/pt-BR/lngfile.txt b/TS SE Tool/lang/pt-BR/lngfile.txt new file mode 100644 index 00000000..23334161 --- /dev/null +++ b/TS SE Tool/lang/pt-BR/lngfile.txt @@ -0,0 +1,181 @@ +[pt-BR] +buttonAddCustomPath;Adicionar +buttonCancel;Cancelar +buttonCargoMarketRandomizeCargoCity;Lista aleatória de carga +buttonCargoMarketRandomizeCargoCompany;Lista aleatória de carga +buttonCargoMarketResetCargoCity;Redefinir lista de carga +buttonCargoMarketResetCargoCompany;Redefinir lista de carga +buttonChooseFolder;Escolher pasta +buttonClearColor;Limpar +buttonConvoyToolsGPSCurrentPositionCopy;Copiar posição atual +buttonConvoyToolsGPSCurrentPositionPaste;Colar posição atual +buttonConvoyToolsGPSStoredGPSPathCopy;Copiar caminho do GPS +buttonConvoyToolsGPSStoredGPSPathPaste;Colar caminho GPS +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Copiar a posição do caminhão de vários salvamentos +buttonConvoyToolsGPSTruckPositionMultySavePaste;Criar múltiplos salvamentos com diferentes posições de caminhão +buttonDBClear;Limpar +buttonDBExport;Exportar +buttonDBImport;Importar +buttonEditCPlist;Edita lista +buttonExport;Exportar +buttonFreightMarketAddJob;Adicionar trabalho à lista +buttonFreightMarketClearJobList;Limpar list +buttonFreightMarketRandomizeCargo;Aleatório +buttonImport;Importar +buttonMainAddCustomFolder;Adicionar pasta personalizada +buttonMainDecryptSave;Descriptografar +buttonMainLoadSave;Carregar +buttonMainWriteSave;Salvar +buttonProfilesAndSavesOpenSaveFolder;Abrir pasta +buttonReplaceColors;↑↑↑ Substituir ↑↑↑ +buttonSave;Salvar +buttonShareTruckTruckDetailsCopy;Copiar detalhes do caminhão +buttonShareTruckTruckDetailsPaste;Colar detalhes do caminhão +buttonShareTruckTruckPaintCopy;Copiar configurações de pintura +buttonShareTruckTruckPaintPaste;Colar configurações de pintura +buttonShareTruckWholeTruckCopy;Copiar todas as configurações do caminhão +buttonShareTruckWholeTruckPaste;Colar todas as configurações do caminhão +buttonUserColorsShareColors;Compartilhar cores +buttonUserCompanyCitiesUnVisit;Desvisitar +buttonUserCompanyCitiesVisit;Visitar +buttonUserCompanyGaragesBuy;Comprar +buttonUserCompanyGaragesBuyDowngrade;Desprimorar +buttonUserCompanyGaragesBuyUpgrade;Comprar e aprimorar +buttonUserCompanyGaragesManage;Gerenciar +buttonUserCompanyGaragesSell;Vender +buttonUserCompanyGaragesUpgrade;Aprimorar +buttonUserTrailerSelectCurrent;Selecionar reboque atual +buttonUserTrailerSwitchCurrent;Definir como reboque atual +buttonUserTruckSelectCurrent;Atual +buttonUserTruckSwitchCurrent;Mudar o caminhão atual para este caminhão +checkBoxFreightMarketFilterDestination;Filtro +checkBoxFreightMarketFilterSource;Filtro +checkBoxFreightMarketRandomDest;ALT +error_could_not_complete_jobs_loop;Não foi possível concluir o circuito de trabalhos +error_could_not_decode_file;Não foi possível decodificar o arquivo +error_could_not_find_file;Não foi possível encontrar o arquivo +error_could_not_write_to_file;Não foi possível salvar o arquivo +error_during_importing_db;Erro durante a importação do Banco de Dados +error_exception;Exceção do programa +error_file_not_decoded;Arquivo não decodificado +error_file_was_modified;O arquivo foi modificado pelo jogo +error_job_parameters_not_filled;Nem todos os parâmetros do trabalho estão preenchidos +error_save_version_not_detected;Versão de arquivo salvo não foi detectado +error_sql_exception;Exceção do Banco de Dados +FormAboutBox;Sobre {0} +FormAddCustomFolder;Editar pastas personalizadas +FormColorPicker;Seletor de cores +FormSettings;Ajustes +FormShareUserColors;Compartilhar cores do usuário +groupBoxDataBase;Banco de Dados +groupBoxFolderType;Tipo de pasta +groupBoxGameType;Jogo +groupBoxImportedColors;Cores importadas +groupBoxMainProfilesAndSaves;Perfis e salvamentos +groupBoxProfilePlayerLevel;Nível do jogador +groupBoxProfileSkill;Habilidades +groupBoxProfileUserColors;Cores do usuário +groupBoxUserTrailerShareTrailerSettings;Compartilhar configurações do reboque +groupBoxUserTrailerTrailer;Reboque +groupBoxUserTrailerTrailerDetails;Detalhes +groupBoxUserTruckShareTruckSettings;Compartilhar configurações do caminhão +groupBoxUserTruckTruck;Caminhão +groupBoxUserTruckTruckDetails;Detalhes +Kilometers;Quilômetros +labelCargoMarketCity;Cidade +labelCargoMarketCompany;Empresa +labelCargoMarketSource;Origem +labelCity;cidade +labelCurrency;Dinheiro +labelDistance;Distância +labelDownloadDescription;Baixe a versão atual em +labelFreightMarketCargo;Carga +labelFreightMarketCity;Cidade +labelFreightMarketCompany;Empresa +labelFreightMarketCompanyF;Empresa +labelFreightMarketCountryF;País +labelFreightMarketDestination;Destino +labelFreightMarketDistance;Comprimento total do caminho: +labelFreightMarketFilterMain;Filtro +labelFreightMarketSource;Origem +labelFreightMarketUrgency;Urgência +labelHowtoDescription;Como usar +labelJobPickupTime;Tempo de relevância da carga +labelLoopEvery;Faça um circuito a cada +labelnew;novo +labelold;antigo +labelor;ou +labelProfileSkill1;Longa distância +labelProfileSkill2;Carga de alto valor +labelProfileSkill3;Carga frágil +labelProfileSkill4;Entregas rápidas +labelProfileSkill5;Ecocondução +labelSupportedGameVersions;Versões suportadas do jogo +labelTrailerPartNameBody;Carroceria +labelTrailerPartNameCargo;Carga +labelTrailerPartNameWheels;Rodas +labelTruckDetailsFuel;Combustível +labelTruckPartNameCabin;Cabine +labelTruckPartNameEngine;Motor +labelTruckPartNameTransmission;Transmissão +labelTruckPartNameWheels;Rodas +labelUserCompanyCompanyName;Nome da empresa +labelUserCompanyGarages;Garagens +labelUserCompanyHQcity;Cidade sede +labelUserCompanyMoneyAccount;Dinheiro da conta +labelUserCompanyVisitedCities;Cidades visitadas +labelUserTrailerLicensePlate;Placa do veículo +labelUserTruckLicensePlate;Placa do veículo +labelVersion;Versão {0} (alpha) +Large;Grande +message_database_created;Estrutura do banco de dados criada. +message_database_missing_creating_db;O arquivo do banco de dados está ausente. Criando banco de dados... +message_database_missing_creating_db_structure;O arquivo do banco de dados está ausente. Criando estrutura do banco de dados... +message_decoding_save_file;Decodificando arquivo salvo... +message_exporting_database;Exportando Banco de Dados... +message_file_saved;Arquivo salvo. +message_importing_database;Importando Banco de Dados... +message_loading_save_file;Carregando arquivo salvo... +message_no_matching_cities;Nenhuma cidade corresponde às configurações de filtro. +message_operation_finished;Tarefa concluída. +message_preparing_data;Preparando dados... +message_saving_file;Salvando arquivo... +Miles;Milhas +Not owned;Não possui +radioButtonProfileFolderType;Pasta do perfil +radioButtonRootFolderType;Pasta raiz +radioButtonSaveFolderType;Salvar pasta +radioButtonUnknownFolderType;Desconhecido +Small;Pequeno +tabPageCargoMarket;Mercado de carga +tabPageCompany;Empresa +tabPageConvoyTools;Ferramentas de comboio +tabPageFreightMarket;Mercado de frete +tabPageProfile;Perfil +tabPageTrailer;Reboque +tabPageTruck;Caminhão +Tiny;Minúsculo +toolStripMenuItemAbout;Sobre +toolStripMenuItemCreateTrFile;Traduzir +toolStripMenuItemDownload;Baixar +toolStripMenuItemExit;Sair +toolStripMenuItemHelp;Ajuda +toolStripMenuItemLanguage;Idioma +toolStripMenuItemProgram;Programa +toolStripMenuItemSettings;Ajustes +tooltipbuttonProfilesAndSavesRefreshAll;Atualizar +currencyEUR;Real +currencyCHF;Franc Suíço +currencyCZK;Koruna Tcheca +currencyGBP;Libra Esterlina +currencyPLN;Złoty Polaco +currencyHUF;Forint Húngaro +currencyDKK;Krone Dinamarquesa +currencySEK;Krona Sueca +currencyNOK;Krone Norueguesa +currencyRUB;Rublo Russo +currencyUSD;Dólar Americano +currencyCAD;Dólar Canadense +currencyMXN;Peso Mexicano +unsupportedGameVersionTitle;Versão {0} Não Suportada {1} +unsupportedGameVersionText;A sua versão atual do jogo {0} não é suportada por este ferramenta.\n\nVersão do Jogo Instalada: {1}\n\nVersões Atualmente Suportadas: {2} diff --git a/TS SE Tool/lang/pt-BR/urgency_translate.txt b/TS SE Tool/lang/pt-BR/urgency_translate.txt new file mode 100644 index 00000000..51e2947c --- /dev/null +++ b/TS SE Tool/lang/pt-BR/urgency_translate.txt @@ -0,0 +1,4 @@ +[pt-BR] +0;Padrão +1;Importante +2;Urgente diff --git a/TS SE Tool/lang/pt-PT/flag.png b/TS SE Tool/lang/pt-PT/flag.png new file mode 100644 index 00000000..34388972 Binary files /dev/null and b/TS SE Tool/lang/pt-PT/flag.png differ diff --git a/TS SE Tool/lang/pt-PT/lngfile.txt b/TS SE Tool/lang/pt-PT/lngfile.txt new file mode 100644 index 00000000..77b794bf --- /dev/null +++ b/TS SE Tool/lang/pt-PT/lngfile.txt @@ -0,0 +1,129 @@ +[pt-PT] +buttonCargoMarketRandomizeCargoCity;Lista de Carga aleatoria +buttonCargoMarketRandomizeCargoCompany;Lista de Carga aleatoria +buttonCargoMarketResetCargoCity;Reset da lista de Cargas +buttonCargoMarketResetCargoCompany;Reset da lista de Cargas +buttonConvoyToolsGPSCurrentPositionCopy;Copiar posicao currente +buttonConvoyToolsGPSCurrentPositionPaste;Colar posicao currente +buttonConvoyToolsGPSStoredGPSPathCopy;Copiar rota do GPS +buttonConvoyToolsGPSStoredGPSPathPaste;Colar rota do GPS +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Copiar posicao currente do camiao de varios saves +buttonConvoyToolsGPSTruckPositionMultySavePaste;Criando varios saves com as posicoes do camiao +buttonFreightMarketAddJob;Adicionar trabalho a lista +buttonFreightMarketClearJobList;Limpar Lista +buttonFreightMarketRandomizeCargo;Aleatorio +buttonMainAddCustomFolder;Adicionar pasta personalizada +buttonMainDecryptSave;Decifrando +buttonMainLoadSave;Carregar +buttonMainWriteSave;Guardar +buttonProfilesAndSavesOpenSaveFolder;Abrir Pasta +buttonShareTruckTruckDetailsCopy;Copiar detalhes do Camiao +buttonShareTruckTruckDetailsPaste;Colar detalhes do Camiao +buttonShareTruckTruckPaintCopy;Copiar detalhes da pintura +buttonShareTruckTruckPaintPaste;Colar detalhes da pintura +buttonShareTruckWholeTruckCopy;Copiar todos os detalhes do camiao +buttonShareTruckWholeTruckPaste;Colar todos os detalhes do camiao +buttonUserColorsShareColors;Partilhar cores +buttonUserCompanyCitiesUnVisit;Por visitar +buttonUserCompanyCitiesVisit;Visitado +buttonUserCompanyGaragesBuy;Comprar +buttonUserCompanyGaragesBuyUpgrade;Comprar e fazer upgrade +buttonUserCompanyGaragesSell;Vender +buttonUserTrailerSelectCurrent;Selecionar reboque actual +buttonUserTrailerSwitchCurrent;Por como reboque actual +buttonUserTruckSelectCurrent;Actual +buttonUserTruckSwitchCurrent;Mudar de camiao actual para este camiao +checkBoxFreightMarketFilterDestination;Filtro +checkBoxFreightMarketFilterSource;Filtro +error_could_not_complete_jobs_loop;Nao foi possivel completar os trabalhos +error_could_not_decode_file;Programa nao conseguiu descodificar o ficheiro +error_could_not_find_file;Programa nao encontrou o ficheiro +error_could_not_write_to_file;Programa nao conseguiu escrever no ficheiro +error_during_importing_db;Erro durante a exportacao da database +error_exception;Programa excepcao +error_file_not_decoded;Ficheiro nao descodificado +error_file_was_modified;Ficheiro foi modificado pelo jogo +error_job_parameters_not_filled;Nem todos os parametros da carga estao prenchidos +error_save_version_not_detected;Versao do save nao foi detectada +error_sql_exception;DataBase excepcao +groupBoxMainProfilesAndSaves;Perfis e saves +groupBoxProfilePlayerLevel;Nivel do Jogador +groupBoxProfileUserColors;Cores do User +groupBoxUserTrailerTrailer;Reboque +groupBoxUserTrailerTrailerDetails;Detalhes +groupBoxUserTruckShareTruckSettings;Partilhar detalhes do camiao +groupBoxUserTruckTruck;Camiao +groupBoxUserTruckTruckDetails;Detalhes +labelCargoMarketCity;Cidade +labelCargoMarketCompany;Empresa +labelCargoMarketSource;Fonte +labelCity;cidade +labelFreightMarketCargo;Carga +labelFreightMarketCity;Cidade +labelFreightMarketCompany;Empresa +labelFreightMarketCompanyF;Empresa +labelFreightMarketCountryF;Pais +labelFreightMarketDestination;Destino +labelFreightMarketDistance;Distancia total do caminho: +labelFreightMarketFilterMain;Filtro +labelFreightMarketSource;Fonte +labelFreightMarketUrgency;Urgencia +labelProfileSkill1;Distancia Longa +labelProfileSkill2;Carga de Alto Valor +labelProfileSkill3;Carga Fragil +labelProfileSkill4;Entrega mesmo a tempo +labelProfileSkill5;Conducao economica +labelTrailerPartNameBody;Corpo +labelTrailerPartNameCargo;Carga +labelTrailerPartNameWheels;Rodas +labelTruckDetailsFuel;Combustivel +labelTruckPartNameEngine;Motor +labelTruckPartNameTransmission;Transmissao +labelTruckPartNameWheels;Rodas +labelUserCompanyCompanyName;Nome da empresa +labelUserCompanyGarages;Garagens +labelUserCompanyHQcity;HQ Cidade +labelUserCompanyMoneyAccount;Dinheiro da Conta +labelUserCompanyVisitedCities;Cidades Visitadas +labelUserTrailerLicensePlate;Matricula +labelUserTruckLicensePlate;Matricula +message_database_created;Database estrutura criada. +message_database_missing_creating_db;Database ficheiro em falta. Criando Database... +message_database_missing_creating_db_structure;Database ficheiro em falta. Criando estrutura da database... +message_decoding_save_file;Descondificando o save... +message_exporting_database;Exportando DataBase... +message_file_saved;Ficheiro guardado. +message_importing_database;Importando DataBase... +message_loading_save_file;Carregando ficheiro... +message_no_matching_cities;Cidades nao correspondem a filtragem. +message_operation_finished;Tarefa completada. +message_preparing_data;Preparando data... +message_saving_file;Guardando ficheiro... +tabPageCompany;Empresa +tabPageConvoyTools;Ferramentas de Comboio +tabPageProfile;Perfil +tabPageTrailer;Reboqe +tabPageTruck;Camiao +toolStripMenuItemAbout;Sobre +toolStripMenuItemCreateTrFile;Fazer traducao +toolStripMenuItemExit;Sair +toolStripMenuItemHelp;Ajuda +toolStripMenuItemLanguage;Linguagem +toolStripMenuItemProgram;Programa +toolStripMenuItemSettings;Opcoes +tooltipbuttonProfilesAndSavesRefreshAll;Actualizar +currencyEUR;Euro +currencyCHF;Francos Suíços +currencyCZK;Coroa Tcheca +currencyGBP;Libras Esterlinas +currencyPLN;Złotów Polako +currencyHUF;Forints Húngaros +currencyDKK;Krones Dinamarquesas +currencySEK;Kronas Suecas +currencyNOK;Kronas Noruegas +currencyRUB;Rublos Russos +currencyUSD;Dólares Americanos +currencyCAD;Dólares Canadenses +currencyMXN;Pesos Mexicanos +unsupportedGameVersionTitle;Versão {0} Não Apoiada {1} +unsupportedGameVersionText;A versão {0} do seu jogo que está atualmente instalada não é suportada por esta ferramenta.\n\nVersão do Jogo Instalada: {1}\n\nVersões Atualmente Suportadas: {2} diff --git a/TS SE Tool/lang/ru-RU/cargo_translate.txt b/TS SE Tool/lang/ru-RU/cargo_translate.txt new file mode 100644 index 00000000..70f94196 --- /dev/null +++ b/TS SE Tool/lang/ru-RU/cargo_translate.txt @@ -0,0 +1,323 @@ +[ru-RU] +acetylene;Ацетилен +acid;Кислота +air_mails;Авиапочта +aircft_tires;Шины для самолетов +aircond;Кондиционеры +almond;Миндаль +ammunition;Военное снаряжение +apples;Яблоки +apples_c;Яблоки +aromatics;Углеводороды +arsenic;Мышьяк +asph_miller;Фрезерная машина Writigen 808 +atl_cod_flt;Филе атлантической трески +backfl_prev;Обратные клапаны +barley;Ячмень +basil;Базилик +beans;Бобы +beef_meat;Говядина +beverages;Напитки +beverages_c;Напитки +beverages_t;Напитки +big_bag_seed;Зерно в биг-бэгах +boric_acid;Борная кислота +bottle_water;Бутилированная вода +brake_fluid;Тормозная жидкость +brake_pads;Тормозные колодки +bricks;Кирпичи +bulldozer;Бульдозер +cable_reel;Кабельная катушка +can_sardines;Консервированные сардины +canned_beans;Консервированные бобы +canned_beef;Тушеная говядина +canned_pork;Тушеная свинина +canned_tuna;Консервированный тунец +car_balt1;Автомобили (Балтика 1) +car_balt2;Автомобили (Балтика 2) +car_ibe;Автомобили (Иберия) +car_it;Автомобили (Италия) +carb_water;Газированная вода +carbn_pwdr;Углеродный порошок +carbn_pwdr_c;Углеродный порошок +carcomp;Автозапчасти +carrots;Морковь +carrots_c;Морковь +cars_big;Автомобили (Большие) +cars_fr;Автомобили (Франция) +cars_mix;Автомобили (Разные) +cars_small;Автомобили (Небольшие) +cauliflower;Цветная капуста +caviar;Икра +cement;Цемент +cheese;Сыр +chem_sorb_c;Химические сорбенты +chem_sorbent;Химические сорбенты +chemicals;Химикаты +chewing_gums;Жевательная резинка +chicken_meat;Куриное мясо +chimney_syst;Дымоходные системы +chlorine;Хлор +chocolate;Шоколад +clothes;Одежда +clothes_c;Одежда +coal;Уголь +coconut_milk;Кокосовое молоко +coconut_oil;Кокосовое масло +comp_process;Компьютерные процессоры +computers;Компьютеры +conc_juice_t;Концентрированный сок +concen_juice;Концентрированные соки +concr_beams2;Бетонные плиты +concr_beams;Бетонные плиты +concr_cent;Бетонные кольца +concr_stair;Бетонные лестницы +cont_trees;Деревья в контейнерах +contamin;Инфицированное сырье +copp_rf_gutt;Медные водосточные системы +corks;Пробки +cott_cheese;Творог +cut_flowers;Срезанные цветы +cyanide;Цианиды +desinfection;Очистной комплекс +diesel;Дизельное топливо +diesel_gen;Дизельные генераторы +digger1000;Фронтальный погрузчик +digger500;Экскаватор-погрузчик +diggers;Погрузчики +dozer;Бульдозер Z35K +driller;Бурильщик D-50 +dry_milk;Сухое молоко +dryers;Сушильные машины +drymilk;Сухое молоко +dynamite;Динамит +elect_wiring;Электропроводка +electro_comp;Электронные компоненты +electronics;Электроника +emp_wine_bar;Винные бочки +emp_wine_bot;Винные бутылки +empty_barr;Пустые бочки +empty_palet;Пустые палеты +ethane;Этан +excav_soil;Вынутый грунт +excavator;Экскаватор +exhausts_c;Выхлопные системы +explosives;Взрывчатые материалы +fertilizer;Удобрения +fireworks;Фейерверки +fish_chips;Рыбные палочки +floorpanels;Бетонные плиты +flour;Мука +fluorine;Фтор +food;Упакованные продукты +forklifts;Автопогрузчики +fresh_fish;Свежая рыба +froz_octopi;Замороженный осьминог +frozen_food;Замороженные продукты +frozen_hake;Замороженный хек +frsh_herbs;Свежие травы +fuel_oil;Мазут +fuel_tanks;Топливные баки +furniture;Мебель +garlic;Чеснок +glass;Листовое стекло +gnocchi;Ньокки +goat_cheese;Козий сыр +granite_cube;Гранитные блоки +grapes;Виноград +graph_grease;Графитовая смазка +grass_rolls;Рулонный газон +gravel;Гравий +guard_rails;Отбойники +gummy_bears;Мармелад +gypsum;Гипс +harvest_bins;Контейнеры для урожая +hchemicals;Горячие химикаты +helicopter;Вертолёт Ring-429 +hi_volt_cabl;Кабели высокого напряжения +hipresstank;Резервуары +hmetal;Тяжелые металлы +home_acc;Аксессуары для дома +honey;Мёд +househd_appl;Бытовая техника +hwaste;Медицинские отходы +hydrochlor;Соляная кислота +hydrogen;Водород +ibc_cont;Контейнеры Еврокуб +icecream;Мороженое +iced_coffee;Холодный кофе в банках +iveco_vans;Фургоны Braco +kerosene;Керосин +ketchup;Кетчуп +lamb_stom;Фасованный бараний рубец +largetubes;Большие трубы +lavender;Лаванда +lead;Свинец +limestone;Известняк +limonades;Лимонад +live_catt_fr;Живой скот (Франция) +live_cattle;Живой скот +liver_paste;Консервированный паштет +locomotive;Локомотив Vossloh G6 +logs;Брёвна +lpg;Пропан-Бутан +lumber;Пиломатериалы +lumber_b;Пиломатериалы +lux_yacht;Яхта Queen V39 +machine_pts;Автозапчасти +magnesium;Магний +maple_syrup;Кленовый сироп +marb_blck2;Мраморные блоки +marb_blck;Мраморные блоки +marb_slab;Мраморные плиты +mason_jars;Стеклянные банки +med_equip;Медицинское оборудование +med_vaccine;Медицинские вакцины +mercuric;Хлорид ртути +metal_beams;Металлические балки +metal_cans;Жестяная тара +metal_center;Металлический сегмент +milk;Молоко +milk_t;Молоко +mobile_crane;Автокран Rex-Tex 45 +moto_tires;Мотоциклетные шины +motor_oil;Моторное масло +motor_oil_c;Моторное масло +motorcycles;Мотоциклы +mozzarela;Моцарелла +natur_rubber;Природный каучук +neon;Неон +nitrocel;Нитроцеллюлоза +nitrogen;Азот +nonalco_beer;Безалкогольное пиво +nuts;Орехи +nylon_cord;Нейлоновый шнур +office_suppl;Канцтовары +oil;Масло +oil_filt_c;Топливные фильтры +oil_filters;Топливные фильтры +olive_oil;Оливковое масло +olive_oil_t;Оливковое масло +olives;Оливки +onion;Репчатый лук +oranges;Апельсины +ore;Руда +outdr_flr_tl;Тротуарный камень +packag_food;Упакованные продукты +paper;Офисная бумага +pasta;Макароны +pears;Груши +peas;Горох +perfor_frks;Мотоциклетные вилки +pesticide;Пестициды +pesto;Песто +pet_food;Корма для животных +pet_food_c;Корма для животных +petrol;Бензин +phosphor;Белый фосфор +pipes;Железные трубы +plant_substr;Органические субстраты +plast_film;Упаковочная плёнка +plast_film_c;Упаковочная плёнка +plastic_gra;Пластиковые гранулы +plumb_suppl;Сантехнические товары +plums;Сливы +pnut_butter;Арахисовое масло +polyst_box;Полистироловая продукция +pork_meat;Свинина +post_packag;Почта +pot_flowers;Комнатные цветы +potahydro;Гидроксид калия +potassium;Калий +potatoes;Картофель +precast_strs;Железобетонные лестницы +press_sl_val;Клапаны высокого давления +princess;Яхта Queen V39 +propane;Пропан +prosciutto;Прошутто +protec_cloth;Защитная одежда +pumps;Насосы +radiators;Радиаторы +re_bars;Арматура +refl_posts;Светоотражающие столбы +rice;Рис +rice_c;Рис +roadroller;Дорожный каток +roller;Каток DYNA CC-2200 +roof_tiles;Черепица +roofing_felt;Толь +rooflights;Зенитные фонари +rye;Рожь +salm_fillet;Филе лосося +salt_spice_c;Соль и специи +salt_spices;Соль и специи +sand;Песок +sandwch_pnls;Сэндвич-панели +sausages;Колбасы +sawpanels;ДСП +scaffoldings;Строительные леса +scania_tr;Грузовики Scania +scooters;Скутеры +scrap_metals;Металлолом +seal_bearing;Подшипники +sheep_wool;Овечья шерсть +shock_absorb;Амортизаторы +silica;Двуокись кремния +smokd_eel;Копчёный угорь +smokd_sprats;Шпроты +sodchlor;Гипохлорит натрия +sodhydro;Гидроксид натрия +sodium;Натрий +solvents;Растворители +soy_milk;Соевое молоко +soy_milk_t;Соевое молоко +spher_valves;Шаровые краны +sq_tub;Квадратные трубы +steel_cord;Металлокорд +stone_dust;Минеральный порошок +stone_wool;Каменная вата +stones;Камни +straw_bales;Тюки соломы +sugar;Сахар +sulfuric;Серная кислота +tableware;Посуда +tomatoes;Томаты +toys;Игрушки +tracks;Гусеницы +tractor;Трактор RS-666 +tractors;Тракторы +train_part2;Тележки поезда +train_part;Колёсные пары +transformat;Трансформатор PK900 +transmis;Коробки передач +truck_batt;Грузовые аккумуляторы +truck_batt_c;Грузовые аккумуляторы +truck_rims;Грузовые диски +truck_rims_c;Грузовые диски +truck_tyres;Грузовые шины +tube;Детали трубопровода +tvs;Телевизоры +tyres;Шины +used_battery;Отработанные аккумуляторы +used_pack;Картонная тара +used_packag;Картонная тара +used_plast;Пластиковая тара +used_plast_c;Пластиковая тара +vent_tube;Вентиляционная труба +ventilation;Вентиляционная труба +vinegar;Уксус +vinegar_c;Уксус +volvo_cars;Престижные внедорожники +volvo_tr;Грузовики Volvo +wallpanels;Стеновые панели +watermelons;Арбузы +wheat;Пшеница +windml_eng;Гондола ветрогенератора +windml_tube;Башня ветрогенератора +wood_bark;Древесная кора +wooden_beams;Деревянные балки +wrk_cloth;Рабочая одежда +wshavings;Деревянная стружка +yacht;Яхта +yogurt;Йогурт +young_seed;Саженцы \ No newline at end of file diff --git a/TS SE Tool/lang/ru-RU/cities_translate.txt b/TS SE Tool/lang/ru-RU/cities_translate.txt new file mode 100644 index 00000000..ce926b25 --- /dev/null +++ b/TS SE Tool/lang/ru-RU/cities_translate.txt @@ -0,0 +1,282 @@ +[ru-RU] +a_coruna;А-Корунья +aalborg;Ольборг +aberdeen;Абердин +ajaccio;Аяччо +albacete;Альбасете +alban;Сент-Альбан-дю-Рон +algeciras;Альхесирас +almaraz;Альмарас +almeria;Альмерия +amsterdam;Амстердам +ancona;Анкона +bacau;Бакэу +badajoz;Бадахос +bailen;Байлен +barcelona;Барселона +bari;Бари +bastia;Бастия +bayonne;Байонна +beja;Бежа +bergen;Берген +berlin;Берлин +bern;Берн +bialystok;Белосток +bilbao;Бильбао +birmingham;Бирмингем +bologna;Болонья +bonifacio;Бонифачо +bordeaux;Бордо +bourges;Бурже +brasov;Брашов +bratislava;Братислава +bremen;Бремен +brest;Брест +brno;Брно +brussel;Брюссель +bucuresti;Бухарест +budapest;Будапешт +burgas;Бургас +burgos;Бургос +bystrica;Банска-Бистрица +cagliari;Кальяри +calais;Кале +calarasi;Кэлэраши +calvi;Кальви +cambridge;Кембридж +cardiff;Кардифф +carlisle;Карлайл +cassino;Кассино +catania;Катания +catanzaro;Катандзаро +cernavoda;Чернаводэ +ciudad_real;Сьюдад-Реаль +civaux;Сиво +clermont;Клермон-Ферран +cluj_napoca;Клуж-Напока +coimbra;Коимбра +constanta;Констанца +cordoba;Кордоба +corticadas;Кортисадаш +craiova;Крайова +daugavpils;Даугавпилс +debrecen;Дебрецен +dijon;Дижон +dortmund;Дортмунд +dover;Дувр +dresden;Дрезден +duisburg;Дуйсбург +dusseldorf;Дюссельдорф +edinburgh;Эдинбург +edirne;Эдирне +el_ejido;Эль-Эхидо +erfurt;Эрфурт +esbjerg;Эсбьерг +evora;Эвора +faro;Фару +felixstowe;Филикстоу +firenze;Флоренция +frankfurt;Франкфурт-на-Майне +frederikshv;Фредериксхавн +galati;Галац +gdansk;Гданьск +gedser;Гедсер +geneve;Женева +genova;Генуя +gijon;Хихон +glasgow;Глазго +golfech;Гольфеш +goteborg;Гётеборг +granada;Гранада +graz;Грац +grimsby;Гримсби +groningen;Гронинген +guarda;Гуарда +hamburg;Гамбург +hannover;Ганновер +helsingborg;Хельсингборг +helsinki;Хельсинки +hirtshals;Хиртсхальс +huelva;Уэльва +hunedoara;Хунедоара +iasi;Яссы +innsbruck;Инсбрук +istanbul;Стамбул +jonkoping;Йёнчёпинг +kaliningrad;Калининград +kalmar;Кальмар +kapellskar;Капельшер +karlovo;Карлово +karlskrona;Карлскруна +kassel;Кассель +katowice;Катовице +kaunas;Каунас +kiel;Киль +klagenfurt;Клагенфурт-ам-Вёртерзе +klaipeda;Клайпеда +kobenhavn;Копенгаген +koln;Кёльн +kosice;Кошице +kotka;Котка +kouvola;Коувола +kozloduy;Козлодуй +krakow;Краков +kristiansand;Кристиансанн +kunda;Кунда +lacq;Лак +lahti;Лахти +larochelle;Ла-Рошель +laurent;Сен-Лоран +lehavre;Гавр +leipzig;Лейпциг +lemans;Ле-Ман +leon;Леон +liege;Льеж +liepaja;Лиепая +lile_rousse;Л'Иль-Рус +lille;Лилль +limoges;Лимож +linkoping;Линчёпинг +linz;Линц +lisboa;Лиссабон +liverpool;Ливерпуль +livorno;Ливорно +lleida;Льейда +lodz;Лодзь +london;Лондон +loviisa;Ловийса +lublin;Люблин +luga;Луга +luxembourg;Люксембург +lyon;Лион +madrid;Мадрид +magdeburg;Магдебург +malaga;Малага +malmo;Мальмё +manchester;Манчестер +mangalia;Мангалия +mannheim;Мангейм +marseille;Марсель +mazeikiai;Мажейкяй +mengibar;Менхибар +messina;Мессина +metz;Мец +milano;Милан +montpellier;Монпелье +munchen;Мюнхен +murcia;Мурсия +naantali;Наантали +nantes;Нант +napoli;Неаполь +narva;Нарва +navia;Навия +newcastle;Ньюкасл-апон-Тайн +nice;Ницца +nurnberg;Нюрнберг +nynashamn;Нюнесхамн +o_barco;О-Барко-де-Вальдеоррас +odense;Оденсе +olbia;Ольбия +olhao;Ольян +olkiluoto;Олкилуото +olsztyn;Ольштын +orebro;Эребру +oslo;Осло +osnabruck;Оснабрюк +ostrava;Острава +paldiski;Палдиски +palermo;Палермо +paluel;Палюэль +pamplona;Памплона +panevezys;Паневежис +paris;Париж +parma;Парма +parnu;Пярну +pecs;Печ +pernik;Перник +pescara;Пескара +petersburg;Санкт-Петербург +pirdop;Пирдоп +pitesti;Питешти +pleven;Плевен +plovdiv;Пловдив +plymouth;Плимут +ponte_de_sor;Понти-ди-Сор +pori;Пори +port_sagunt;Сагунто-порт +porto;Порту +porto_vecchi;Порто-Веккьо +poznan;Познань +prague;Прага +pskov;Псков +puertollano;Пуэртольяно +reims;Реймс +rennes;Рен +resita;Решица +rezekne;Резекне +riga;Рига +roma;Рим +roscoff;Роскоф +rostock;Росток +rotterdam;Роттердам +ruse;Русе +salamanca;Саламанка +salzburg;Зальцбург +sangiovanni;Вилла-Сан-Джованни +santander;Сантандер +sassari;Сассари +setubal;Сетубал +sevilla;Севилья +sheffield;Шеффилд +siauliai;Шяуляй +sines;Синиш +sodertalje;Сёдертелье +sofia;София +soria;Сория +sosnovy_bor;Сосновый Бор +southampton;Саутгемптон +stavanger;Ставангер +stockholm;Стокгольм +strasbourg;Страсбург +stuttgart;Штутгарт +suzzara;Судзара +swansea;Суонси +szczecin;Щецин +szeged;Сегед +tallinn;Таллин +tampere;Тампере +taranto;Таранто +targu_mures;Тыргу-Муреш +tarragona;Таррагона +tartu;Тарту +tekirdag;Текирдаг +terni;Терни +teruel;Теруэль +timisoara;Тимишоара +torino;Турин +toulouse;Тулуза +travemunde;Травемюнде +trelleborg;Треллеборг +turku;Турку +uppsala;Уппсала +utena;Утена +valencia;Валенсия +valladolid;Вальядолид +valmiera;Валмиера +vandellos;Вандельос +varna;Варна +vasteraas;Вестерос +vaxjo;Векшё +veli_tarnovo;Велико-Тырново +venezia;Венеция +ventspils;Вентспилс +verona;Верона +vigo;Виго +villarreal;Вильярреаль +vilnius;Вильнюс +vyborg;Выборг +warszawa;Варшава +wien;Вена +wroclaw;Вроцлав +zaragoza;Сарагоса +zurich;Цюрих \ No newline at end of file diff --git a/TS SE Tool/lang/ru-RU/companies_translate.txt b/TS SE Tool/lang/ru-RU/companies_translate.txt new file mode 100644 index 00000000..4db1fa18 --- /dev/null +++ b/TS SE Tool/lang/ru-RU/companies_translate.txt @@ -0,0 +1,69 @@ +[ru-RU] ++all;Все +aerobalt_ru;АэроБалтика +agrominta;Agrominta UAB (Растения) +agrominta_a;Agrominta UAB (Животные) +baltomors_ru;Балтоморск +blt_ru;БЛТ +bltmetal_ru;Балтийская Металлургия +cemelt_bas;Cemeltex (Котлован) +cemelt_fl_ru;Цемелтекс (Дом) +cemelt_fla;Cemeltex (Дом) +cemelt_hal;Cemeltex (Ангар) +cemelt_win;Cemeltex (Ветрогенератор) +cha_el_mkt;Charged (Магазин) +cha_el_whs;Charged (Склад) +chm_che_plnt;Chemso Ltd. (Производство) +chm_che_str;Chemso Ltd. (Str) +cm_min_plnt;Coastline Mining (Производство) +cm_min_qry;Coastline Mining (Карьер) +costruzi_fla;Costruzione di Edifici (Дом) +costruzi_hal;Costruzione di Edifici (Ангар) +costruzi_win;Costruzione di Edifici (Ветрогенератор) +dg_wd_hrv;Deepgrove (Wood harvest) +dg_wd_saw1;Deepgrove (Лесопилка 2) +dg_wd_saw;Deepgrove (Лесопилка 1) +domdepo_ru;Домдепо +eviksi;Evikši ZS (Растения) +eviksi_a;Evikši ZS (Животные) +fintyre_ru;Финские Шины +gal_oil_gst;Gallon Oil (Заправка) +gal_oil_ref;Gallon Oil (Переработка) +gm_food_plnt;Global Mills (Производство) +hs_mkt;Home Store (Магазин) +hs_whs;Home Store (Склад) +ika_ru;ИКА Мебель +kamen_ru;Старый Камень +konstnr;KN KonstNorr (Котлован) +konstnr_br;KN KonstNorr (Мост) +konstnr_hs;KN KonstNorr (Дом) +konstnr_wind;KN KonstNorr (Ветрогенератор) +ladoga_ru;Ладога Авто +nch_ru;НКХ +ns_chem_ru;НС Химия +ns_oil_ru;НС Ойл +onnelik;Õnnelik talu (Растения) +onnelik_a;Õnnelik talu (Животные) +pk_medved_ru;ПК Meдвeдь +pns_con_grg;Plaster & Sons (Гараж) +pns_con_whs;Plaster & Sons (Склад) +radus_ru;Радус +rosmark_ru;Росмарк +sc_frm;Sunshine Crops (Ферма) +sc_frm_grg;Sunshine Crops (Гараж) +scania_dlr;Scania (Дилер) +scania_fac;Scania (Завод) +severoatm_ru;Ceвepoaтoм +st_met_whs;Steeler (Склад) +st_met_wrk;Steeler (Сталелитейная) +suprema_ru;Супpeмa +vm_car_dlr;Voltison (Дилер) +vm_car_whs;Voltison (Склад) +volvo_dlr;Volvo (Дилер) +volvo_fac;Volvo (Завод) +wal_food_mkt;Wallbert (Магазин) +wal_food_whs;Wallbert (Склад) +wal_mkt;Wallbert (Магазин) +wal_whs;Wallbert (Склад) +zelenye;Зелëные Поля (Растения) +zelenye_a;Зелëные Поля (Животные) \ No newline at end of file diff --git a/TS SE Tool/lang/ru-RU/countries_translate.txt b/TS SE Tool/lang/ru-RU/countries_translate.txt new file mode 100644 index 00000000..bab2086a --- /dev/null +++ b/TS SE Tool/lang/ru-RU/countries_translate.txt @@ -0,0 +1,68 @@ +[ru-RU] ++all;Все ++unsorted;Неотсортированные +austria;Австрия +belgium;Бельгия +bulgaria;Болгария +czech;Чeшская Респyблика +denmark;Дания +estonia;Эстония +finland;Финляндия +france;Франция +germany;Германия +hungary;Венгрия +italy;Италия +latvia;Латвия +lithuania;Литва +luxembourg;Люксембург +netherlands;Нидерланды +norway;Норвегия +poland;Польша +romania;Румыния +russia;Россия +slovakia;Словакия +sweden;Швеция +switzerland;Швейцария +turkey;Турция +uk;Великобритания +arizona;Аризона +california;Калифорния +nevada;Невада +new_mexico;Нью-Мексико +oregon;Орегон +utah;Юта +washington;Вашингтон +aland;Аландские о-ва +albania;Албания +andorra;Андора +belarus;Беларусь +bosnia;Босния и Герцеговина +croatia;Хорватия +cyprus;Республика Кипр +faroe;Фарерские о-ва +georgia;Грузия +greece;Греция +iceland;Исландия +iom;Остров Мэн +ireland;Ирландия +jersey;Джерси (остров) +liecht;Лихтенштейн +macedonia;Северная Македония +mnegro;Черногория +moldova;Молдавия +monaco;Монако +nireland;Северная Ирландия +portugal;Португалия +serbia;Сербия +slovenia;Словения +spain;Испания +svalbard;Шпицберген +ukraine;Украина +egypt;Египeт +iraq;Ирак +israel;Израиль +jordan;Иордания +lebanon;Ливан +saudia;Саудовская Аравия +syria;Сирия +westbank;Западный берег р. Иордан \ No newline at end of file diff --git a/TS SE Tool/lang/ru-RU/flag.png b/TS SE Tool/lang/ru-RU/flag.png new file mode 100644 index 00000000..4203de39 Binary files /dev/null and b/TS SE Tool/lang/ru-RU/flag.png differ diff --git a/TS SE Tool/lang/ru-RU/lngfile.txt b/TS SE Tool/lang/ru-RU/lngfile.txt new file mode 100644 index 00000000..e5637922 --- /dev/null +++ b/TS SE Tool/lang/ru-RU/lngfile.txt @@ -0,0 +1,301 @@ +[ru-RU] +buttonAccept;Принять +buttonAddCustomPath;Добавить +buttonAddUserColor;+ слот +buttonApply;Применить +buttonCancel;Отмена +buttonCargoMarketRandomizeCargoCity;Сгенерировать список грузов +buttonCargoMarketRandomizeCargoCompany;Сгенерировать список грузов +buttonCargoMarketResetCargoCity;Очистить список грузов +buttonCargoMarketResetCargoCompany;Очистить список грузов +buttonChooseFolder;Выбрать папку +buttonClearColor;Очистить +buttonCloneProfile;Клонировать +buttonConvoyToolsGPSCurrentPositionCopy;Скопировать положение грузовика +buttonConvoyToolsGPSCurrentPositionPaste;Установить положение грузовика +buttonConvoyToolsGPSStoredGPSPathCopy;Скопировать GPS маршрут +buttonConvoyToolsGPSStoredGPSPathPaste;Задать GPS маршрут +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Скопировать положение грузовика из нескольких сохранений +buttonConvoyToolsGPSTruckPositionMultySavePaste;Создать сохранения с разными положения грузовика +buttonCopy;Копировать +buttonDBClear;Очистить +buttonDBExport;Экспортировать +buttonDBImport;Импортировать +buttonEdit;Изменить +buttonEditCPlist;Редактировать список +buttonExport;Экспортировать +buttonExportSettings;Экспорт +buttonFreightMarketAddJob;Добавить груз в список +buttonFreightMarketClearJobList;Очистить список грузов +buttonFreightMarketRandomizeCargo;Случайный +buttonImport;Импортировать +buttonImportSettings;Импорт +buttonMainAddCustomFolder;Добавить папку +buttonMainCloseSave;Выгрузить +buttonMainDecryptSave;Расшифровать +buttonMainLoadSave;Загрузить +buttonMainLoadSaveSteamCloud;Отключите Steam Cloud +buttonMainWriteSave;Сохранить +buttonPaste;Вставить +buttonPlayerLevelMaximum;Макс. >> +buttonPlayerLevelMinimum;<< Мин. +buttonProfilesAndSavesOpenSaveFolder;Открыть папку +buttonRenameProfile;Переименовать +buttonReplaceColors;↑↑↑ Заменить ↑↑↑ +buttonRestoreProfileBackup;Восстановить профиль из Бекапа +buttonSave;Сохранить +buttonSelectFile;Выбрать файл ... +buttonShareTruckTruckDetailsCopy;Скопировать детали грузовика +buttonShareTruckTruckDetailsPaste;Заменить детали грузовика +buttonShareTruckTruckPaintCopy;Скопировать покраску +buttonShareTruckTruckPaintPaste;Установить покраску +buttonShareTruckWholeTruckCopy;Скопировать все детали грузовика +buttonShareTruckWholeTruckPaste;Заменить все детали грузовика +buttonUserColorsShareColors;Поделиться +buttonUserCompanyCitiesUnVisit;Забыть +buttonUserCompanyCitiesVisit;Посетить +buttonUserCompanyDriversFire;Уволить +buttonUserCompanyDriversHire;Нанять +buttonUserCompanyGaragesBuy;Купить +buttonUserCompanyGaragesBuyDowngrade;Уменьшить +buttonUserCompanyGaragesBuyUpgrade;Купить и улучшить +buttonUserCompanyGaragesSell;Продать +buttonUserCompanyGaragesUpgrade;Расширить +buttonUserTrailerSelectCurrent;Текущий +buttonUserTrailerSwitchCurrent;Сменить текущий прицеп на выбранный +buttonUserTruckSelectCurrent;Текущий +buttonUserTruckSwitchCurrent;Сменить текущий грузовик на выбранный +checkBoxCreateBackup;Сделать бекап в .zip файле +checkBoxFreightMarketFilterDestination;Фильтровать +checkBoxFreightMarketFilterSource;Фильтровать +checkBoxFreightMarketRandomDest;Случайные +checkBoxFullCloning;Полное клонирование +checkBoxMutiCloning;Несколько копий +checkBoxProfilesAndSavesProfileBackups;Бэкапы +contextMenuStripCompanyDriversEdit;Управление +contextMenuStripCompanyDriversFire;Уволить +contextMenuStripCompanyDriversHire;Нанять +contextMenuStripFreightMarketJobListDelete;Удалить +contextMenuStripFreightMarketJobListEdit;Изменить +dialogCaptionNoBackwardCompatibility;Без обратной совместимости +dialogCaptionUnsupportedVersion;Непроверенная версия сохранения +dialogTextUnsupportedVersion;Версия сохранение {0} НЕ была ПРРОТЕСТИРОВАНА.\r\nВы можете продолжить, но это может ПОВРЕДИТЬ файл ПОСЛЕ СОХРАНЕНИЯ.\r\nПожалуйста НЕ ИСПОЛЬЗУЙТЕ АВТОСОХРАНЕНИЯ в данной ситуации!\r\n\r\nХотите продолжить и ЗАГРУЗИТЬ ЭТОТ ФАЙЛ? +dialogTextUnsupportedVersion;Версия файла сохранения {0} НЕ ПРОВЕРЯЛАСЬ на совместимость.\r\nВы можете продолжить, но программа может ПОВРЕДИТЬ файл сохранения ПОСЛЕ СОХРАНЕНИЯ.\r\nПожалуйста используйте РУЧНЫЕ СОХРАНЕНИЯ вместо автоматических в таком случае!\r\n\r\nВы хотите продолжить и попробовать ЗАГРУЗИТЬ ЭТОТ файл сохранения?\r\n(Вы можете расшифровать файл сохранения и вручную внести изменения) +error_could_not_complete_jobs_loop;Невозможно закольцевать маршрут +error_could_not_decode_file;Программа не смогла декодировать файл +error_could_not_find_file;Программа не смогла найти файл +error_could_not_write_to_file;Программа не смогла записать данные в файл +error_during_importing_db;Ошибка при импорте Базы данных +error_exception;Ошибка в программе +error_file_not_decoded;Файл не декодирован +error_file_was_modified;Файл был изменён другой программой +error_job_parameters_not_filled;Заполнены не все поля груза +error_save_version_not_detected;Версия Файла Сохранения не была определена +error_sql_exception;Ошибка Базы данных +FormAboutBox;О {0} +FormAddCustomFolder;Редактирование нестандартных путей сохранения +FormAIDriverEditor;Настройка водителя +FormColorPicker;Палитра цветов +FormLicensePlateEdit;Редактор Номерного знака +FormProfileEditor;Управление профилем +FormProfileEditorRenameCloneCloning;Клонирование +FormProfileEditorRenameCloneRenaming;Переименование +FormProfileEditorSettingsImportExportExporting;Экспорт из {0} +FormProfileEditorSettingsImportExportImporting;Импорт в {0} +FormProgramSettings;Настройки программы +FormSettings;Настройки +FormShareUserColors;Обмен пользовательскими цветами +FormVehicleEditor;Редактор транспорта +groupBoxDataBase;База данных +groupBoxDriverSkill;Навыки +groupBoxFolderType;Тип папки +groupBoxGameType;Игра +groupBoxImportedColors;Импортированные цвета +groupBoxMainProfilesAndSaves;Профили и Сохранения +groupBoxOptions;Настройки +groupBoxProfilePlayerLevel;Уровень игрока +groupBoxProfileSkill;Навыки +groupBoxProfileUserColors;Пользовательские цвета +groupBoxProfileUserColorsShort;Польз. цвета +groupBoxSelectFileExporting;В .zip файл +groupBoxSelectFileImporting;Из .zip файла +groupBoxTargetProfileExporting;Перенести в ... +groupBoxTargetProfileImporting;Взять из ... +groupBoxUserTrailerShareTrailerSettings;Поделиться настройками прицепа +groupBoxUserTrailerTrailer;Прицеп +groupBoxUserTrailerTrailerDetails;Детали +groupBoxUserTruckShareTruckSettings;Поделиться настройками грузовика +groupBoxUserTruckTruck;Грузовик +groupBoxUserTruckTruckDetails;Детали +labelCargoMarketCity;Город +labelCargoMarketCompany;Компания +labelCargoMarketSource;Источник +labelCheckUpdatesOnStartup;Проверять наличие Обновлений при запуске +labelCity;город +labelCountry;Страна +labelCurrency;Валюта +labelDayShort;Д +labelDistance;Расстояние +labelDownloadDescription;Вы можете найти последнюю версию на +labelDriverName;Имя: +labelFreightMarketCargo;Груз +labelFreightMarketCity;Город +labelFreightMarketCompany;Компания +labelFreightMarketCompanyF;Компания +labelFreightMarketCountryF;Страна +labelFreightMarketDestination;Назначение +labelFreightMarketDistance;Общая протяжённость: +labelFreightMarketFilterMain;Фильтр +labelFreightMarketSource;Источник +labelFreightMarketTrailer;Прицеп +labelFreightMarketUrgency;Срочность +labelHourShort;ч +labelHowtoDescription;Как пользоваться программой +labelJobPickupTime;Период актуальности груза +labelLicensePlate;Номерной знак +labelLoopEvery;Возвращаться каждый +labelnew;новый +labelNewNameCloning;Имена для новых профилей: +labelNewNameRenaming;Новое имя профиля: +labelold;предыдущий +labelOr;- ИЛИ - +labelor;или +labelProfileName;Название профиля: +labelProfileSkill1;Дальние дистанции +labelProfileSkill2;Дорогостоящий груз +labelProfileSkill3;Хрупкий груз +labelProfileSkill4;Срочные заказы +labelProfileSkill5;Эко-вождение +labelSettings;Настройки +labelShowSplashOnStartup;Показывать Заставку при запуске +labelSupportedGameVersions;Поддерживаемые версии игры +labelTrailerPartNameBody;Кузов +labelTrailerPartNameCargo;Груз +labelTrailerPartNameChassis;Шасси +labelTrailerPartNameWheels;Колёса +labelTruckDetailsFuel;Топливо +labelTruckPartNameCabin;Кабина +labelTruckPartNameChassis;Шасси +labelTruckPartNameEngine;Двигатель +labelTruckPartNameTransmission;Трансмиссия +labelTruckPartNameWheels;Колёса +labelUserCompanyCompanyName;Название компании +labelUserCompanyDrivers;Водители +labelUserCompanyGarages;Гаражи +labelUserCompanyHQcity;Штаб-квартира +labelUserCompanyMoneyAccount;Средства на счету +labelUserCompanyVisitedCities;Посещённые города +labelUserTrailerLicensePlate;Номерной знак +labelUserTruckLicensePlate;Номерной знак +labelVersion;Версия {0} (альфа) +labelWeight;Вес +message_database_created;Структура Базы данных создана. +message_database_missing_creating_db;Файл базы данных не найден. Создание Базы данных... +message_database_missing_creating_db_structure;Файл базы данных не найден. Создание структуры Базы данных... +message_decoding_save_file;Декодирование файла сохранения... +message_exporting_database;Экспорт Базы данных... +message_file_saved;Файл сохранён. +message_importing_database;Импорт Базы данных... +message_loading_save_file;Загрузка файла сохранения... +message_no_matching_cities;Нет элементов, подходящих под фильтр. +message_operation_finished;Задача завершена. +message_preparing_data;Подготовка данных... +message_saving_file;Сохранение файла... +radioButtonProfileFolderType;Папка профиля +radioButtonRootFolderType;Корневая папка +radioButtonSaveFolderType;Папка сохранения +radioButtonUnknownFolderType;Нераспознанный +stringCargoContainer;(Контейнер) +stringDriverShort;В +stringFormAboutBoxtextBoxDescription;Программа создана\r\nLIPtoH <{0}>\r\n{1}\r\n\r\nИнструменты и проекты использованные для создания утилиты:\r\n\r\n +stringKilograms;Килограммы +stringKilometers;Километры +stringKilometersShort;км +stringLarge;Большой +stringMiles;Мили +stringMilesShort;мл +stringNot owned;Не куплен +stringPounds;Фунты +stringSmall;Небольшой +stringTiny;Крошечный +stringTrailerShort;П +stringVehicleShort;Г +stringQuickJobTruckShort;А +stringUsersTruckShort;К +stringInUse;Использует +stringItemMissing;-- Ни одного -- +stringBodyType;{0} +stringAxlesCount;Оси - {0} +stringChainType;{0} +tabPageCargoMarket;Биржа грузов +tabPageCompany;Компания +tabPageConvoyTools;Инструменты для конвоя +tabPageDrivers;Водители +tabPageFreightMarket;Прямые перевозки +tabPageGarages;Гаражи +tabPageProfile;Профиль +tabPageTrailer;Прицеп +tabPageTruck;Грузовик +tabPageVisitedCities;Посещённые города +toolStripMenuItemAbout;О программе +toolStripMenuItemCheckUpdates;Проверить наличие обновлений +toolStripMenuItemCreateTrFile;Сохранить Файл для перевода +toolStripMenuItemDownload;Скачать +toolStripMenuItemExit;Выход +toolStripMenuItemHelp;Помощь +toolStripMenuItemLanguage;Перевод +toolStripMenuItemLocalPDF;Локальный PDF файл +toolStripMenuItemProgram;Программа +toolStripMenuItemProgramSettings;Настройки программы +toolStripMenuItemSettings;Настройки +toolStripMenuItemTutorial;Как этим пользоваться... +toolStripMenuItemYouTubeVideo;Видео на YouTube +tooltipbuttonADR0;Взрывчатые материалы +tooltipbuttonADR1;Газы +tooltipbuttonADR2;Легковоспламеняющиеся жидкости +tooltipbuttonADR3;Легковоспламеняющиеся твердые грузы и вещества +tooltipbuttonADR4;Токсичные и инфекционные вещества +tooltipbuttonADR5;Едкие и коррозионные вещества +tooltipbuttonPlayerLevelMaximum;150 уровень +tooltipbuttonPlayerLevelMinimum;0 уровень +tooltipbuttonProfilesAndSavesEditProfile;Управление профилем +tooltipbuttonProfilesAndSavesRefreshAll;Обновить +tooltipbuttonProfilesAndSavesRestoreBackup;Восстановить из бэкапа +tooltipbuttonSkill;{0} уровень +tooltipbuttonTrailerElRepair;Ремонт этой части +tooltipbuttonTrailerLicensePlateEdit;Изменить номерной знак +tooltipbuttonTrailerRepair;Ремонт всего трейлера +tooltipbuttonTruckElRepair;Ремонт этой части +tooltipbuttonTruckLicensePlateEdit;Изменить номерной знак +tooltipbuttonTruckReFuel;Заправить +tooltipbuttonTruckRepair;Ремонт всего грузовика +tooltipbuttonUserCompanyGaragesManage;Управление +tooltipcomboBoxPrevProfiles;[L] - Локальные сохранения\r\n[S] - Steam (только загрузка)\r\n[C] - Пользовательские +tooltiplabelJobPickupTime;То, сколько времени груз будет виден в заказах\r\n(Добавляется для каждого груза) +tooltipprofileSkillsPanel1;Дальние дистанции +tooltipprofileSkillsPanel2;Дорогостоящий груз +tooltipprofileSkillsPanel3;Хрупкий груз +tooltipprofileSkillsPanel4;Срочные заказы +tooltipprofileSkillsPanel5;Эко-вождение +panelShareColorsHelpDragDrop;Используя [Перетаскивание] перемещайте плашки [По одной] или [Группой] на палитру. +buttonUserCompanyGaragesSelectAll;Выбрать все +buttonUserCompanyGaragesUnSelectAll;Снять выбор +buttonUserCompanyDriversSelectAll;Выбрать все +buttonUserCompanyDriversUnSelectAll;Снять выбор +buttonUserCompanyCitiesSelectAll;Выбрать все +buttonUserCompanyCitiesUnSelectAll;Снять выбор +currencyEUR;Евро +currencyCHF;Швейцарский франк +currencyCZK;Чешская крона +currencyGBP;Британский фунт +currencyPLN;Польский злотый +currencyHUF;Венгерский форинт +currencyDKK;Датская крона +currencySEK;Шведская крона +currencyNOK;Норвежская крона +currencyRUB;Российский рубль +currencyUSD;Американский доллар +currencyCAD;Канадский доллар +currencyMXN;Мексиканское песо +unsupportedGameVersionTitle;Не поддерживаемая версия {0} {1} +unsupportedGameVersionText;Установленная вами версия {0} в настоящее время не поддерживается этой утилитой.\n\nУстановленная версия игры: {1}\n\nТекущие поддерживаемые версии: {2} diff --git a/TS SE Tool/lang/ru-RU/urgency_translate.txt b/TS SE Tool/lang/ru-RU/urgency_translate.txt new file mode 100644 index 00000000..e4c34c80 --- /dev/null +++ b/TS SE Tool/lang/ru-RU/urgency_translate.txt @@ -0,0 +1,4 @@ +[ru-RU] +0;Обычный +1;Важный +2;Срочный diff --git a/TS SE Tool/lang/tr-TR/countries_translate.txt b/TS SE Tool/lang/tr-TR/countries_translate.txt new file mode 100644 index 00000000..8c65960f --- /dev/null +++ b/TS SE Tool/lang/tr-TR/countries_translate.txt @@ -0,0 +1,55 @@ +[tr-TR] +austria;Avusturya +belgium;Belçika +bulgaria;Bulgaristan +czech;Çekya +denmark;Danimarka +estonia;Estonya +finland;Finlandiya +france;Fransa +germany;Almanya +hungary;Macaristan +italy;İtalya +latvia;Letonya +lithuania;Litvanya +luxembourg;Lüksemburg +netherlands;Hollanda +norway;Norveç +poland;Polonya +romania;Romanya +russia;Russya +slovakia;Slovakya +sweden;İsveç +switzerland;İsviçre +turkey;Turkiye +uk;Birleşik Krallık +california;Kaliforniya +albania;Arnavutluk +bosnia;Bosna Hersek +croatia;Hırvatistan +cyprus;Kıbrıs +faroe;Faroe Adaları +georgia;Gürcistan +greece;Yunanistan +iceland;İzlanda +iom;Man Adası +ireland;İrlanda +liecht;Liechtenstein +macedonia;Kuzey Makedonya +mnegro;Karadağ +moldova;Moldova +nireland;Kuzey İrlanda +portugal;Portekiz +serbia;Sırbistan +slovenia;Slovenya +spain;İspanya +svalbard;Svalbard +ukraine;Ukrayna +egypt;Mısır +iraq;Irak +israel;İsrail +jordan;Ürdün +lebanon;Lübnan +saudia;Suudi Arabistan +syria;Suriye +westbank;Batı Şeria \ No newline at end of file diff --git a/TS SE Tool/lang/tr-TR/flag.png b/TS SE Tool/lang/tr-TR/flag.png new file mode 100644 index 00000000..aa9b9350 Binary files /dev/null and b/TS SE Tool/lang/tr-TR/flag.png differ diff --git a/TS SE Tool/lang/tr-TR/lngfile.txt b/TS SE Tool/lang/tr-TR/lngfile.txt new file mode 100644 index 00000000..afc9f376 --- /dev/null +++ b/TS SE Tool/lang/tr-TR/lngfile.txt @@ -0,0 +1,181 @@ +[tr-TR] +buttonAddCustomPath;Ekle +buttonCancel;İptal +buttonCargoMarketRandomizeCargoCity;Rastgele kargo listesi +buttonCargoMarketRandomizeCargoCompany;Rastgele kargo listesi +buttonCargoMarketResetCargoCity;Kargo listesini sıfırla +buttonCargoMarketResetCargoCompany;Kargo listesini sıfırla +buttonChooseFolder;Klasör Seç +buttonClearColor;Temizle +buttonConvoyToolsGPSCurrentPositionCopy;Mevcut pozisyonu kopyala +buttonConvoyToolsGPSCurrentPositionPaste;Mevcut pozisyonu yapıştır +buttonConvoyToolsGPSStoredGPSPathCopy;GPS yolunu kopyala +buttonConvoyToolsGPSStoredGPSPathPaste;GPS yolunu yapıştır +buttonConvoyToolsGPSTruckPositionMultySaveCopy;Birden fazla kayıttan kamyon pozisyonunu kopyala +buttonConvoyToolsGPSTruckPositionMultySavePaste;Farklı kamyon konumlarıyla birden fazla kayıt oluştur +buttonDBClear;Temizle +buttonDBExport;Dışa Aktar +buttonDBImport;İçe Aktar +buttonEditCPlist;Listeyi düzenle +buttonExport;Dışa Aktar +buttonFreightMarketAddJob;İşi listeye ekle +buttonFreightMarketClearJobList;Listeyi temizle +buttonFreightMarketRandomizeCargo;Rastgele +buttonImport;İçe Aktar +buttonMainAddCustomFolder;Özel Klasör Ekle +buttonMainDecryptSave;Şifre Çöz +buttonMainLoadSave;Yükle +buttonMainWriteSave;Kaydet +buttonProfilesAndSavesOpenSaveFolder;Klasörü Aç +buttonReplaceColors;↑↑↑ Değiştir ↑↑↑ +buttonSave;Kayıt +buttonShareTruckTruckDetailsCopy;Kamyon ayrıntılarını kopyala +buttonShareTruckTruckDetailsPaste;Kamyon ayrıntılarını yapıştır +buttonShareTruckTruckPaintCopy;Boya ayarlarını kopyala +buttonShareTruckTruckPaintPaste;Boya ayarlarını yapıştır +buttonShareTruckWholeTruckCopy;Tüm Kamyon Ayarlarını Kopyala +buttonShareTruckWholeTruckPaste;Tüm Kamyon Ayarlarını Yapıştır +buttonUserColorsShareColors;Renkleri Paylaş +buttonUserCompanyCitiesUnVisit;Ziyaret Edilmemiş +buttonUserCompanyCitiesVisit;Ziyaret Edilmiş +buttonUserCompanyGaragesBuy;Satın Al +buttonUserCompanyGaragesBuyDowngrade;Seviye Düşür +buttonUserCompanyGaragesBuyUpgrade;Satın Al ve Geliştir +buttonUserCompanyGaragesManage;Yönet +buttonUserCompanyGaragesSell;Sat +buttonUserCompanyGaragesUpgrade;Geliştir +buttonUserTrailerSelectCurrent;Varsayılan Dorseyi Seç +buttonUserTrailerSwitchCurrent;Varsayılan Dorse Olarak Ayarla +buttonUserTruckSelectCurrent;Varsayılan +buttonUserTruckSwitchCurrent;Varsayılan Kamyonu bu Kamyonla değiştir +checkBoxFreightMarketFilterDestination;Filtre +checkBoxFreightMarketFilterSource;Filtre +checkBoxProfilesAndSavesProfileBackups;Yedekler +error_could_not_complete_jobs_loop;İş döngüsü tamamlanamadı +error_could_not_decode_file;Program dosyanın kodunu çözemedi +error_could_not_find_file;Program dosya bulamadı +error_could_not_write_to_file;Program dosyaya yazamadı +error_during_importing_db;Veritabanı içe aktarılırken hata oluştu +error_exception;Program istisnası +error_file_not_decoded;Dosya kodu çözülmedi +error_file_was_modified;Dosya oyun tarafından değiştirildi +error_job_parameters_not_filled;Tüm iş parametreleri doldurulmadı +error_save_version_not_detected;Kayıt edilen dosya sürümü algılanamadı +error_sql_exception;Veritabanı istisnası +FormAboutBox;Hakkında {0} +FormAddCustomFolder;Özel klasörleri düzenle +FormColorPicker;Renk seçici +FormSettings;Ayarlar +FormShareUserColors;Oyuncu renklerini paylaş +groupBoxDataBase;Veritabanı +groupBoxFolderType;Klasör tipi +groupBoxGameType;Oyun +groupBoxImportedColors;İthal Renkler +groupBoxMainProfilesAndSaves;Profiller ve Kayıtlar +groupBoxProfilePlayerLevel;Oyuncu Seviyesi +groupBoxProfileSkill;Kariyer +groupBoxProfileUserColors;Kullanıcı Renkleri +groupBoxUserTrailerShareTrailerSettings;Dosdya ayarlarını paylaş +groupBoxUserTrailerTrailer;Dorse +groupBoxUserTrailerTrailerDetails;Ayrıntılar +groupBoxUserTruckShareTruckSettings;Kamyon ayarlarını paylaş +groupBoxUserTruckTruck;Kamyon +groupBoxUserTruckTruckDetails;Ayrıntılar +Kilometers;Kilometre +labelCargoMarketCity;Şehir +labelCargoMarketCompany;Şirket +labelCargoMarketSource;Kaynak +labelCity;şehir +labelCurrency;Para Birimi +labelDistance;Mesafe +labelDownloadDescription;En son sürümü şu adresten indirebilirsiniz: +labelFreightMarketCargo;kargo +labelFreightMarketCity;şehir +labelFreightMarketCompany;Şirket +labelFreightMarketCompanyF;Şirket +labelFreightMarketCountryF;Ülke +labelFreightMarketDestination;Hedef +labelFreightMarketDistance;Toplam yol uzunluğu: +labelFreightMarketFilterMain;Filtre +labelFreightMarketSource;Kaynak +labelFreightMarketUrgency;Acil +labelHowtoDescription;Bu nasıl kullanılır? +labelJobPickupTime;Kargo İlgi Süresi +labelLoopEvery;Döngü yap +labelnew;yeni +labelold;eski +labelor;veya +labelProfileSkill1;Uzun Mesafe +labelProfileSkill2;Yüksek Değerli Kargo +labelProfileSkill3;Hassas Kargo +labelProfileSkill4;Zamanında Teslimat +labelProfileSkill5;Ekonomik Sürüş +labelSupportedGameVersions;Desteklenen oyun sürümleri +labelTrailerPartNameBody;Gövde +labelTrailerPartNameCargo;Kargo +labelTrailerPartNameChassis;Şasi +labelTrailerPartNameWheels;Tekerlekler +labelTruckDetailsFuel;Yakıt +labelTruckPartNameCabin;Kabin +labelTruckPartNameChassis;Şaşi +labelTruckPartNameEngine;Motor +labelTruckPartNameTransmission;Vites +labelTruckPartNameWheels;Tekerlekler +labelUserCompanyCompanyName;Şirket Adı +labelUserCompanyGarages;Garajlar +labelUserCompanyHQcity;Genel Merkez +labelUserCompanyMoneyAccount;Hesaptaki Para +labelUserCompanyVisitedCities;Ziyaret edilmiş şehirler +labelUserTrailerLicensePlate;Plaka +labelUserTruckLicensePlate;Plaka +Large;Büyük +message_database_created;Veritabanı yapısı oluşturuldu. +message_database_missing_creating_db;Database file is missing. Veritabanı oluşturuluyor... +message_database_missing_creating_db_structure;Veritabanı dosyası eksik. Veritabanı yapısı oluşturuluyor... +message_decoding_save_file;Kayıt dosyası çözülüyor... +message_exporting_database;Veritabanı dışa aktarılıyor... +message_file_saved;Dosya kayır edildi. +message_importing_database;Veritabanı içe aktarılıyor... +message_loading_save_file;Kayıt dosyası yükleniyor... +message_no_matching_cities;Filtre ayarlarıyla eşleşen şehir yok. +message_operation_finished;Görev tamamlandı. +message_preparing_data;Veriler hazırlanıyor... +message_saving_file;Dosya kaydediliyor... +Miles;Mil +Not owned;Sahipsiz +radioButtonProfileFolderType;Profil Klasöri +radioButtonRootFolderType;Kök Klasör +radioButtonSaveFolderType;Kayıt Klasöri +radioButtonUnknownFolderType;Bilinmeyen +Small;Küçük +tabPageCargoMarket;Kargo Pazarı +tabPageCompany;Şirket +tabPageConvoyTools;Konvoy Araçları +tabPageFreightMarket;Yük Pazarı +tabPageProfile;Profil +tabPageTrailer;Dorse +tabPageTruck;Kamyon +Tiny;Çok Küçük +toolStripMenuItemAbout;Hakkında +toolStripMenuItemCreateTrFile;Çeviri Yap +toolStripMenuItemDownload;İndir +toolStripMenuItemExit;Çıkış +toolStripMenuItemHelp;Yardım +toolStripMenuItemLanguage;Dil +toolStripMenuItemSettings;Ayarlar +tooltipbuttonProfilesAndSavesRefreshAll;Tazele +currencyEUR;Euro +currencyCHF;İsviçre Frangı +currencyCZK;Çek Cumhuriyeti Kuruşu +currencyGBP;İngiliz Sterlini +currencyPLN;Polonya Zlotisi +currencyHUF;Macaristan Forinti +currencyDKK;Danimarka Kroonu +currencySEK;İsveç Kronası +currencyNOK;Norveç Kroonu +currencyRUB;Rusya Rublesi +currencyUSD;Amerika Doları +currencyCAD;Kanada Doları +currencyMXN;Meksika Pesosu +unsupportedGameVersionTitle;Desteklenmeyen {0} Versiyonu {1} +unsupportedGameVersionText;Yüklü olan {0} versiyonunuz şu anki bu araç tarafından desteklenmiyor.\n\nYüklü Oyun Versiyonu: {1}\n\nŞu Anki Desteklenen Versiyonlar: {2} diff --git a/TS SE Tool/lang/tr-TR/urgency_translate.txt b/TS SE Tool/lang/tr-TR/urgency_translate.txt new file mode 100644 index 00000000..5cbb00b1 --- /dev/null +++ b/TS SE Tool/lang/tr-TR/urgency_translate.txt @@ -0,0 +1,4 @@ +[tr-TR] +0;Standart +1;Önemli +2;Acil diff --git a/TS SE Tool/lang/zh-CN/cargo_translate.txt b/TS SE Tool/lang/zh-CN/cargo_translate.txt new file mode 100644 index 00000000..ebe17851 --- /dev/null +++ b/TS SE Tool/lang/zh-CN/cargo_translate.txt @@ -0,0 +1,422 @@ +[zh-CN] +acetylene;乙炔 +acid;酸 +air_mails;航空邮件 +aircft_tires;飞机轮胎 +aircond;空调设备 +aircraft_eng;飞机引擎 +aljoinery;铝合金细木工 +almond;杏仁 +ammunition;弹药 +apples;苹果 +apples_c;苹果 +aquariums;养鱼缸 +aromatics;芳烃 +arsenic;砷 +asph_miller;沥青铣刨机 - 惠特根808 +atl_cod_flt;大西洋鳕鱼片 +backfl_prev;止回阀 +barley;大麦 +basil;罗勒 +beans;豆子 +beef_meat;牛肉 +beer;啤酒 +beverages;饮料 +beverages_c;饮料 +big_bag_seed;大袋装种子 +boat;船 +boiler_parts;锅炉零件(特种运输) +boric_acid;硼酸 +bottle_water;瓶装水 +bottles;空瓶子 +brake_fluid;制动液 +brake_pads;刹车片 +bricks;砖 +bulldozer;推土机 +butter;黄油 +cable;线缆 +cable_reel;工业电缆盘 +can_sardines;罐装沙丁鱼 +canned_beans;罐装豆子 +canned_beef;罐装牛肉 +canned_fish;鱼罐头 +canned_pork;罐装猪肉 +canned_tuna;罐装金枪鱼 +car_balt1;轿车(波罗的海1) +car_balt2;轿车(波罗的海2) +car_it;轿车(意大利) +caravan;Caravan +carb_water;苏打水 +carbn_pwdr;炭黑粉 +carbn_pwdr_c;炭黑粉 +carcomp;汽车零件 +carengines;汽车发动机 +carrots;胡萝卜 +carrots_c;胡萝卜 +cars_big;轿车(大) +cars_fr;轿车(法国) +cars_mix;轿车(混合) +cars_pickup;轿车(皮卡) +cars_small;轿车(小) +case600;履带拖拉机 +cat_785c;矿用自卸车车体(特种运输) +cat627;铲运机 +cauliflower;菜花 +caviar;鱼子酱 +cement;水泥 +cement_dry;干水泥 +cheese;奶酪 +chem_sorb_c;化学吸附剂 +chem_sorbent;化学吸附剂 +chemicals;化学品 +chewing_gums;口香糖 +chicken_meat;鸡肉 +chimney_syst;烟囱系统 +chlorine;氯 +chocolate;巧克力 +circulators;循环器 +cleaners;清洁剂 +clothes;服装 +clothes_c;服装 +coal;煤 +coconut_milk;椰奶 +coconut_oil;椰油 +coil;电缆盘 +colors;油漆 +comp_process;电脑处理器 +computers;计算机 +concen_juice;浓缩果汁 +concr_beams;混凝土梁(重载) +concr_beams2;混凝土梁 +concr_cent;混凝土拱架 +concr_stair;混凝土楼梯 +condensator;工业凝结器(特种运输) +const_house;简易房 +cont_trees;集装箱树木 +contamin;污染的材料 +copp_rf_gutt;铜制屋顶排水沟 +corks;软木 +cott_cheese;干酪 +crude_oil;原油 +ctubes;水泥管(小) +ctubes_b;水泥管(大) +curtains;窗帘 +cut_flowers;鲜花 +cyanide;氰化物 +daf_tr;卡车 达夫 +dairy;日用品 +desinfection;消毒剂 +diesel;柴油 +diesel_gen;柴油发电机 +digger1000;轮式装载机 +digger500;反铲装载机 +diggers;装载机 +dozer;推土机 - Z35K +driller;钻孔机 D-50 +dry_fruit;干水果 +dry_milk;奶粉 +dryers;烘干机 +drymilk;奶粉 +dynamite;炸药 +elect_wiring;电线 +electro_comp;电子元件 +electronics;电子产品 +emp_wine_bar;空红酒桶 +emp_wine_bot;空红酒瓶 +empty_barr;空油桶 +empty_logs;空原木挂车 +empty_palet;空托盘 +emptybottles;空瓶 +emptytank;储液罐 +ethane;乙烷 +ex_bucket;挖掘机铲斗(特种运输) +excav_soil;工程渣土 +excavator;挖掘机 +excavator_bucket;挖掘机铲斗(特种运输) +exhausts_c;排气系统 +explosives;炸药 +ext_crn_pr;外部角形材 +ext_fil;外部过滤器 +fertilizer;肥料 +fireworks;烟花 +fish_chips;鱼柳 +fl_furn;自组装家具 +floorpanels;地板 +flour;面粉 +fluorine;氟 +food;包装食品 +forklifts;叉车 +forwarder;伐木运输车 +frac_tank;压裂罐 +fresh_fish;鲜鱼 +froz_octopi;冷冻章鱼 +frozen_food;冷冻食品 +frozen_fruit;冷冻水果 +frozen_hake;冷冻鳕鱼 +frozen_veget;冷冻蔬菜 +frsh_herbs;新鲜香料 +fruits;水果 +fuel_oil;燃油 +fuel_tanks;油罐 +fueltanker;油罐车 +furniture;家具 +garlic;大蒜 +gates;闸板 +generator_c;发电机 +glass;玻璃板 +glass_packed;已包装玻璃 +gnocchi;团子 +goat_cheese;山羊奶酪 +grain;粮食 +granite_cube;花岗岩块 +grapes;葡萄 +graph_grease;石墨润滑脂 +grass_rolls;草卷 +gravel;碎石 +guard_rails;护栏 +gummy_bears;小熊软糖 +gypsum;石膏 +hardware;硬件 +harvest_bins;蔬果周转箱 +harvester;联合收割机 +hay;干草 +hchemicals;热化工产品 +heat_exch;换热器(特种运输) +heat_exchanger;换热器(特种运输) +helicopter;直升机 - Ring-429 +hi_volt_cabl;高压电缆 +hipresstank;压力罐 +hmetal;重金属 +home_acc;家居饰品 +honey;蜂蜜 +house_pref;房屋预制件 +househd_appl;家用电器 +hwaste;医疗废物 +hydrochlor;盐酸 +hydrogen;氢 +ibc_cont;IBC中型散装容器 +icecream;冰淇淋 +iced_coffee;罐装冰咖啡 +iron_pipes;铁管(大) +iveco_vans;布雷科货车 +junk;垃圾 +kalmar240;集装箱叉车 +kalmar240_s;集装箱叉车车体 +kb_loader;关节式起重机 +kerosene;煤油 +ketchup;番茄酱 +komatsu155;推土机(重型) +kw_t680;肯沃斯卡车 +lamb_stom;羔羊腹 +largetubes;大型管道 +lattice;建筑楼梯(特种运输) +lavender;薰衣草 +lead;铅 +limestone;石灰石 +limonades;柠檬汁 +live_catt_fr;活牛(法国) +live_cattle;活牛 +liver_paste;肝酱 +locomotive;火车头 - Vossloh G6 +log_harvest;伐木机 +log_loader;原木装载机 +logs;原木 +lpg;液化石油气 +lumber;木料 +lumber_b;木料 +lye;碱液 +m_59_80_r63;巨型轮胎(特种运输) +machine_pts;机械零件 +magnesium;镁 +malt;麦芽 +man_tr;卡车 曼 +maple_syrup;枫糖 +marb_blck;大理石块(大) +marb_blck2;大理石块 +marb_slab;大理石板 +mason_jars;梅森罐 +mbt;移动屏障 +meat;肉 +med_equip;医疗设备 +med_vaccine;医用疫苗 +mercuric;氯化汞 +metal_beams;金属梁 +metal_cans;金属罐 +metal_center;金属拱架 +metal_pipes;铁管 +michelin_59_80_r63;巨型轮胎(特种运输) +milk;奶 +mobile_crane;移动式起重机 雷德45 +mondeos;轿车 +moor_buoy;船用系泊浮筒 +mortar;砂浆 +moto_tires;摩托车轮胎 +motor_oil;机油 +motor_oil_c;机油 +motorcycles;摩托车 +mozzarela;马苏里拉奶酪 +mtl_coil;金属卷材 +mulcher;悬臂割草机 +mystery_box;巨型高科技部件(特种运输) +mystery_cyl;高科技设备(特种运输) +natur_rubber;天然橡胶 +neon;氖 +nitrocel;硝化棉 +nitrogen;氮 +nonalco_beer;无醇啤酒 +nuts;坚果 +nylon_cord;尼龙绳 +office_suppl;办公用品 +oil;油 +oil_filt_c;机油滤清器 +oil_filters;机油滤清器 +olive_oil;橄榄油 +olives;橄榄 +onion;洋葱 +oranges;橙子 +ore;矿石 +outdr_flr_tl;室外地砖 +overweight;低平板半挂 +packag_food;包装食品 +paper;办公用纸 +pasta;意大利面 +pears;梨 +peas;豌豆 +pellet_afood;颗粒状动物饲料 +perfor_frks;性能悬挂叉 +pesticide;农药 +pesto;香蒜酱 +pet_food;宠物食品 +pet_food_c;宠物食品 +petrol;汽油 +phosphor;白磷 +pilot_boat;引航船(特种运输) +pipes;铁管 +plant_substr;培养基 +plast_film;塑料薄膜卷 +plast_film_c;塑料薄膜卷 +plastic;塑料 +plastic_gra;塑料颗粒 +plows;犁 +plumb_suppl;水暖用品 +plums;李子 +pnut_butter;花生酱 +polyst_box;聚苯乙烯盒 +pork_meat;猪肉 +post_packag;邮包 +pot_flowers;盆栽花朵 +potahydro;氢氧化钾 +potassium;钾 +potatoes;土豆 +precast_strs;预制楼梯 +press_sl_val;高压闸阀 +princess;游艇 - 女王V39 +propane;丙烷 +prosciutto;意大利熏火腿 +protec_cloth;防护服 +pumps;泵 +radiators;散热片 +rawmilk;未加工的牛奶 +re_bars;加固钢筋 +refl_posts;反光柱 +reindeer;驯鹿肉 +rice;大米 +rice_c;大米 +roadroller;压路机 +roller;压路机 DYNA CC-2200 +roof_tiles;屋面瓦 +roofing_felt;屋面毡 +rooflights;屋顶天窗 +rubber;橡皮 +rye;黑麦 +salm_fillet;三文鱼片 +salt;食盐 +salt_spice_c;食盐和调料 +salt_spices;食盐和调料 +sand;沙子 +sandwch_pnls;夹芯板 +sausages;香肠 +sawpanels;木屑板 +scaffoldings;脚手架 +scania_tr;卡车 斯堪尼亚 +scooters;滑板车 +scrap_cars;报废车 +scrap_metals;废金属 +seafood;海鲜 +seal_bearing;密封轴承 +sheep_wool;羊毛 +shock_absorb;减震器 +silica;二氧化硅 +silo;巨型筒仓(特种运输) +skir_bo;踢脚板 +skir_tr;裙脚线槽 +smokd_eel;熏鳗鱼 +smokd_sprats;熏鲱鱼 +soap;个人卫生用品 +sodchlor;次氯酸钠 +sodhydro;氢氧化钠 +sodium;钠 +soil;工程渣土 +solvents;溶剂 +soy_milk;豆浆 +spher_valves;球阀 +sq_tub;方形管件 +steel_cord;钢丝绳 +stone_dust;石粉 +stone_wool;岩棉 +stones;石头 +straw_bales;秸秆捆 +stumper;履带式挖根机 +sugar;糖 +sulfuric;硫酸 +tableware;餐具 +terex3160;全地形起重机 +tomatoes;西红柿 +toys;玩具 +tracks;履带 +tractor;拖拉机 RS-666 +tractors;拖拉机 +train_part;火车车轴 +train_part2;火车转向架 +trans_pr;过渡材料 +transformat;变压器 PK900 +transformer;变压器 +transmis;变速器 +transmission;变速箱 +truck_batt;卡车电池 +truck_batt_c;卡车电池 +truck_rims;卡车轮毂 +truck_rims_c;卡车轮毂 +truck_tyres;卡车轮胎 +truckengines;卡车发动机 +tub_grinder;木料桶磨机 +tube;天然气管道部件 +tvs;电视机 +tyres;轮胎 +used_battery;回收的汽车电池 +used_pack;回收的包装 +used_packag;回收的包装 +used_plast;回收的塑料 +used_plast_c;回收的塑料 +vegetable;蔬菜 +vent_tube;通风井 +ventilation;通风井 +vinegar;醋 +vinegar_c;醋 +volvo_cars;豪华SUV +volvo_tr;卡车 沃尔沃 +wallpanels;墙板 +water;水 +watermelons;西瓜 +wheat;小麦 +windml_eng;风力发电机机舱 +windml_tube;风力发电塔 +windows;窗户 +wirtgen250;铣刨机 +wood_bark;树皮 +wooden_beams;木梁 +wrk_cloth;工作服 +wshavings;刨花 +yacht;游艇 +yogurt;酸奶 +young_seed;幼苗 diff --git a/TS SE Tool/lang/zh-CN/cities_translate.txt b/TS SE Tool/lang/zh-CN/cities_translate.txt new file mode 100644 index 00000000..32204de6 --- /dev/null +++ b/TS SE Tool/lang/zh-CN/cities_translate.txt @@ -0,0 +1,928 @@ +[zh-CN] +a;奥镇 +a_short;奥镇 +aalborg;奥尔堡 +aarhus;奥胡斯 +aberdeen;阿伯丁 +aberdeen_wa;阿伯丁 +aberystwyth;阿伯里斯特威斯 +afula;阿富拉 +agnikolaos;圣尼古拉奥斯 +agnikolaos_short;圣尼古拉奥斯 +ajaccio;阿雅克肖 +akko;阿卡 +akranes;阿克拉内斯 +akureyri;阿克雷里 +alajarvi;阿拉耶尔维 +alamogordo;阿拉莫戈多 +aland;奥兰群岛 +albacete;阿尔巴塞特 +albaiulia;阿尔巴尤利亚 +alban;圣阿尔邦迪龙 +albuquerque;阿尔伯克基 +alesund;奥勒松 +alexandroup;亚历山德鲁波利斯 +alicante;阿利坎特 +almeria;阿尔梅里亚 +alta;阿尔塔 +amman;安曼 +amsterdam;阿姆斯特丹 +ancona;安科纳 +andalsnes;翁达尔斯内斯 +andorra;安道尔城 +andorra_vella;安道尔城 +antwerp;安特卫普 +aqaba;亚喀巴 +arad;阿拉德 +aranda;阿兰达 +aranda_short;阿兰达 +are;奥勒 +arnhem;阿纳姆 +artesia;阿蒂西亚 +arvidsjaur;阿维斯焦 +ashdod;阿什杜德 +ashkelon;阿什凯隆 +astoria;阿斯托里亚 +athina;雅典 +augustow;奥古斯图夫 +aurach;奥拉赫 +bacau;巴克乌 +badajoz;巴达霍斯 +bado;巴特恩豪森 +baiamare;巴亚马雷 +bakersfield;贝克斯菲尔德 +balti;巴尔蒂 +balvi;巴尔维 +banjaluka;巴尼亚卢卡 +barcelona;巴塞罗那 +bari;巴里 +barnstaple;巴恩斯特普尔 +barstow;巴斯托 +basel;巴塞尔 +bastia;巴斯蒂亚 +bayonne;巴约讷 +bbiala;别尔斯科-比亚瓦 +beersheva;贝尔谢巴 +beirut;贝鲁特 +belda;贝尔达 +belfast;贝尔法斯特 +bellingham;贝灵汉 +bend;本德 +beograd;贝尔格莱德 +bergen;卑尔根 +berlin;柏林 +bern;伯尔尼 +betshean;贝特谢安 +bialystok;比亚韦斯托克 +bielskpdl;波德拉谢省 +bielskpdl_short;波德拉谢省 +bilbao;毕尔巴鄂 +birmingham;伯明翰 +birsay;伯赛 +bistrita;比斯特里察 +bitola;比托拉 +blagoevgrad;布拉戈耶夫格勒 +blonduos;布伦迪欧斯 +bobolice;博博利采 +boden;博登 +bodo;博德 +bologna;博洛尼亚 +bolungarvik;博隆加维克 +bonifacio;博尼法乔 +bonn;波恩 +bor;博尔 +bordeaux;波尔多 +borgarnes;博尔嘎内斯 +borlange;博伦厄 +botosani;博托沙尼 +bourges;布尔日 +braila;布勒伊拉 +brasov;布拉索夫 +bratislava;布拉迪斯拉发 +bregenz;布雷根茨 +bremen;不莱梅 +bremerhaven;不来梅哈芬 +brest;布雷斯特 +brighton;布莱顿 +bristol;布里斯托尔 +brno;布尔诺 +broadford;布罗德福德 +bronnoysund;布伦讷于松 +brussel;布鲁塞尔 +bucuresti;布加勒斯特 +budapest;布达佩斯 +budejovice;布杰约维采 +budejovice_short;布杰约维采 +burg;费马恩城堡 +burgas;布尔加斯 +burgos;布尔戈斯 +burns;柏恩斯 +busko;布斯科兹德鲁伊 +buzau;布泽乌 +byblos;杰巴尔 +bydgoszcz;比得哥什 +bystrica;班斯卡-比斯特里察 +bytom;比托姆 +cadiz;加的斯 +cagliari;卡利亚里 +cairnryan;卡琳赖安 +cairo;开罗 +calais;加来 +calarasi;克勒拉希 +calvi;卡尔维 +cambridge;剑桥 +camp_verde;坎普维德 +canfranc;坎弗兰克 +canterbury;坎特伯雷 +cardiff;卡迪夫 +carlisle;卡莱尔 +carlsbad;卡尔斯巴德 +carlsbad_nm;卡尔斯巴德 +carson_city;卡森城 +cassino;卡西诺 +catania;卡塔尼亚 +catanzaro;卡坦扎罗 +cedar_city;雪松城 +cernavoda;切尔纳沃德 +chania;干尼亚 +charleroi;沙勒罗瓦 +chelm;海乌姆 +chelmsford;切姆斯福德 +chemnitz;开姆尼茨 +cherb;瑟堡昂科唐坦 +cherbourg;瑟堡昂科唐坦 +cherbourg_short;瑟堡昂科唐坦 +chernivtsi;切尔诺夫策 +chernyakh;切尔尼亚霍夫斯克 +chisinau;基希讷乌 +chorzow;霍茹夫 +chur;库尔 +cieszyn;切申 +ciudadreal;雷阿尔城 +civaux;西沃核电站 +clermont;克莱蒙费朗 +clifton;克利夫顿 +clovis;克洛维斯 +cluj;克鲁日 +cluj_napoca;克卢日-纳波卡 +colville;科尔维尔 +constanta;康斯坦察 +contreras;孔特雷拉斯 +coos_bay;库斯湾 +cork;科克 +craiova;克拉约瓦 +croydon;克罗伊登 +cuenca;昆卡 +cuxhaven;库克斯港 +czluchow;奇武胡夫 +damascus;大马士革 +damietta;达米埃塔 +daugavpils;陶格夫匹尔斯 +debrecen;德布勒森 +deraa;德拉 +deva;德瓦 +dijon;第戎 +dimona;迪莫纳 +doboj;多博伊 +dombas;杜姆奥斯 +donostia;圣塞瓦斯蒂安 +dortmund;多特蒙德 +douglas;道格拉斯 +dover;多佛 +drammen;德拉门 +dresden;德累斯顿 +drobeta;德罗贝塔-塞维林堡 +dublin;都柏林 +dubrovnik;杜布罗夫尼克 +duisburg;杜伊斯堡 +dumfries;邓弗里斯 +durres;都拉斯 +dusseldorf;杜塞尔多夫 +dziwnowek;迪沃诺克 +edinburgh;爱丁堡 +edirne;埃迪尔内 +egypt;埃及 +ehrenberg;埃伦伯格 +eilat;埃拉特 +eindhoven;埃因霍温 +eingedi;隐基底 +el_centro;埃尔森特罗 +elarish;里士 +elblag;埃尔布隆格 +elk;麋鹿 +elko;埃尔科 +ely;伊利 +erfurt;爱尔福特 +esbjerg;埃斯比约 +eugene;尤金 +eureka;尤里卡 +europabr;欧罗巴大桥休息区 +europoort;欧罗波特 +everett;埃弗里特 +evie;伊维 +evora;埃武拉 +exeter;埃克塞特 +falun;法伦 +farmington;法明顿 +feldkirch;费尔德基希 +felixstowe;费利克斯托港 +firenze;佛罗伦萨 +fishguard;菲什加德 +flagstaff;弗拉格斯塔夫 +flensburg;弗伦斯堡 +floro;弗洛罗 +focsani;福克沙尼 +folkestone;福克斯通 +forst;福斯特 +forst_short;福斯特 +frankfurt;法兰克福 +fraserburgh;弗雷泽堡 +frederikshv;腓特烈港 +freiburg;弗赖堡 +freiburg_short;弗赖堡 +fresno;弗雷斯诺 +ftwilliam;威廉堡 +furth;菲尔特 +g_canyon_vlg;大峡谷村 +galati;加拉茨 +gallivare;耶利瓦勒 +gallup;盖洛普 +galway;戈尔韦 +gardermoen;加勒穆恩 +gavle;耶夫勒 +gdansk;格但斯克 +gdynia;格丁尼亚 +gedser;盖瑟 +geilo;耶卢 +geisel;盖塞尔温德 +geneve;日内瓦 +genova;热那亚 +georgia;格鲁吉亚 +geta;耶塔 +gizycko;吉日茨科 +glasgow;格拉斯哥 +gliwice;格利维采 +godby;戈德比 +golfech;格尔费什核电站 +gorzow;戈茹夫 +gorzow_short;戈茹夫 +gostynin;戈斯蒂宁 +goteborg;哥德堡 +granada;格拉纳达 +grand_canyon;科罗拉多大峡谷 +grand_coulee;大古力 +graz;格拉茨 +grimsby;格里姆斯比 +groedig;格洛迪 +groningen;格罗宁根 +grudziadz;格鲁琼兹 +grumantbyen;格鲁曼特比恩 +guadalajara;瓜达拉哈拉 +gulbene;古尔贝内 +gusev;古谢夫 +gyor;杰尔 +haapsalu;哈普萨卢 +hadera;哈德拉 +haifa;海法 +hainburg;海恩堡 +hainburg_short;海恩堡 +halle;哈莉 +halle_short;哈莉 +halmstad;哈尔姆斯塔德 +hamar;哈马尔 +hamburg;汉堡 +hameenlinna;海门林纳 +hammerfest;哈默菲斯特 +hannover;汉诺威 +haparanda;哈帕兰达 +haql;哈格勒 +haugesund;海于格松 +hawes;霍斯 +heilbronn;海尔布隆 +helsingborg;赫尔辛堡 +helsinki;赫尔辛基 +herning;海宁 +herzliya;赫兹利亚 +heysham;希舍姆 +hiorthhamn;希特哈姆 +hirtshals;希茨海尔斯 +hobbs;霍布斯 +hofn;赫本 +hofn_short;赫本 +holbrook;霍尔布鲁克 +holmavik;侯尔马维克 +holstebro;霍尔斯特布罗 +holyhead;霍利黑德 +honefoss;侯尼霍斯 +honningsvag;霍宁斯沃格 +hornbrook;霍恩布鲁克 +hrkr;赫拉德茨-克拉洛韦 +huesca;韦斯卡 +hull;赫尔 +hunedoara;胡内多阿拉 +huron;休伦 +iasi;雅西 +igoumenitsa;伊古迈尼察 +iisalmi;伊萨尔米 +ijmuiden;艾默伊登 +ilawa;伊拉华 +ilomantsi;伊萝曼兹 +ilowa;伊沃瓦 +ilza;伊乌扎 +innsbruck;因斯布鲁克 +inverness;因弗内斯 +ioannina;伊欧亚尼纳 +irakleio;伊拉克利翁 +iraq;伊拉克 +irbid;伊尔比德 +irun;伊伦 +isafjordur;伊萨菲尔德 +isleofman;马恩岛 +ismailia;伊斯梅利亚 +israel;以色列 +istanbul;伊斯坦布尔 +ivalo;伊瓦洛 +ivanofrank;伊万诺-弗兰科夫斯克 +ivanofrank_short;伊万诺-弗兰科夫斯克 +izmir;伊兹密尔 +izra;伊兹拉 +jaca;哈卡 +jackpot;杰克波特 +janow;卢布林地区亚努夫 +jekabpils;杰卡布皮尔斯 +jericho;耶利哥 +jersey;泽西岛 +jerusalem;耶路撒冷 +jihlava;伊赫拉瓦 +joensuu;约恩苏 +jokkmokk;约克莫克 +jonkoping;延雪平 +jonquera;拉洪克拉 +jordan;约旦 +jyvaskyla;于韦斯屈莱 +kajaani;卡亚尼 +kalamata;卡拉马塔 +kaliningrad;加里宁格勒 +kalix;卡利克斯 +kalmar;卡尔马 +kamianets;卡缅涅茨-波多利斯基 +kamianets_short;卡缅涅茨-波多利斯基 +kandalaksha;坎达拉克沙 +kapellskar;卡珀尔谢尔 +kardla;凯尔德拉 +karesuando;卡雷苏安多 +karlovo;卡尔洛沃 +karlskrona;卡尔斯克鲁纳 +karlsruhe;卡尔斯鲁厄 +karlstad;卡尔斯塔德 +karsamaki;凯尔赛迈基 +kassel;卡塞尔 +katowice;卡托维兹 +kaunas;考纳斯 +kavala;卡瓦拉 +kayenta;凯恩塔 +keflavik;凯夫拉维克(Keflavik) +kemi;凯米 +kemijarvi;克密加维 +kennewick;肯纳威克 +kesan;凯尚 +khmelnytskyi;赫梅利尼茨基 +kiel;基尔 +kielce;凯尔采 +kilpisjarvi;基尔皮斯耶尔维 +kingman;金曼 +kirkenes;希尔科内斯 +kirkwall;柯克沃尔 +kiruna;基律纳 +kittila;基蒂莱 +klagenfurt;克拉根福 +klaipeda;克莱佩达港 +klaksvik;克拉克斯维克 +klamath_f;克拉马斯瀑布 +kobenhavn;哥本哈根 +koblenz;科布伦茨 +kokkola;科科拉 +kolding;科灵 +kolka;科尔卡 +koln;科隆 +komorniki;科莫尔尼基 +konin;科宁 +korce;科尔察 +korosten;克罗斯腾 +kosice;科希策 +koszalin;科沙林 +kotka;科特卡 +kouvola;科沃拉 +kovel;科韦利 +kozloduy;科兹洛杜伊 +krafla;卡拉夫拉 +kragujevac;克拉古耶瓦茨 +krakow;克拉科夫 +kristiansand;克里斯蒂安桑 +kristianstad;克里斯蒂安斯塔德 +kristiansund;克里斯蒂安松 +kristiinank;克里斯蒂娜城 +krosno;克罗斯诺 +kshmona;基里亚特什莫纳 +kuhmo;库赫莫 +kunda;昆达 +kuopio;库奥皮奥 +kuressaare;库雷萨雷 +kuusamo;库萨莫 +kyiv;基辅 +lahti;拉赫蒂 +lakeview;雷克威尔 +lamia;拉米亚 +lappeenranta;拉彭兰塔 +larisa;拉里萨 +larnaka;拉纳卡 +larne;拉恩 +larochelle;拉罗谢尔 +las_cruces;拉斯克鲁塞斯 +las_vegas;拉斯维加斯 +laspezia;拉斯佩齐亚 +latakia;拉塔基亚 +laurent;圣劳伦斯 +lebanon;黎巴嫩 +lecco;莱科 +lefkosia;尼科西亚 +lehavre;勒阿弗尔 +leipzig;莱比锡 +lellinge;莱灵厄 +lemans;勒芒 +lemesos;利马索尔 +leskovac;莱斯科瓦茨 +liege;列日 +lieksa;列克萨 +liepaja;利耶帕亚 +lile_rousse;利勒鲁斯 +lille;里尔 +lillehammer;利勒哈默尔 +limerick;利默里克 +limoges;利摩日 +linkoping;林雪平 +linz;林茨 +lisboa;里斯本 +lisburn;利斯本 +liverpool;利物浦 +livorno;里窝那 +ljubljana;卢布尔雅那 +ljugarn;于冈 +lleida;莱里达 +lodz;罗兹 +logan;洛根 +lomza;沃姆扎 +london;伦敦 +londonderry;伦敦德里 +londonderry_short;伦敦德里 +longview;郎维尤 +longyearbyem;朗伊尔城 +longyearbyen;朗伊尔城 +lorient;洛里昂 +los_angeles;洛杉矶 +loviisa;洛维萨 +lublin;卢布林 +luga;卢加 +lulea;吕勒奥 +lutsk;卢茨克 +luxembourg;卢森堡 +lviv;利沃夫 +lyon;里昂 +maan;马安 +madaba;米底巴 +madrid;马德里 +mafraq;马弗拉克 +magdeburg;马格德堡 +mainz;美因茨 +malaga;马拉加 +malmberget;马尔姆贝里耶 +malmo;马尔默 +manchester;曼彻斯特 +mangalia;曼加利亚 +mannheim;曼海姆 +manresa;曼雷萨 +maribor;马里博尔 +mariehamn;玛丽港 +marijampole;马里扬泊列 +marseille;马赛 +mazeikiai;马热伊基艾 +medford;梅德福 +messina;墨西拿 +metz;梅斯 +miedzyzdroje;梅蒂多杰 +mikkeli;米凯利 +milano;米兰 +mitzpe;米茨佩拉蒙 +mlada;姆拉达-博莱斯拉夫 +mlada_short;姆拉达-博莱斯拉夫 +moab;摩押 +moerdijk;穆尔代克 +moirana;摩城 +moirana_short;摩城 +molde;莫尔德 +monaco_city;摩纳哥 +montana;蒙塔纳 +montdemarsan;蒙德马桑 +montpellier;蒙彼利埃 +mostar;莫斯塔尔 +mragowo;姆龙戈沃 +mukacheve;穆卡切沃 +mulhouse;米卢斯 +munchen;慕尼黑 +murcia;穆尔西亚 +murmansk;摩尔曼斯克 +naantali;楠塔利 +nabatieh;纳巴提耶 +namsos;纳姆索斯 +nantes;南特 +napoli;那不勒斯 +narbonne;纳博讷 +narva;纳尔瓦 +narvik;纳尔维克 +nazareth;拿撒勒 +netanya;内坦亚 +newcastle;纽卡斯尔 +newport;纽波特 +nice;尼斯 +nikel;尼克尔 +nis;尼什 +nogales;诺加利斯 +novipazar;新帕扎尔 +novisad;诺维萨德 +novohradvol;诺沃拉德-沃林斯基 +novohradvol_short;诺沃拉德-沃林斯基 +novovolynsk;诺沃沃林斯克 +nowogard;诺沃加德 +nurmes;努尔梅斯 +nurnberg;纽伦堡 +nynashamn;尼奈斯港 +oakdale;奥克戴尔 +oakland;奥克兰 +oban;奥本 +oberhausen;奥伯豪森 +obsteig;奥布斯泰格 +odda;奥达 +odense;欧登塞 +odessa;敖德萨 +ogden;奥格登 +ogre;奥格雷 +ohrid;奥赫里德 +olafsvik;欧拉夫斯维克 +olbia;奥尔比亚 +olkiluoto;奥尔基卢奥托岛核电站 +olomouc;奥洛穆茨 +olsztyn;奥尔什丁 +olszyna;奥尔希纳 +olympia;奥林匹亚 +omak;奥马克 +ontario;安大略 +opole;奥博蕾 +oppdal;奥普达尔 +oradea;奥拉迪亚 +orebro;厄勒布鲁 +orkanger;奥康厄尔 +orleans;奥尔良 +ornskoldsvik;恩舍尔兹维克 +osijek;奥西耶克 +oslo;奥斯陆 +osnabruck;奥斯纳布吕克 +ostersund;厄斯特松德 +ostrava;俄斯特拉发 +ostroda;奥斯特鲁达 +ostroleka;奥斯特罗文卡 +ostrowm;奥斯特鲁夫 +ostrowm_short;奥斯特鲁夫 +otta;乌塔 +oulu;奥卢 +oxnard;奥克斯纳德 +padborg;帕兹堡 +pafos;帕福斯 +page;佩吉 +pajarito_rest_area;帕哈里托休息区 +paldiski;帕尔迪斯基 +palermo;巴勒莫 +paluel;帕卢埃尔核电站 +pamplona;潘普洛纳 +pancevo;潘切沃 +panevezys;帕内韦日斯 +paris;巴黎 +parma;帕尔马 +parnu;派尔努 +patra;帕特雷 +pau;波城 +pecs;佩奇 +pedro_travel_center;佩德罗旅游中心 +pello;佩洛 +pendleton;彭德尔顿 +penzance;彭赞斯 +pernik;佩尔尼克 +perpignan;佩皮尼昂 +perth;珀斯 +pescara;佩斯卡拉 +petersburg;圣彼得堡 +phoenix;菲尼克斯 +piatra;皮亚特拉尼亚姆茨 +pila;皮瓦 +pioche;皮奥奇 +piotrkowt;彼得库夫 +piotrkowt_short;彼得库夫 +pirdop;皮尔多普 +pitesti;皮特什蒂 +pleven;普列文 +ploce;普洛切 +plock;普沃茨克 +plovdiv;普罗夫迪夫 +plymouth;普利茅斯 +plzen;比尔森 +podgorica;波德戈里察 +poitiers;普瓦捷 +pori;波里 +port_angeles;安吉利斯港 +porthmadog;波斯马多格 +portland;波特兰 +porto_vecchi;韦基奥港 +portree;特里 +portsaid;塞得港 +portsmouth;朴茨茅斯 +porvoo;波尔沃 +poznan;波兹南 +prague;布拉格 +preveza;普雷韦扎 +price;普赖斯 +prilep;普里莱普 +primm;普里姆 +provo;普若佛 +przemysl;普热梅希尔 +pskov;普斯科夫 +ptolemaida;普托莱迈达 +pula;普拉 +puttgarden;普特加登 +radom;拉多姆 +rakvere;拉克韦雷 +ramallah;拉马拉 +ramsey;拉姆西 +raton;拉顿 +razgrad;拉兹格勒 +redding;雷丁 +reims;兰斯 +rennes;雷恩 +reno;里诺 +resita;雷希察 +reutte;罗伊特 +reydar;雷扎尔菲厄泽 +reykjanes;雷恰内斯拜尔 +reykjavik;雷克雅未克 +rezekne;雷泽克内 +riga;里加 +rijeka;里耶卡 +rimini;里米尼 +rishon;里雄莱锡安 +rivne;里夫尼 +roadworks_a7;工地_A7 +roadworks_a9;工地_A9 +rodbyhavn;勒兹比港 +roma;罗马 +ronne;伦讷 +roscoff;罗斯科夫 +rostock;罗斯托克 +roswell;罗斯威尔 +rotterdam;鹿特丹 +rovaniemi;罗瓦涅米 +ruse;鲁塞 +rutba;鲁巴 +ruwaished;午微失德 +rzeszow;热舒夫 +saarbrucken;萨尔布吕肯 +sacramento;萨克拉门托 +sady;萨迪 +safawi;萨法维 +salamanca;萨拉曼卡 +saldus;萨尔杜斯 +salem;塞勒姆 +salina;盐田 +salt_lake;盐湖城 +salzburg;萨尔茨堡 +san_diego;圣地亚哥 +san_francisc;旧金山 +san_rafael;圣拉斐尔 +san_simon;圣西蒙 +sanfernando;圣费尔南多 +sangerhausen;桑格豪森 +sangiovanni;维拉圣焦万尼 +sanok;萨诺克 +santa_cruz;圣克鲁斯 +santa_fe;圣菲 +santa_maria;圣玛丽亚 +santarem;圣塔伦 +sarajevo;萨拉热窝 +sassari;萨萨里 +satumare;萨图马雷 +saudiarabia;沙特阿拉伯 +savonlinna;萨翁林纳 +sayda;赛达 +seattle;西雅图 +selfoss;塞尔福斯 +senj;塞尼 +serres;塞雷 +sevilla;塞维利亚 +seydis;塞济斯菲厄泽 +sheffield;谢菲尔德 +shkoder;斯库台 +show_low;肖洛 +shumen;苏曼 +siauliai;希奥利艾 +sibenik;希贝尼克 +sibenik2;希贝尼克 +sibiu;锡比乌 +siedlce;谢德尔采 +sierra_vista;谢拉维斯塔 +skelleftea;谢莱夫特奥 +skopje;斯科普里 +skovde;舍夫德 +slbrod;斯拉沃尼亚布罗德 +slbrod_short;斯拉沃尼亚布罗德 +sligo;斯莱戈 +sliven;斯利文 +slupsk;斯武普斯克 +socorro;索科罗 +sodankyla;苏丹屈莱 +soderhamn;瑟德港 +sodertalje;南泰利耶 +sofia;索非亚 +sopot;索波特 +soria;索里亚 +sosnovy_bor;索斯诺维波尔 +sosnowiec;索斯诺维茨 +southampton;南安普敦 +split;斯普利特 +spokane;斯波坎 +st_george;圣乔治 +stargard;斯塔加德 +stavanger;斯塔万格 +sthelier;圣赫利尔 +sthelier_short;圣赫利尔 +stip;什蒂普 +stockholm;斯德哥尔摩 +stockton;斯托克顿 +stornoway;斯托诺韦(Stornoway) +stpeterport;圣彼得港 +stpeterport_short;圣彼得港 +stranraer;斯特兰拉尔 +strasbourg;斯特拉斯堡 +stromness;斯特罗姆内斯 +stryi;斯特瑞 +strzelcekraj;斯切尔采-克拉延斯凯 +strzelcekraj_short;斯切尔采-克拉延斯凯 +stuttgart;斯图加特 +stzagora;斯塔拉扎戈拉 +subotica;苏博蒂察 +suceava;苏恰瓦 +suchylas;苏西拉斯 +suez;苏伊士(Suez) +sundsvall;松兹瓦尔 +suwalki;苏瓦乌基 +suzzara;苏扎拉 +svalbard;斯瓦尔巴群岛 +svalsat_short;斯瓦尔巴东部卫星站 +svalsateast;斯瓦尔巴东部卫星站 +svalsatwest;斯瓦尔巴西部卫星站 +svolvaer;斯沃尔韦尔 +swansea;斯旺西 +swinoujscie;斯维诺乌伊希切 +syria;叙利亚 +szczecin;什切青 +szeged;塞格德 +szombathely;松博特海伊 +taba;塔巴 +tacoma;塔科马 +tallinn;塔林 +tampere;坦佩雷 +tanabru;塔纳布鲁 +taranto;塔兰托 +tarbert;塔伯特 +targu_mures;特尔古穆列什 +targujiu;特尔古日乌 +targumures;特尔古穆列什 +tartous;塔尔图斯 +tartu;塔尔图 +taurage;陶拉盖 +tekirdag;泰基尔达 +telaviv;特拉维夫 +terni;特尔尼 +ternopil;捷尔诺波尔 +teruel;特鲁埃尔 +the_dalles;达尔斯 +thessaloniki;塞萨洛尼基 +thurso;瑟索 +tiberias;提比利亚 +timisoara;蒂米什瓦拉 +tirane;地拉那 +tonopah;托诺帕 +torino;都灵 +tornio;托尔尼奥 +torrevieja;托雷维耶哈 +torshavn;托尔斯港 +toulouse;图卢兹 +tralee;特拉利 +travemunde;特拉弗明德 +trelleborg;特雷勒堡 +trieste;的里雅斯特 +trikala;特里卡拉 +trinity;三一 +tripoli;特里波利 +tripolilb;塔拉布鲁斯 +trnava;特尔纳瓦 +tromso;特罗姆瑟 +trondheim;特隆赫姆 +truckee;特拉基 +truckstop1;海沃斯莱乌 +truckstop2;欧罗巴大桥 +truckstope45;海沃斯莱乌 +tucson;图森 +tucumcari;图克姆卡里 +tukums;图库姆斯 +tulcea;图尔恰 +turku;图尔库 +tvoroyri;特瓦罗伊里 +tyr;提尔 +uelzen;于尔岑 +uig;祖塔 +ukiah;尤奇亚 +ukmerge;乌克梅尔盖 +ullapool;阿勒浦 +ulm;乌尔姆 +umea;于默奥 +uppsala;乌普萨拉 +utena;乌田纳 +utsjoki;乌茨约基 +uzhhorod;乌日霍罗德 +vaasa;瓦萨 +vaduz;瓦杜兹 +valencia;瓦伦西亚 +valga;巴尔加 +valka;瓦尔卡 +valladolid;巴利亚多利德 +valmiera;瓦尔米耶拉 +vancouver;温哥华 +vantaa;万塔 +varkaus;瓦尔考斯 +varna;瓦尔纳 +vasaros;瓦沙罗什瑙梅尼 +vasarosnameny;瓦沙罗什瑙梅尼 +vasteraas;韦斯特罗斯 +vaxjo;韦克舍 +veli_tarnovo;大特尔沃诺 +venezia;威尼斯 +ventspils;文茨皮尔斯 +verkhnetulom;上图洛姆斯基 +vernal;韦纳尔 +verona;维罗纳 +vestmann;韦斯特曼纳埃亚尔 +viborg;维堡 +vicenza;维琴察 +vidin;维丁 +viitasaari;维塔萨里 +vik;维克 +vik_short;维克 +vilnius;维尔纽斯 +vinaros;比纳罗斯 +vinnytsia;文尼察 +virovitica;维罗维蒂察 +visby;维斯比 +vitoria;维多利亚 +vlore;发罗拉 +vranje;弗拉涅 +vtarnovo;大特尔诺沃 +vyborg;维堡 +walcz;瓦乌奇 +warszawa;华沙 +waterford;沃特福德 +wenatchee;韦纳奇 +westbank;巴勒斯坦 +wexford;韦克斯福德 +wick;威克 +wien;维也纳 +wiesbaden;威斯巴登 +winnemucca;温尼马卡 +wroclaw;弗罗茨瓦夫 +wrzesnia;弗热希尼亚 +yakima;亚基马 +ystad;于斯塔德 +yuma;尤马 +zabrze;扎布热 +zadar;扎达尔 +zagreb;萨格勒布 +zahle;扎赫勒 +zakrzewo;祖塔 +zamosc;扎莫希奇 +zaragoza;萨拉戈萨 +zarka;扎尔卡 +zelenogradsk;泽列诺格拉茨克 +zgierz;兹盖日 +zgorzelec;兹戈热莱茨 +zhytomyr;日托米尔 +zrenjanin;兹雷尼亚宁 +zurich;苏黎世 +zuta;祖塔 +zuta2;祖塔 +zwolle;兹沃勒 diff --git a/TS SE Tool/lang/zh-CN/companies_translate.txt b/TS SE Tool/lang/zh-CN/companies_translate.txt new file mode 100644 index 00000000..00c292be --- /dev/null +++ b/TS SE Tool/lang/zh-CN/companies_translate.txt @@ -0,0 +1,2 @@ +[zh-CN] ++all;全部 diff --git a/TS SE Tool/lang/zh-CN/countries_translate.txt b/TS SE Tool/lang/zh-CN/countries_translate.txt new file mode 100644 index 00000000..4c8a4584 --- /dev/null +++ b/TS SE Tool/lang/zh-CN/countries_translate.txt @@ -0,0 +1,68 @@ +[zh-CN] ++all;全部 ++unsorted;未知 +aland;奥兰群岛 +albania;阿尔巴尼亚 +andorra;安道尔 +arizona;亚利桑那州 +austria;奥地利 +belarus;白罗斯 +belgium;比利时 +bosnia;波黑 +bulgaria;保加利亚 +california;加利福尼亚州 +croatia;克罗地亚 +cyprus;塞浦路斯 +czech;捷克 +denmark;丹麦 +egypt;埃及 +estonia;爱沙尼亚 +faroe;法罗群岛 +finland;芬兰 +france;法国 +georgia;格鲁吉亚 +germany;德国 +greece;希腊 +hungary;匈牙利 +iceland;冰岛 +iom;马恩岛 +iraq;伊拉克 +ireland;爱尔兰 +israel;以色列 +italy;意大利 +jersey;泽西岛 +jordan;约旦 +latvia;拉脱维亚 +lebanon;黎巴嫩 +liecht;列支敦士登 +lithuania;立陶宛 +luxembourg;卢森堡 +macedonia;北马其顿 +mnegro;黑山 +moldova;摩尔多瓦 +monaco;摩纳哥 +netherlands;荷兰 +nevada;内华达州 +new_mexico;新墨西哥州 +nireland;北爱尔兰 +norway;挪威 +oregon;俄勒冈州 +poland;波兰 +portugal;葡萄牙 +romania;罗马尼亚 +russia;俄罗斯 +saudia;沙特阿拉伯 +serbia;塞尔维亚 +slovakia;斯洛伐克 +slovenia;斯洛文尼亚 +spain;西班牙 +svalbard;斯瓦尔巴群岛 +sweden;瑞典 +switzerland;瑞士 +syria;叙利亚 +turkey;土耳其 +uk;英国 +ukraine;乌克兰 +utah;犹他州 +washington;华盛顿州 +westbank;巴勒斯坦 diff --git a/TS SE Tool/lang/zh-CN/flag.png b/TS SE Tool/lang/zh-CN/flag.png new file mode 100644 index 00000000..0626a746 Binary files /dev/null and b/TS SE Tool/lang/zh-CN/flag.png differ diff --git a/TS SE Tool/lang/zh-CN/lngfile.txt b/TS SE Tool/lang/zh-CN/lngfile.txt new file mode 100644 index 00000000..e737a22f --- /dev/null +++ b/TS SE Tool/lang/zh-CN/lngfile.txt @@ -0,0 +1,206 @@ +[zh-CN] +buttonAddCustomPath;添加 +buttonCancel;取消 +buttonCargoMarketRandomizeCargoCity;随机货物列表 +buttonCargoMarketRandomizeCargoCompany;随机货物列表 +buttonCargoMarketResetCargoCity;清空货物列表 +buttonCargoMarketResetCargoCompany;清空货物列表 +buttonChooseFolder;选择文件夹 +buttonClearColor;清空 +buttonConvoyToolsGPSCurrentPositionCopy;复制车辆位置 +buttonConvoyToolsGPSCurrentPositionPaste;粘贴车辆位置 +buttonConvoyToolsGPSStoredGPSPathCopy;复制导航路线 +buttonConvoyToolsGPSStoredGPSPathPaste;粘贴导航路线 +buttonConvoyToolsGPSTruckPositionMultySaveCopy;从多个存档中复制车辆位置 +buttonConvoyToolsGPSTruckPositionMultySavePaste;根据多个车辆位置创建多个存档 +buttonDBClear;清空 +buttonDBExport;导出 +buttonDBImport;导入 +buttonEditCPlist;编辑列表 +buttonExport;导出 +buttonFreightMarketAddJob;添加任务到列表 +buttonFreightMarketClearJobList;清空列表 +buttonFreightMarketRandomizeCargo;随机生成货物 +buttonImport;导入 +buttonMainAddCustomFolder;添加自定义文件夹 +buttonMainDecryptSave;解密 +buttonMainGameSwitchATS;美卡 +buttonMainGameSwitchETS;欧卡2 +buttonMainLoadSave;加载存档 +buttonMainWriteSave;保存 +buttonPlayerLevelMaximum;最大 >> +buttonPlayerLevelMinimum;<< 最小 +buttonProfilesAndSavesOpenSaveFolder;打开文件夹 +buttonReplaceColors;↑↑↑ 替换 ↑↑↑ +buttonSave;保存 +buttonShareTrailerTrailerDetailsCopy;复制挂车数据 +buttonShareTrailerTrailerDetailsPaste;粘贴挂车数据 +buttonShareTrailerTrailerPaintCopy;复制喷漆设置 +buttonShareTrailerTrailerPaintPaste;粘贴喷漆设置 +buttonShareTrailerWholeTrailerCopy;复制所有挂车设置 +buttonShareTrailerWholeTrailerPaste;粘贴所有挂车设置 +buttonShareTruckTruckDetailsCopy;复制卡车数据 +buttonShareTruckTruckDetailsPaste;粘贴卡车数据 +buttonShareTruckTruckPaintCopy;复制喷漆设置 +buttonShareTruckTruckPaintPaste;粘贴喷漆设置 +buttonShareTruckWholeTruckCopy;复制所有卡车设置 +buttonShareTruckWholeTruckPaste;粘贴所有卡车设置 +buttonUserColorsShareColors;分享颜色 +buttonUserCompanyCitiesUnVisit;取消解锁 +buttonUserCompanyCitiesVisit;解锁 +buttonUserCompanyGaragesBuy;购买 +buttonUserCompanyGaragesBuyDowngrade;降级 +buttonUserCompanyGaragesBuyUpgrade;购买与升级 +buttonUserCompanyGaragesManage;管理 +buttonUserCompanyGaragesSell;出售 +buttonUserCompanyGaragesUpgrade;升级 +buttonUserTrailerSelectCurrent;玩家当前挂车 +buttonUserTrailerSwitchCurrent;将该挂车设为玩家当前挂车 +buttonUserTruckSelectCurrent;玩家当前卡车 +buttonUserTruckSwitchCurrent;将该卡车设为玩家当前卡车 +checkBoxFreightMarketFilterDestination;过滤 +checkBoxFreightMarketFilterSource;过滤 +checkBoxFreightMarketRandomDest;随机 +checkBoxProfilesAndSavesProfileBackups;备份 +checkSCSForumToolStripMenuItem;SCS 论坛 +checkTMPForumToolStripMenuItem;TruckersMP 论坛 +error_could_not_complete_jobs_loop;无法完成任务循环 +error_could_not_decode_file;无法解码文件 +error_could_not_find_file;找不到文件 +error_could_not_write_to_file;无法写入文件 +error_during_importing_db;导入数据库时出错 +error_exception;程序异常 +error_file_not_decoded;文件未解码 +error_file_was_modified;文件已被游戏修改 +error_job_parameters_not_filled;请将所有栏位填写完整 +error_save_version_not_detected;未能检测到存档文件的版本号 +error_sql_exception;数据库异常 +FormAboutBox;关于 {0} +FormAddCustomFolder;自定义目录 +FormColorPicker;颜色拾取器 +FormProgramSettings;程序设置 +FormSettings;设置 +FormShareUserColors;分享预设颜色 +groupBoxDataBase;数据库 +groupBoxFolderType;文件夹类型 +groupBoxGameType;游戏 +groupBoxImportedColors;导入颜色 +groupBoxMainProfilesAndSaves;档案与存档 +groupBoxProfilePlayerLevel;玩家级别 +groupBoxProfileSkill;技能 +groupBoxProfileUserColors;预设颜色 +groupBoxUserTrailerShareTrailerSettings;分享挂车设置 +groupBoxUserTrailerTrailer;挂车 +groupBoxUserTrailerTrailerDetails;详细数据 +groupBoxUserTruckShareTruckSettings;分享卡车设置 +groupBoxUserTruckTruck;卡车 +groupBoxUserTruckTruckDetails;详细数据 +Kilometers;公里 +labelCargoMarketCity;城市 +labelCargoMarketCompany;公司 +labelCargoMarketSource;起点 +labelCheckUpdatesOnStartup;启动时自动检查更新 +labelCity;城市 +labelCurrency;币种 +labelDayShort;天 +labelDistance;距离单位 +labelDownloadDescription;访问以下链接下载最新版本: +labelFreightMarketCargo;货物 +labelFreightMarketCity;城市 +labelFreightMarketCompany;公司 +labelFreightMarketCompanyF;公司 +labelFreightMarketCountryF;国家或地区 +labelFreightMarketDestination;终点 +labelFreightMarketDistance;路线里程: +labelFreightMarketFilterMain;过滤 +labelFreightMarketSource;起点 +labelFreightMarketTrailer;挂车 +labelFreightMarketUrgency;加急 +labelHourShort;时 +labelHowtoDescription;使用帮助 +labelJobPickupTime;货物失效时长 +labelLoopEvery;循环 +labelnew;新颜色 +labelold;旧颜色 +labelor;或 +labelProfileSkill0;危险品 +labelProfileSkill1;长途运输 +labelProfileSkill2;贵重货物 +labelProfileSkill3;易碎货物 +labelProfileSkill4;及时运输 +labelProfileSkill5;燃油效能 +labelShowSplashOnStartup;启动时显示欢迎对话框 +labelSupportedGameVersions;支持以下游戏版本 +labelTrailerPartNameBody;车身 +labelTrailerPartNameCargo;货物 +labelTrailerPartNameChassis;底盘 +labelTrailerPartNameWheels;车轮 +labelTruckDetailsFuel;燃料 +labelTruckPartNameCabin;驾驶舱 +labelTruckPartNameChassis;底盘 +labelTruckPartNameEngine;发动机 +labelTruckPartNameTransmission;变速箱 +labelTruckPartNameWheels;车轮 +labelUserCompanyCompanyName;公司名称 +labelUserCompanyGarages;车库 +labelUserCompanyHQcity;总部城市 +labelUserCompanyMoneyAccount;游戏资金 +labelUserCompanyVisitedCities;已访问城市 +labelUserTrailerLicensePlate;车牌 +labelUserTruckLicensePlate;车牌 +Large;大型 +message_database_created;数据库结构已创建 +message_database_missing_creating_db;缺少数据库文件,正在创建数据库… +message_database_missing_creating_db_structure;缺少数据库文件,正在创建数据库结构… +message_decoding_save_file;正在解密存档… +message_exporting_database;正在导出数据库… +message_file_saved;文件已保存 +message_importing_database;正在导入数据库… +message_loading_save_file;正在加载存档… +message_no_matching_cities;没有符合过滤器条件的城市 +message_operation_finished;准备就绪 +message_preparing_data;正在准备数据… +message_saving_file;正在保存文件… +Miles;英里 +Not owned;未购买 +radioButtonProfileFolderType;档案目录 +radioButtonRootFolderType;配置文件根目录 +radioButtonSaveFolderType;存档目录 +radioButtonUnknownFolderType;未知目录类型 +Small;小型 +tabPageCargoMarket;货物市场 +tabPageCompany;公司 +tabPageConvoyTools;联运工具 +tabPageFreightMarket;货运市场 +tabPageProfile;档案 +tabPageTrailer;挂车 +tabPageTruck;卡车 +Tiny;微型 +toolStripMenuItemAbout;关于 +toolStripMenuItemCheckUpdates;检查更新 +toolStripMenuItemDownload;下载 +toolStripMenuItemExit;退出 +toolStripMenuItemHelp;帮助 +toolStripMenuItemLanguage;语言 +toolStripMenuItemLocalPDF;PDF 帮助文件 +toolStripMenuItemProgram;程序 +toolStripMenuItemProgramSettings;程序设置 +toolStripMenuItemSettings;设置 +toolStripMenuItemTutorial;使用教程 +toolStripMenuItemYouTubeVideo;YouTube 视频 +tooltipbuttonProfilesAndSavesRefreshAll;刷新 +currencyEUR;欧元 +currencyCHF;瑞士法郎 +currencyCZK;捷克克朗 +currencyGBP;英镑 +currencyPLN;波兰兹罗提 +currencyHUF;匈牙利福林特 +currencyDKK;丹麦克朗 +currencySEK;瑞典克朗 +currencyNOK;挪威克朗 +currencyRUB;俄罗斯卢布 +currencyUSD;美元 +currencyCAD;加拿大元 +currencyMXN;墨西哥比索 +unsupportedGameVersionTitle;不支持的{0}版本{1} +unsupportedGameVersionText;您当前安装的{0}版本目前不被此工具支持。\n\n已安装游戏版本:{1}\n\n当前支持的版本:{2} diff --git a/TS SE Tool/lang/zh-CN/urgency_translate.txt b/TS SE Tool/lang/zh-CN/urgency_translate.txt new file mode 100644 index 00000000..b432c548 --- /dev/null +++ b/TS SE Tool/lang/zh-CN/urgency_translate.txt @@ -0,0 +1,4 @@ +[zh-CN] +0;标准 +1;重要 +2;紧急 diff --git a/TS SE Tool/libs/Changelog.info b/TS SE Tool/libs/Changelog.info new file mode 100644 index 00000000..4581d82d --- /dev/null +++ b/TS SE Tool/libs/Changelog.info @@ -0,0 +1,466 @@ +Update | 0.3.11.0 + +Added Save blocks introduced with 1.49 update +Updated Info & Profile files handling +Updated Trucks & Trailers lists populating +Updated Integrity Displaying & Fixing for Trucks & Trailers with 1.49 system +Fixed Missing icon for Drag&Drop when Sharing colors + +//-------------------------// + +Update | 0.3.10.1 + +Added Preview and Album Copying when Cloning profiles +Added Translatable panels (Drawing Text) +Added Group Drag&Drop functionality for Color sharing +Added Buttons for mass selection of items in the lists of Garages, Drivers and Cities to visit +Fixed Error in Vehicle editor when pasting bad data + + +Update | 0.3.10.0 + +Added Drag&Drop functionality for Color sharing form +Added Help tooltip if [S]teamcloud profile selected +Updated Dialogs to be centered based on main window +Updated Icon for Backup restore option +Fixed Uninitialized Globals variables Error +Fixed Reverse order of ADR skills +Fixed Incorrect display if there is no items in Trucks Combobox +Fixed Error when Hiring Drivers +Fixed mail_ctrl Wrong variable format Error +And other improvements + + +Update | 0.3.9.1 + +Fixed police_offence_log_entry missing + + +Update | 0.3.9.0 + +Updated SII_Decrypt for 1.47 +Updated Save blocks for 1.47 +Updated Updater internals +Fixed bad window centering + + +Update | 0.3.8.1 +Cleanup & optimization + + +Update | 0.3.8.0 + +Added Drivers list on Company tab (Right click on a Driver to Hire, Fire or Edit) +Added Driver editor for AI drivers (Skills) +Updated UI images +Fixed Error when Checking for Player driver Existing in Sorting list + + +Update | 0.3.7.2 + +Fixed Restoring from backup function was not affecting Info file +Fixed Save Writing Error when Selected job was Special transport + + +Update | 0.3.7.1 + +Updated Garage manager. Changes can be Canceled +Updated Visuals for Trucks & Trailers dropdown lists. Sorting by type (Quick job, User owned, in Sorting list), Garage and Truck name +Fixed Trucks Removed from Garages was still exporting to Save file + + +Update | 0.3.7.0 + +Added Vehicle editor for Trucks +Updated Save blocks processing +Updated DDS Texture loader +Updated Truck & Trailer form visuals behavior +Updated Getting Spare nameless (Vehicle editor) +Fixed Database error due wrong Trailer variants list processing +Fixed Error while Repairing Double\Triple trailers +Cleanup & optimization + + +Update | 0.3.6.1 + +Updated Freight market Distance calculation & Better Cargo names in Cargo list +Updated DDS Texture loader +Fixed Updater checking for TS SET running state +Cleanup & optimization + + +Update | 0.3.6.0 + +Updated Database structure +Fixed Routes saving in Database +Fixed Font files availability check +Fixed Save items Data format errors + + +Update | 0.3.5.0 + +Added License plate Editor +Fixed Save items Data format errors + + +Update | 0.3.4.0 + +Updated Garages manager +Updated Company tab Account money editing and Manage button +Fixed Profile name trimming when Renaming or Cloning + + +Update | 0.3.3.1 + +Fixed Company tab Visited cities & Garages Get Country name Error + + +Update | 0.3.3.0 + +Added Ability to change Company name +Added Ability to change HQ +Added new Save blocks +Updated Company tab Visuals for Visited cities & Garages +Fixed Error when Creating new Database + + +Update | 0.3.2.0 + +Added Restore save from backup button +Added Unload save button +Updated Switch Trucks function +Updated DDS Image loader +Updated Save file write procedure +Fixed Save items Data format errors + + +Update | 0.3.1.0 + +Updated Path search for Freight market +Updated Trailer tab functions +Updated SCS Float output format +Updated Text render in comboboxes on Freight market tab +Fixed Saving & Applying Settings + + +Update | 0.3.0.0 + +Finished Save & Load systems to work with the new save-blocks system + + +Update | 0.2.7.5 + +Fixed Save items Data format errors +Fixed Error if Truck or Trailer accessory missing + + +Update | 0.2.7.4 + +Updated Dropdown save list if Save has an Empty save name +Updated GPS Read & Write +Updated Program settings Splash screen auto-update check interval + + +Update | 0.2.7.3 + +Updated Trucks functionality for 1.43 +Updated Trailers functionality for 1.43 +Fixed Database version check +Restricted old saves loading (prior 1.43) + + +Update | 0.2.7.2 + +Fixed Float numbers handling + + +Update | 0.2.7.1 + +Rework for 1.43 update +Updated Supported versions (only 61) +Updated Settings menu +Fixed DB version check +Restricted Steam cloud saves load + + +Update | 0.2.7.0 + +Updated Links for Updater + + +Update | 0.2.6.8 + +Updated Profile data Processing +Updated save Info data Processing + + +Update | 0.2.6.7 + +Validated for 1.42 (version 56) +Updated SII_Decrypt library with 1.42 support + + +Update | 0.2.6.6 + +Updated Profile data Processing +Updated save Info data Processing +Fixed Profile Cloning +Fixed CC Import Empty clipboard Error + + +Update | 0.2.6.5 + +Updated Acoount money editing +Fixed Negative money error +Fixed Hex <-> Decimal conversion + + +Update | 0.2.6.4 + +Fixed Links detection for Slave trailers +Fixed Repair buttons Visual bug after Switching save + + +Update | 0.2.6.3 + +Validated for 1.41 (version 55) +Updated Profile data file Output +Updated Info file Output +Updated Truck & Trailer parts discovery + + +Update | 0.2.6.2 + +Fixed Database details update +Fixed Form splash + + +Update | 0.2.6.1 + +Updated Profile & Save selection +Fixed version check + + +Update | 0.2.6.0 + +Updated Update search mechanism +Updated crash messages Added Dev mail +Updated About form +Updated translation mechanism +Added Export & Import settings form +Fixed Database (truncate error) +Fixed hex to string decode error + + +Update | 0.2.5.4 + +Validated for 53 version +Fixed various errors + + +Update | 0.2.5.3 + +Validated for 51 version +Fixed error log writer + + +Update | 0.2.5.2 + +Updated UI on Truck and Trailer tabs +Added Indication for Vehicles in use +Fixed error if Trailer misses parts + + +Update | 0.2.5.1 + +Fixed Steam cloud saves discovery + + +Update | 0.2.5.0 + +Added logging for OS detection and Profiles discovery errors +Added license plate rendering +Updated UI on Truck and Trailer tabs +Updated UI in Profile editor (Rename and Cloning) +Fixed Profile editor errors + + +Update | 0.2.4.2 + +Fixed DB bugs + + +Update | 0.2.4.1 + +Updated translation +Fixed bugs + + +Update | 0.2.4.0 + +Added startup logging +Updated User colors handling +Updated translation system +Fixed bugs + + +Update | 0.2.3.2 + +Added option to load and edit unverified versions +Updated Truck & Trailer tabs UI +Cleanup & optimization + + +Update | 0.2.3.0 + +Added Profile manager (Rename & Clone) +Updated UI +Cleanup & optimization + + +Update | 0.2.2.10 + +Curency setting now separated (ETS2/ATS) +Updated SII_Decrypt.dll for 1.37 +Updated visuals +Cleanup & optimization + + +Update | 0.2.2.9 + +Fixed bugs +General cleanup + + +Update | 0.2.2.8 + +Updated UI +Validated for 45 version +Fixed bugs + + +Update | 0.2.2.7 + +Updated UI +Updated translation +Fixed bugs + + +Update | 0.2.2.6 + +Added Program settings +Added Version checker +Added Updater +Added Error handler +Updated Color picker +Updated translation +Fixed bugs in FM and CM tab + + +Update | 0.2.2.4 + +.NET Framework 4.7.2 +Updated UI +Updated translation +Updated translation system +Minor bug fixes and updates + + +Update | 0.2.2.2 + +Updated UI +Updated translation +Minor bug fixes and clenup + + +Update | 0.2.2 + +Added ability to Share Convoy Control spots +Updated UI +Fixed FM cargo availability time +Minor bug fixes + + +Update | 0.2.1 + +SII_Decrypt changed from exe to dll to work with files in memory and minimize disk access +Added ability to Add Custom paths +Added ability to Edit Freight market jobs +Added ability to Sell garages +Added Garage manager menu to sort Drivers and Trucks +Added support for latest ATS savefile version +Created HowTo PDF and Video +Numerous bug fixes + + +Update | 0.2.0.3 + +Updated UI (720p compatibility) +Improved Profiles and Saves search + + +Update | 0.2.0.2 + +Added 1.35 OB (need testing) +Fixed DB error +Fixed localization errors +Updated UI + + +Update | 0.2.0.1 + +Fixed DB error +Fixed localization errors + + +Update | 0.2.0 + +Fixed various errors +Separeted DBs files (by Game and Profile) +Reworked part of UI +Added localization strings + + +Update | 0.1.5 + +Fixed GPS related errors resulting in not loading save file +Fixed GPS route sharing (now you don't need existing path in save file) +Fixed distances mesuring units not loading on startup +Added prompt on game type changing +Added basic Trailer edit +Added ability to search for QJ and FM Trucks and Trailers + + +Update | 0.1.4.1 + +Fixed game change button bug +Small UI fixes + + +Update | 0.1.4 + +Fixed long database operations on save file load (auto fix) +Added ability to translate rest of UI (Cities, Countries) +Added game files cache (Cargo) + + +Update | 0.1.3.1 + +Fixed error with getting data for sharing GPS +Enabled ability to Buy and\or Upgrade Garages + + +Update | 0.1.3 + +Added User paint Sharing +Added GPS Sharing options (Truck position, GPS route) (testing needed) +Added Basic Cargo Market Tools +Redone translation structure + + +Update | 0.1.2 + +Added searching for Steam cloud Save files +Fixed crash on loading non existing Company Logos +Fixed crash on saving (visited cities beed not prepared correctly) +Fixed empty lines for cities and companies \ No newline at end of file diff --git a/TS SE Tool/libs/ErikEJ.SqlCe40.dll b/TS SE Tool/libs/ErikEJ.SqlCe40.dll new file mode 100644 index 00000000..d5edeac4 Binary files /dev/null and b/TS SE Tool/libs/ErikEJ.SqlCe40.dll differ diff --git a/TS SE Tool/libs/ErikEJ.SqlCe40.xml b/TS SE Tool/libs/ErikEJ.SqlCe40.xml new file mode 100644 index 00000000..9051bf19 --- /dev/null +++ b/TS SE Tool/libs/ErikEJ.SqlCe40.xml @@ -0,0 +1,354 @@ + + + + ErikEJ.SqlCe40 + + + + + Interface used by the adapters so we are able to remove the duplicate code. + + + + + The name of the field at the ordinal + + + + + + + Get by the column Id (replacement for this[int i] + + + + + + + Move to the next row + + + + + + Skip the current row + + + + + + Lets you efficiently bulk load a SQL Server Compact table with data from another source. + + + + + Initializes a new instance of the SqlCeBulkCopy class using the specified open instance of SqlCeConnection. + + + + + + Initializes a new instance of the SqlCeBulkCopy class using the specified open instance of SqlCeConnection and the specified active SqlCeTransaction. + + + + + + + Creates a new instance of the SqlCeBulkCopy class, using the specified connection and options + + + + + + + Initializes a new instance of the SqlCeBulkCopy class, using the specified connection, transaction and options. + + + + + + + + Initializes a new instance of the SqlCeBulkCopy class using the specified connection string. + + + + + + Initializes a new instance of the SqlCeBulkCopy class, using the specified connection string and options + + + + + + + Name of the destination table in the SQL Server Compact database. + + + + + Returns a collection of SqlCeBulkCopyColumnMapping items. Column mappings define the relationships between columns in the data source and columns in the destination. + + + + + The integer value of the BatchSize property, or zero if no value has been set. + In this implementation not used. + + + + + The integer value of the BulkCopyTimeout property. + In this implementation not used. + + + + + Defines the number of rows to be processed before generating a notification event. + + + + + Occurs every time that the number of rows specified by the NotifyAfter property have been processed. + + + + + Closes the SqlCeBulkCopy instance. + + + + + Copies all rows in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlCeBulkCopy object. + + + + + + Copies only rows that match the supplied row state in the supplied DataTable to a destination table specified by the DestinationTableName property of the SqlCeBulkCopy object. + + + + + + + Copies all rows in the supplied IDataReader to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. + + + + + + Copies all rows in the supplied IEnumerable<> to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. + + IEnumerable<>. For IEnumerable use other constructor and specify type. + + + + Copies all rows in the supplied IEnumerable to a destination table specified by the DestinationTableName property of the SqlBulkCopy object. + Use other constructor for IEnumerable<> + + + + + + + Release resources owned by this instance + + + + + + Release resources owned by this instance + + + + + Release resources owned by this instance + + + + + Defines the mapping between a column in a SqlCeBulkCopy instance's data source and a column in the instance's destination table. + + + + + Default constructor that initializes a new SqlCeBulkCopyColumnMapping object. + + + + + Creates a new column mapping, using column ordinals to refer to source and destination columns. + + + + + + + Creates a new column mapping, using a column ordinal to refer to the source column and a column name for the target column. + + + + + + + Creates a new column mapping, using a column name to refer to the source column and a column ordinal for the target column. + + + + + + + Creates a new column mapping, using column names to refer to source and destination columns. + + + + + + + Name of the column being mapped in the destination database table. + + + + + Ordinal value of the destination column within the destination table. + + + + + Name of the column being mapped in the data source. + + + + + The ordinal position of the source column within the data source. + + + + + Collection of SqlCeBulkCopyColumnMapping objects + + + + + Add a new ColumnMapping + + + + + + + Add a new ColumnMapping + + + + + + + Add a new ColumnMapping + + + + + + + Add a new ColumnMapping + + + + + + + Bitwise flag that specifies one or more options to use with an instance of SqlCeBulkCopy. + This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values. + + + + + No options enabled + + + + + Preserve source identity values. When not specified, identity values are assigned by the destination. + This is implemented by using 'SET IDENTITY_INSERT [table] ON' when enabled + NOTICE: If you use a SqlCeTransaction in the class constructor, re-seeding of the target table will not take place. + You can re-seed manually by running Compact on the database, or executing: + ALTER TABLE [MyTable] ALTER COLUMN [MyIdentityCol] IDENTITY (9999,1); + (where 9999 is the value after the highest value in use) + + + + + Removes foreign key constraints while data is being inserted. Will reapply the constraints once insert process is completed. + + + + + Preserve null values in the destination table regardless of the settings for default values. When not specified, null values are replaced by default values where applicable. + + + + + Helpers for queries against sql ce for things like schema and auto id columns + + + + + Represents the set of arguments passed to the SqlCeRowsCopiedEventHandler. + + + + + Represents the set of arguments passed to the SqlCeRowsCopiedEventHandler. + + + + + + Gets a value that returns the number of rows copied during the current bulk copy operation. + + + + + Gets or sets a value that indicates whether the bulk copy operation should be aborted. + + + + + Initializes a new instance of the class. + + The connection string. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Gets all table names. + + + + + + Gets all foreign keys. + + + + + + Class for generating scripts + Use the GeneratedScript property to get the resulting script + + + + + Gets the generated script. + + The generated script. + + + diff --git a/TS SE Tool/libs/FuzzySharp.dll b/TS SE Tool/libs/FuzzySharp.dll new file mode 100644 index 00000000..f50ebb55 Binary files /dev/null and b/TS SE Tool/libs/FuzzySharp.dll differ diff --git a/TS SE Tool/libs/HowTo.pdf b/TS SE Tool/libs/HowTo.pdf new file mode 100644 index 00000000..9ba3baa1 Binary files /dev/null and b/TS SE Tool/libs/HowTo.pdf differ diff --git a/TS SE Tool/libs/ICSharpCode.SharpZipLib.dll b/TS SE Tool/libs/ICSharpCode.SharpZipLib.dll new file mode 100644 index 00000000..1048fcd2 Binary files /dev/null and b/TS SE Tool/libs/ICSharpCode.SharpZipLib.dll differ diff --git a/TS SE Tool/libs/ICSharpCode.SharpZipLib.xml b/TS SE Tool/libs/ICSharpCode.SharpZipLib.xml new file mode 100644 index 00000000..807c2fb1 --- /dev/null +++ b/TS SE Tool/libs/ICSharpCode.SharpZipLib.xml @@ -0,0 +1,11330 @@ + + + + ICSharpCode.SharpZipLib + + + + + An example class to demonstrate compression and decompression of BZip2 streams. + + + + + Decompress the input writing + uncompressed data to the output stream + + The readable stream containing data to decompress. + The output stream to receive the decompressed data. + Both streams are closed on completion if true. + + + + Compress the input stream sending + result data to output stream + + The readable stream to compress. + The output stream to receive the compressed data. + Both streams are closed on completion if true. + Block size acts as compression level (1 to 9) with 1 giving + the lowest compression and 9 the highest. + + + + Defines internal values for both compression and decompression + + + + + Random numbers used to randomise repetitive blocks + + + + + When multiplied by compression parameter (1-9) gives the block size for compression + 9 gives the best compression but uses the most memory. + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + Backend constant + + + + + BZip2Exception represents exceptions specific to BZip2 classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the BZip2Exception class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + An input stream that decompresses files in the BZip2 format + + + + + Construct instance for reading from stream + + Data source + + + + Get/set flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + + + + Gets a value indicating if the stream supports reading + + + + + Gets a value indicating whether the current stream supports seeking. + + + + + Gets a value indicating whether the current stream supports writing. + This property always returns false + + + + + Gets the length in bytes of the stream. + + + + + Gets the current position of the stream. + Setting the position is not supported and will throw a NotSupportException. + + Any attempt to set the position. + + + + Flushes the stream. + + + + + Set the streams position. This operation is not supported and will throw a NotSupportedException + + A byte offset relative to the parameter. + A value of type indicating the reference point used to obtain the new position. + The new position of the stream. + Any access + + + + Sets the length of this stream to the given value. + This operation is not supported and will throw a NotSupportedExceptionortedException + + The new length for the stream. + Any access + + + + Writes a block of bytes to this stream using data from a buffer. + This operation is not supported and will throw a NotSupportedException + + The buffer to source data from. + The offset to start obtaining data from. + The number of bytes of data to write. + Any access + + + + Writes a byte to the current position in the file stream. + This operation is not supported and will throw a NotSupportedException + + The value to write. + Any access + + + + Read a sequence of bytes and advances the read position by one byte. + + Array of bytes to store values in + Offset in array to begin storing data + The maximum number of bytes to read + The total number of bytes read into the buffer. This might be less + than the number of bytes requested if that number of bytes are not + currently available or zero if the end of the stream is reached. + + + + + Closes the stream, releasing any associated resources. + + + + + Read a byte from stream advancing position + + byte read or -1 on end of stream + + + + An output stream that compresses into the BZip2 format + including file header chars into another stream. + + + + + Construct a default output stream with maximum block size + + The stream to write BZip data onto. + + + + Initialise a new instance of the + for the specified stream, using the given blocksize. + + The stream to write compressed data to. + The block size to use. + + Valid block sizes are in the range 1..9, with 1 giving + the lowest compression and 9 the highest. + + + + + Ensures that resources are freed and other cleanup operations + are performed when the garbage collector reclaims the BZip2OutputStream. + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value indicating whether the current stream supports seeking + + + + + Gets a value indicating whether the current stream supports writing + + + + + Gets the length in bytes of the stream + + + + + Gets or sets the current position of this stream. + + + + + Sets the current position of this stream to the given value. + + The point relative to the offset from which to being seeking. + The reference point from which to begin seeking. + The new position in the stream. + + + + Sets the length of this stream to the given value. + + The new stream length. + + + + Read a byte from the stream advancing the position. + + The byte read cast to an int; -1 if end of stream. + + + + Read a block of bytes + + The buffer to read into. + The offset in the buffer to start storing data at. + The maximum number of bytes to read. + The total number of bytes read. This might be less than the number of bytes + requested if that number of bytes are not currently available, or zero + if the end of the stream is reached. + + + + Write a block of bytes to the stream + + The buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + + + + Write a byte to the stream. + + The byte to write to the stream. + + + + Get the number of bytes written to output. + + + + + Get the number of bytes written to the output. + + + + + Releases the unmanaged resources used by the and optionally releases the managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Flush output buffers + + + + + Computes Adler32 checksum for a stream of data. An Adler32 + checksum is not as reliable as a CRC32 checksum, but a lot faster to + compute. + + The specification for Adler32 may be found in RFC 1950. + ZLIB Compressed Data Format Specification version 3.3) + + + From that document: + + "ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order." + + "8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 - + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.)" + + + + + + + largest prime smaller than 65536 + + + + + The CRC data checksum so far. + + + + + Initialise a default instance of + + + + + Resets the Adler32 data checksum as if no update was ever called. + + + + + Returns the Adler32 data checksum computed so far. + + + + + Updates the checksum with the byte b. + + + The data value to add. The high byte of the int is ignored. + + + + + Updates the Adler32 data checksum with the bytes taken from + a block of data. + + Contains the data to update the checksum with. + + + + Update Adler32 data checksum based on a portion of a block of data + + + The chunk of data to add + + + + + CRC-32 with unreversed data and reversed output + + + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + This implementation uses sixteen lookup tables stored in one linear array + to implement the slicing-by-16 algorithm, a variant of the slicing-by-8 + algorithm described in this Intel white paper: + + https://web.archive.org/web/20120722193753/http://download.intel.com/technology/comms/perfnet/download/slicing-by-8.pdf + + The first lookup table is simply the CRC of all possible eight bit values. + Each successive lookup table is derived from the original table generated + by Sarwate's algorithm. Slicing a 16-bit input and XORing the outputs + together will produce the same output as a byte-by-byte CRC loop with + fewer arithmetic and bit manipulation operations, at the cost of increased + memory consumed by the lookup tables. (Slicing-by-16 requires a 16KB table, + which is still small enough to fit in most processors' L1 cache.) + + + + + The CRC data checksum so far. + + + + + Initialise a default instance of + + + + + Resets the CRC data checksum as if no update was ever called. + + + + + Returns the CRC data checksum computed so far. + + Reversed Out = true + + + + Updates the checksum with the int bval. + + + the byte is taken as the lower 8 bits of bval + + Reversed Data = false + + + + Updates the CRC data checksum with the bytes taken from + a block of data. + + Contains the data to update the CRC with. + + + + Update CRC data checksum based on a portion of a block of data + + + The chunk of data to add + + + + + Internal helper function for updating a block of data using slicing. + + The array containing the data to add + Range start for (inclusive) + The number of bytes to checksum starting from + + + + A non-inlined function for updating data that doesn't fit in a 16-byte + block. We don't expect to enter this function most of the time, and when + we do we're not here for long, so disabling inlining here improves + performance overall. + + The array containing the data to add + Range start for (inclusive) + Range end for (exclusive) + + + + CRC-32 with reversed data and unreversed output + + + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + This implementation uses sixteen lookup tables stored in one linear array + to implement the slicing-by-16 algorithm, a variant of the slicing-by-8 + algorithm described in this Intel white paper: + + https://web.archive.org/web/20120722193753/http://download.intel.com/technology/comms/perfnet/download/slicing-by-8.pdf + + The first lookup table is simply the CRC of all possible eight bit values. + Each successive lookup table is derived from the original table generated + by Sarwate's algorithm. Slicing a 16-bit input and XORing the outputs + together will produce the same output as a byte-by-byte CRC loop with + fewer arithmetic and bit manipulation operations, at the cost of increased + memory consumed by the lookup tables. (Slicing-by-16 requires a 16KB table, + which is still small enough to fit in most processors' L1 cache.) + + + + + The CRC data checksum so far. + + + + + Initialise a default instance of + + + + + Resets the CRC data checksum as if no update was ever called. + + + + + Returns the CRC data checksum computed so far. + + Reversed Out = false + + + + Updates the checksum with the int bval. + + + the byte is taken as the lower 8 bits of bval + + Reversed Data = true + + + + Updates the CRC data checksum with the bytes taken from + a block of data. + + Contains the data to update the CRC with. + + + + Update CRC data checksum based on a portion of a block of data + + + The chunk of data to add + + + + + Internal helper function for updating a block of data using slicing. + + The array containing the data to add + Range start for (inclusive) + The number of bytes to checksum starting from + + + + A non-inlined function for updating data that doesn't fit in a 16-byte + block. We don't expect to enter this function most of the time, and when + we do we're not here for long, so disabling inlining here improves + performance overall. + + The array containing the data to add + Range start for (inclusive) + Range end for (exclusive) + + + + The number of slicing lookup tables to generate. + + + + + Generates multiple CRC lookup tables for a given polynomial, stored + in a linear array of uints. The first block (i.e. the first 256 + elements) is the same as the byte-by-byte CRC lookup table. + + The generating CRC polynomial + Whether the polynomial is in reversed bit order + A linear array of 256 * elements + + This table could also be generated as a rectangular array, but the + JIT compiler generates slower code than if we use a linear array. + Known issue, see: https://github.com/dotnet/runtime/issues/30275 + + + + + Mixes the first four bytes of input with + using normal ordering before calling . + + Array of data to checksum + Offset to start reading from + The table to use for slicing-by-16 lookup + Checksum state before this update call + A new unfinalized checksum value + + + Assumes input[offset]..input[offset + 15] are valid array indexes. + For performance reasons, this must be checked by the caller. + + + + + Mixes the first four bytes of input with + using reflected ordering before calling . + + Array of data to checksum + Offset to start reading from + The table to use for slicing-by-16 lookup + Checksum state before this update call + A new unfinalized checksum value + + + Assumes input[offset]..input[offset + 15] are valid array indexes. + For performance reasons, this must be checked by the caller. + + + + + A shared method for updating an unfinalized CRC checksum using slicing-by-16. + + Array of data to checksum + Offset to start reading from + The table to use for slicing-by-16 lookup + First byte of input after mixing with the old CRC + Second byte of input after mixing with the old CRC + Third byte of input after mixing with the old CRC + Fourth byte of input after mixing with the old CRC + A new unfinalized checksum value + + + Even though the first four bytes of input are fed in as arguments, + should be the same value passed to this + function's caller (either or + ). This method will get inlined + into both functions, so using the same offset produces faster code. + + + Because most processors running C# have some kind of instruction-level + parallelism, the order of XOR operations can affect performance. This + ordering assumes that the assembly code generated by the just-in-time + compiler will emit a bunch of arithmetic operations for checking array + bounds. Then it opportunistically XORs a1 and a2 to keep the processor + busy while those other parts of the pipeline handle the range check + calculations. + + + + + + Interface to compute a data checksum used by checked input/output streams. + A data checksum can be updated by one byte or with a byte array. After each + update the value of the current checksum can be returned by calling + getValue. The complete checksum object can also be reset + so it can be used again with new data. + + + + + Resets the data checksum as if no update was ever called. + + + + + Returns the data checksum computed so far. + + + + + Adds one byte to the data checksum. + + + the data value to add. The high byte of the int is ignored. + + + + + Updates the data checksum with the bytes taken from the array. + + + buffer an array of bytes + + + + + Adds the byte array to the data checksum. + + + The chunk of data to add + + + + Read an unsigned short in little endian byte order. + + + Read an int in little endian byte order. + + + Read a long in little endian byte order. + + + Write an unsigned short in little endian byte order. + + + + + + Write a ushort in little endian byte order. + + + + + + Write an int in little endian byte order. + + + + + + Write a uint in little endian byte order. + + + + + + Write a long in little endian byte order. + + + + + + Write a ulong in little endian byte order. + + + + + + + A MemoryPool that will return a Memory which is exactly the length asked for using the bufferSize parameter. + This is in contrast to the default ArrayMemoryPool which will return a Memory of equal size to the underlying + array which at least as long as the minBufferSize parameter. + Note: The underlying array may be larger than the slice of Memory + + + + + + Event arguments for scanning. + + + + + Initialise a new instance of + + The file or directory name. + + + + The file or directory name for this event. + + + + + Get set a value indicating if scanning should continue or not. + + + + + Event arguments during processing of a single file or directory. + + + + + Initialise a new instance of + + The file or directory name if known. + The number of bytes processed so far + The total number of bytes to process, 0 if not known + + + + The name for this event if known. + + + + + Get set a value indicating whether scanning should continue or not. + + + + + Get a percentage representing how much of the has been processed + + 0.0 to 100.0 percent; 0 if target is not known. + + + + The number of bytes processed so far + + + + + The number of bytes to process. + + Target may be 0 or negative if the value isnt known. + + + + Event arguments for directories. + + + + + Initialize an instance of . + + The name for this directory. + Flag value indicating if any matching files are contained in this directory. + + + + Get a value indicating if the directory contains any matching files or not. + + + + + Arguments passed when scan failures are detected. + + + + + Initialise a new instance of + + The name to apply. + The exception to use. + + + + The applicable name. + + + + + The applicable exception. + + + + + Get / set a value indicating whether scanning should continue. + + + + + Delegate invoked before starting to process a file. + + The source of the event + The event arguments. + + + + Delegate invoked during processing of a file or directory + + The source of the event + The event arguments. + + + + Delegate invoked when a file has been completely processed. + + The source of the event + The event arguments. + + + + Delegate invoked when a directory failure is detected. + + The source of the event + The event arguments. + + + + Delegate invoked when a file failure is detected. + + The source of the event + The event arguments. + + + + FileSystemScanner provides facilities scanning of files and directories. + + + + + Initialise a new instance of + + The file filter to apply when scanning. + + + + Initialise a new instance of + + The file filter to apply. + The directory filter to apply. + + + + Initialise a new instance of + + The file filter to apply. + + + + Initialise a new instance of + + The file filter to apply. + The directory filter to apply. + + + + Delegate to invoke when a directory is processed. + + + + + Delegate to invoke when a file is processed. + + + + + Delegate to invoke when processing for a file has finished. + + + + + Delegate to invoke when a directory failure is detected. + + + + + Delegate to invoke when a file failure is detected. + + + + + Raise the DirectoryFailure event. + + The directory name. + The exception detected. + + + + Raise the FileFailure event. + + The file name. + The exception detected. + + + + Raise the ProcessFile event. + + The file name. + + + + Raise the complete file event + + The file name + + + + Raise the ProcessDirectory event. + + The directory name. + Flag indicating if the directory has matching files. + + + + Scan a directory. + + The base directory to scan. + True to recurse subdirectories, false to scan a single directory. + + + + The file filter currently in use. + + + + + The directory filter currently in use. + + + + + Flag indicating if scanning should continue running. + + + + + INameTransform defines how file system names are transformed for use with archives, or vice versa. + + + + + Given a file name determine the transformed value. + + The name to transform. + The transformed file name. + + + + Given a directory name determine the transformed value. + + The name to transform. + The transformed directory name + + + + InvalidNameException is thrown for invalid names such as directory traversal paths and names with invalid characters + + + + + Initializes a new instance of the InvalidNameException class with a default error message. + + + + + Initializes a new instance of the InvalidNameException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the InvalidNameException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the InvalidNameException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Scanning filters support filtering of names. + + + + + Test a name to see if it 'matches' the filter. + + The name to test. + Returns true if the name matches the filter, false if it does not match. + + + + NameFilter is a string matching class which allows for both positive and negative + matching. + A filter is a sequence of independant regular expressions separated by semi-colons ';'. + To include a semi-colon it may be quoted as in \;. Each expression can be prefixed by a plus '+' sign or + a minus '-' sign to denote the expression is intended to include or exclude names. + If neither a plus or minus sign is found include is the default. + A given name is tested for inclusion before checking exclusions. Only names matching an include spec + and not matching an exclude spec are deemed to match the filter. + An empty filter matches any name. + + The following expression includes all name ending in '.dat' with the exception of 'dummy.dat' + "+\.dat$;-^dummy\.dat$" + + + + + Construct an instance based on the filter expression passed + + The filter expression. + + + + Test a string to see if it is a valid regular expression. + + The expression to test. + True if expression is a valid false otherwise. + + + + Test an expression to see if it is valid as a filter. + + The filter expression to test. + True if the expression is valid, false otherwise. + + + + Split a string into its component pieces + + The original string + Returns an array of values containing the individual filter elements. + + + + Convert this filter to its string equivalent. + + The string equivalent for this filter. + + + + Test a value to see if it is included by the filter. + + The value to test. + True if the value is included, false otherwise. + + + + Test a value to see if it is excluded by the filter. + + The value to test. + True if the value is excluded, false otherwise. + + + + Test a value to see if it matches the filter. + + The value to test. + True if the value matches, false otherwise. + + + + Compile this filter. + + + + + PathFilter filters directories and files using a form of regular expressions + by full path name. + See NameFilter for more detail on filtering. + + + + + Initialise a new instance of . + + The filter expression to apply. + + + + Test a name to see if it matches the filter. + + The name to test. + True if the name matches, false otherwise. + is used to get the full path before matching. + + + + ExtendedPathFilter filters based on name, file size, and the last write time of the file. + + Provides an example of how to customise filtering. + + + + Initialise a new instance of ExtendedPathFilter. + + The filter to apply. + The minimum file size to include. + The maximum file size to include. + + + + Initialise a new instance of ExtendedPathFilter. + + The filter to apply. + The minimum to include. + The maximum to include. + + + + Initialise a new instance of ExtendedPathFilter. + + The filter to apply. + The minimum file size to include. + The maximum file size to include. + The minimum to include. + The maximum to include. + + + + Test a filename to see if it matches the filter. + + The filename to test. + True if the filter matches, false otherwise. + The doesnt exist + + + + Get/set the minimum size/length for a file that will match this filter. + + The default value is zero. + value is less than zero; greater than + + + + Get/set the maximum size/length for a file that will match this filter. + + The default value is + value is less than zero or less than + + + + Get/set the minimum value that will match for this filter. + + Files with a LastWrite time less than this value are excluded by the filter. + + + + Get/set the maximum value that will match for this filter. + + Files with a LastWrite time greater than this value are excluded by the filter. + + + + NameAndSizeFilter filters based on name and file size. + + A sample showing how filters might be extended. + + + + Initialise a new instance of NameAndSizeFilter. + + The filter to apply. + The minimum file size to include. + The maximum file size to include. + + + + Test a filename to see if it matches the filter. + + The filename to test. + True if the filter matches, false otherwise. + + + + Get/set the minimum size for a file that will match this filter. + + + + + Get/set the maximum size for a file that will match this filter. + + + + + PathUtils provides simple utilities for handling paths. + + + + + Remove any path root present in the path + + A containing path information. + The path with the root removed if it was present; path otherwise. + + + + Returns a random file name in the users temporary directory, or in directory of if specified + + If specified, used as the base file name for the temporary file + Returns a temporary file name + + + + Provides simple " utilities. + + + + + Read from a ensuring all the required data is read. + + The stream to read. + The buffer to fill. + + + + + Read from a " ensuring all the required data is read. + + The stream to read data from. + The buffer to store data in. + The offset at which to begin storing data. + The number of bytes of data to store. + Required parameter is null + and or are invalid. + End of stream is encountered before all the data has been read. + + + + Read as much data as possible from a ", up to the requested number of bytes + + The stream to read data from. + The buffer to store data in. + The offset at which to begin storing data. + The number of bytes of data to store. + Required parameter is null + and or are invalid. + + + + Copy the contents of one to another. + + The stream to source data from. + The stream to write data to. + The buffer to use during copying. + + + + Copy the contents of one to another. + + The stream to source data from. + The stream to write data to. + The buffer to use during copying. + The progress handler delegate to use. + The minimum between progress updates. + The source for this event. + The name to use with the event. + This form is specialised for use within #Zip to support events during archive operations. + + + + Copy the contents of one to another. + + The stream to source data from. + The stream to write data to. + The buffer to use during copying. + The progress handler delegate to use. + The minimum between progress updates. + The source for this event. + The name to use with the event. + A predetermined fixed target value to use with progress updates. + If the value is negative the target is calculated by looking at the stream. + This form is specialised for use within #Zip to support events during archive operations. + + + + SharpZipBaseException is the base exception class for SharpZipLib. + All library exceptions are derived from this. + + NOTE: Not all exceptions thrown will be derived from this class. + A variety of other exceptions are possible for example + + + + Initializes a new instance of the SharpZipBaseException class. + + + + + Initializes a new instance of the SharpZipBaseException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the SharpZipBaseException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the SharpZipBaseException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that an error occurred during decoding of a input stream due to corrupt + data or (unintentional) library incompatibility. + + + + + Initializes a new instance of the StreamDecodingException with a generic message + + + + + Initializes a new instance of the StreamDecodingException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the StreamDecodingException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the StreamDecodingException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that the input stream could not decoded due to known library incompability or missing features + + + + + Initializes a new instance of the StreamUnsupportedException with a generic message + + + + + Initializes a new instance of the StreamUnsupportedException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the StreamUnsupportedException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the StreamUnsupportedException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that the input stream could not decoded due to the stream ending before enough data had been provided + + + + + Initializes a new instance of the UnexpectedEndOfStreamException with a generic message + + + + + Initializes a new instance of the UnexpectedEndOfStreamException class with a specified error message. + + A message describing the exception. + + + + Initializes a new instance of the UnexpectedEndOfStreamException class with a specified + error message and a reference to the inner exception that is the cause of this exception. + + A message describing the exception. + The inner exception + + + + Initializes a new instance of the UnexpectedEndOfStreamException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Indicates that a value was outside of the expected range when decoding an input stream + + + + + Initializes a new instance of the ValueOutOfRangeException class naming the causing variable + + Name of the variable, use: nameof() + + + + Initializes a new instance of the ValueOutOfRangeException class naming the causing variable, + it's current value and expected range. + + Name of the variable, use: nameof() + The invalid value + Expected maximum value + Expected minimum value + + + + Initializes a new instance of the ValueOutOfRangeException class naming the causing variable, + it's current value and expected range. + + Name of the variable, use: nameof() + The invalid value + Expected maximum value + Expected minimum value + + + + Initializes a new instance of the ValueOutOfRangeException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives. + While it has been superseded by more recent and more powerful algorithms, its still in use and + is viable for preventing casual snooping + + + + + Generates new encryption keys based on given seed + + The seed value to initialise keys with. + A new key value. + + + + PkzipClassicCryptoBase provides the low level facilities for encryption + and decryption using the PkzipClassic algorithm. + + + + + Transform a single byte + + + The transformed value + + + + + Set the key schedule for encryption/decryption. + + The data use to set the keys from. + + + + Update encryption keys + + + + + Reset the internal state. + + + + + PkzipClassic CryptoTransform for encryption. + + + + + Initialise a new instance of + + The key block to use. + + + + Transforms the specified region of the specified byte array. + + The input for which to compute the transform. + The offset into the byte array from which to begin using data. + The number of bytes in the byte array to use as data. + The computed transform. + + + + Transforms the specified region of the input byte array and copies + the resulting transform to the specified region of the output byte array. + + The input for which to compute the transform. + The offset into the input byte array from which to begin using data. + The number of bytes in the input byte array to use as data. + The output to which to write the transform. + The offset into the output byte array from which to begin writing data. + The number of bytes written. + + + + Gets a value indicating whether the current transform can be reused. + + + + + Gets the size of the input data blocks in bytes. + + + + + Gets the size of the output data blocks in bytes. + + + + + Gets a value indicating whether multiple blocks can be transformed. + + + + + Cleanup internal state. + + + + + PkzipClassic CryptoTransform for decryption. + + + + + Initialise a new instance of . + + The key block to decrypt with. + + + + Transforms the specified region of the specified byte array. + + The input for which to compute the transform. + The offset into the byte array from which to begin using data. + The number of bytes in the byte array to use as data. + The computed transform. + + + + Transforms the specified region of the input byte array and copies + the resulting transform to the specified region of the output byte array. + + The input for which to compute the transform. + The offset into the input byte array from which to begin using data. + The number of bytes in the input byte array to use as data. + The output to which to write the transform. + The offset into the output byte array from which to begin writing data. + The number of bytes written. + + + + Gets a value indicating whether the current transform can be reused. + + + + + Gets the size of the input data blocks in bytes. + + + + + Gets the size of the output data blocks in bytes. + + + + + Gets a value indicating whether multiple blocks can be transformed. + + + + + Cleanup internal state. + + + + + Defines a wrapper object to access the Pkzip algorithm. + This class cannot be inherited. + + + + + Get / set the applicable block size in bits. + + The only valid block size is 8. + + + + Get an array of legal key sizes. + + + + + Generate an initial vector. + + + + + Get an array of legal block sizes. + + + + + Get / set the key value applicable. + + + + + Generate a new random key. + + + + + Create an encryptor. + + The key to use for this encryptor. + Initialisation vector for the new encryptor. + Returns a new PkzipClassic encryptor + + + + Create a decryptor. + + Keys to use for this new decryptor. + Initialisation vector for the new decryptor. + Returns a new decryptor. + + + + Encrypts and decrypts AES ZIP + + + Based on information from http://www.winzip.com/aes_info.htm + and http://www.gladman.me.uk/cryptography_technology/fileencrypt/ + + + + + Constructor + + The stream on which to perform the cryptographic transformation. + Instance of ZipAESTransform + Read or Write + + + + Reads a sequence of bytes from the current CryptoStream into buffer, + and advances the position within the stream by the number of bytes read. + + + + + + + + Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + + + + Transforms stream using AES in CTR mode + + + + + Constructor. + + Password string + Random bytes, length depends on encryption strength. + 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes. + The encryption strength, in bytes eg 16 for 128 bits. + True when creating a zip, false when reading. For the AuthCode. + + + + + Implement the ICryptoTransform method. + + + + + Returns the 2 byte password verifier + + + + + Returns the 10 byte AUTH CODE to be checked or appended immediately following the AES data stream. + + + + + Transform final block and read auth code + + + + + Gets the size of the input data blocks in bytes. + + + + + Gets the size of the output data blocks in bytes. + + + + + Gets a value indicating whether multiple blocks can be transformed. + + + + + Gets a value indicating whether the current transform can be reused. + + + + + Cleanup internal state. + + + + + An example class to demonstrate compression and decompression of GZip streams. + + + + + Decompress the input writing + uncompressed data to the output stream + + The readable stream containing data to decompress. + The output stream to receive the decompressed data. + Both streams are closed on completion if true. + Input or output stream is null + + + + Compress the input stream sending + result data to output stream + + The readable stream to compress. + The output stream to receive the compressed data. + Both streams are closed on completion if true. + Deflate buffer size, minimum 512 + Deflate compression level, 0-9 + Input or output stream is null + Buffer Size is smaller than 512 + Compression level outside 0-9 + + + + This class contains constants used for gzip. + + + + + First GZip identification byte + + + + + Second GZip identification byte + + + + + Deflate compression method + + + + + Get the GZip specified encoding (CP-1252 if supported, otherwise ASCII) + + + + + GZip header flags + + + + + Text flag hinting that the file is in ASCII + + + + + CRC flag indicating that a CRC16 preceeds the data + + + + + Extra flag indicating that extra fields are present + + + + + Filename flag indicating that the original filename is present + + + + + Flag bit mask indicating that a comment is present + + + + + GZipException represents exceptions specific to GZip classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the GZipException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + This filter stream is used to decompress a "GZIP" format stream. + The "GZIP" format is described baseInputStream RFC 1952. + + author of the original java version : John Leuner + + This sample shows how to unzip a gzipped file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.Core; + using ICSharpCode.SharpZipLib.GZip; + + class MainClass + { + public static void Main(string[] args) + { + using (Stream inStream = new GZipInputStream(File.OpenRead(args[0]))) + using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) { + byte[] buffer = new byte[4096]; + StreamUtils.Copy(inStream, outStream, buffer); + } + } + } + + + + + + CRC-32 value for uncompressed data + + + + + Flag to indicate if we've read the GZIP header yet for the current member (block of compressed data). + This is tracked per-block as the file is parsed. + + + + + Flag to indicate if at least one block in a stream with concatenated blocks was read successfully. + This allows us to exit gracefully if downstream data is not in gzip format. + + + + + Creates a GZipInputStream with the default buffer size + + + The stream to read compressed data from (baseInputStream GZIP format) + + + + + Creates a GZIPInputStream with the specified buffer size + + + The stream to read compressed data from (baseInputStream GZIP format) + + + Size of the buffer to use + + + + + Reads uncompressed data into an array of bytes + + + The buffer to read uncompressed data into + + + The offset indicating where the data should be placed + + + The number of uncompressed bytes to be read + + Returns the number of bytes actually read. + + + + Retrieves the filename header field for the block last read + + + + + + This filter stream is used to compress a stream into a "GZIP" stream. + The "GZIP" format is described in RFC 1952. + + author of the original java version : John Leuner + + This sample shows how to gzip a file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.GZip; + using ICSharpCode.SharpZipLib.Core; + + class MainClass + { + public static void Main(string[] args) + { + using (Stream s = new GZipOutputStream(File.Create(args[0] + ".gz"))) + using (FileStream fs = File.OpenRead(args[0])) { + byte[] writeData = new byte[4096]; + Streamutils.Copy(s, fs, writeData); + } + } + } + } + + + + + + CRC-32 value for uncompressed data + + + + + Creates a GzipOutputStream with the default buffer size + + + The stream to read data (to be compressed) from + + + + + Creates a GZipOutputStream with the specified buffer size + + + The stream to read data (to be compressed) from + + + Size of the buffer to use + + + + + Sets the active compression level (0-9). The new level will be activated + immediately. + + The compression level to set. + + Level specified is not supported. + + + + + + Get the current compression level. + + The current compression level. + + + + Original filename + + + + + If defined, will use this time instead of the current for the output header + + + + + Write given buffer to output updating crc + + Buffer to write + Offset of first byte in buf to write + Number of bytes to write + + + + Asynchronously write given buffer to output updating crc + + Buffer to write + Offset of first byte in buf to write + Number of bytes to write + The token to monitor for cancellation requests + + + + Writes remaining compressed output data to the output stream + and closes it. + + + + + Flushes the stream by ensuring the header is written, and then calling Flush + on the deflater. + + + + + + + + Finish compression and write any footer information required to stream + + + + + + + + This class contains constants used for LZW + + + + + Magic number found at start of LZW header: 0x1f 0x9d + + + + + Maximum number of bits per code + + + + + Mask for 'number of compression bits' + + + + + Indicates the presence of a fourth header byte + + + + + Reserved bits + + + + + Block compression: if table is full and compression rate is dropping, + clear the dictionary. + + + + + LZW file header size (in bytes) + + + + + Initial number of bits per code + + + + + LzwException represents exceptions specific to LZW classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the LzwException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + This filter stream is used to decompress a LZW format stream. + Specifically, a stream that uses the LZC compression method. + This file format is usually associated with the .Z file extension. + + See http://en.wikipedia.org/wiki/Compress + See http://wiki.wxwidgets.org/Development:_Z_File_Format + + The file header consists of 3 (or optionally 4) bytes. The first two bytes + contain the magic marker "0x1f 0x9d", followed by a byte of flags. + + Based on Java code by Ronald Tschalar, which in turn was based on the unlzw.c + code in the gzip package. + + This sample shows how to unzip a compressed file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.Core; + using ICSharpCode.SharpZipLib.LZW; + + class MainClass + { + public static void Main(string[] args) + { + using (Stream inStream = new LzwInputStream(File.OpenRead(args[0]))) + using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) { + byte[] buffer = new byte[4096]; + StreamUtils.Copy(inStream, outStream, buffer); + // OR + inStream.Read(buffer, 0, buffer.Length); + // now do something with the buffer + } + } + } + + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Creates a LzwInputStream + + + The stream to read compressed data from (baseInputStream LZW format) + + + + + See + + + + + + Reads decompressed data into the provided buffer byte array + + + The array to read and decompress data into + + + The offset indicating where the data should be placed + + + The number of bytes to decompress + + The number of bytes read. Zero signals the end of stream + + + + Moves the unread data in the buffer to the beginning and resets + the pointers. + + + + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value of false indicating seeking is not supported for this stream. + + + + + Gets a value of false indicating that this stream is not writeable. + + + + + A value representing the length of the stream in bytes. + + + + + The current position within the stream. + Throws a NotSupportedException when attempting to set the position + + Attempting to set the position + + + + Flushes the baseInputStream + + + + + Sets the position within the current stream + Always throws a NotSupportedException + + The relative offset to seek to. + The defining where to seek from. + The new position in the stream. + Any access + + + + Set the length of the current stream + Always throws a NotSupportedException + + The new length value for the stream. + Any access + + + + Writes a sequence of bytes to stream and advances the current position + This method always throws a NotSupportedException + + The buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + Any access + + + + Writes one byte to the current stream and advances the current position + Always throws a NotSupportedException + + The byte to write. + Any access + + + + Closes the input stream. When + is true the underlying stream is also closed. + + + + + Flag indicating wether this instance has been closed or not. + + + + + This exception is used to indicate that there is a problem + with a TAR archive header. + + + + + Initialise a new instance of the InvalidHeaderException class. + + + + + Initialises a new instance of the InvalidHeaderException class with a specified message. + + Message describing the exception cause. + + + + Initialise a new instance of InvalidHeaderException + + Message describing the problem. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the InvalidHeaderException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Used to advise clients of 'events' while processing archives + + + + + The TarArchive class implements the concept of a + 'Tape Archive'. A tar archive is a series of entries, each of + which represents a file system object. Each entry in + the archive consists of a header block followed by 0 or more data blocks. + Directory entries consist only of the header block, and are followed by entries + for the directory's contents. File entries consist of a + header followed by the number of blocks needed to + contain the file's contents. All entries are written on + block boundaries. Blocks are 512 bytes long. + + TarArchives are instantiated in either read or write mode, + based upon whether they are instantiated with an InputStream + or an OutputStream. Once instantiated TarArchives read/write + mode can not be changed. + + There is currently no support for random access to tar archives. + However, it seems that subclassing TarArchive, and using the + TarBuffer.CurrentRecord and TarBuffer.CurrentBlock + properties, this would be rather trivial. + + + + + Client hook allowing detailed information to be reported during processing + + + + + Raises the ProgressMessage event + + The TarEntry for this event + message for this event. Null is no message + + + + Constructor for a default . + + + + + Initialise a TarArchive for input. + + The to use for input. + + + + Initialise a TarArchive for output. + + The to use for output. + + + + The InputStream based constructors create a TarArchive for the + purposes of extracting or listing a tar archive. Thus, use + these constructors when you wish to extract files from or list + the contents of an existing tar archive. + + The stream to retrieve archive data from. + Returns a new suitable for reading from. + + + + The InputStream based constructors create a TarArchive for the + purposes of extracting or listing a tar archive. Thus, use + these constructors when you wish to extract files from or list + the contents of an existing tar archive. + + The stream to retrieve archive data from. + The used for the Name fields, or null for ASCII only + Returns a new suitable for reading from. + + + + Create TarArchive for reading setting block factor + + A stream containing the tar archive contents + The blocking factor to apply + Returns a suitable for reading. + + + + Create TarArchive for reading setting block factor + + A stream containing the tar archive contents + The blocking factor to apply + The used for the Name fields, or null for ASCII only + Returns a suitable for reading. + + + + Create a TarArchive for writing to, using the default blocking factor + + The to write to + The used for the Name fields, or null for ASCII only + Returns a suitable for writing. + + + + Create a TarArchive for writing to, using the default blocking factor + + The to write to + Returns a suitable for writing. + + + + Create a tar archive for writing. + + The stream to write to + The blocking factor to use for buffering. + Returns a suitable for writing. + + + + Create a tar archive for writing. + + The stream to write to + The blocking factor to use for buffering. + The used for the Name fields, or null for ASCII only + Returns a suitable for writing. + + + + Set the flag that determines whether existing files are + kept, or overwritten during extraction. + + + If true, do not overwrite existing files. + + + + + Get/set the ascii file translation flag. If ascii file translation + is true, then the file is checked to see if it a binary file or not. + If the flag is true and the test indicates it is ascii text + file, it will be translated. The translation converts the local + operating system's concept of line ends into the UNIX line end, + '\n', which is the defacto standard for a TAR archive. This makes + text files compatible with UNIX. + + + + + Set the ascii file translation flag. + + + If true, translate ascii text files. + + + + + PathPrefix is added to entry names as they are written if the value is not null. + A slash character is appended after PathPrefix + + + + + RootPath is removed from entry names if it is found at the + beginning of the name. + + + + + Set user and group information that will be used to fill in the + tar archive's entry headers. This information is based on that available + for the linux operating system, which is not always available on other + operating systems. TarArchive allows the programmer to specify values + to be used in their place. + is set to true by this call. + + + The user id to use in the headers. + + + The user name to use in the headers. + + + The group id to use in the headers. + + + The group name to use in the headers. + + + + + Get or set a value indicating if overrides defined by SetUserInfo should be applied. + + If overrides are not applied then the values as set in each header will be used. + + + + Get the archive user id. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current user id. + + + + + Get the archive user name. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current user name. + + + + + Get the archive group id. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current group id. + + + + + Get the archive group name. + See ApplyUserInfoOverrides for detail + on how to allow setting values on a per entry basis. + + + The current group name. + + + + + Get the archive's record size. Tar archives are composed of + a series of RECORDS each containing a number of BLOCKS. + This allowed tar archives to match the IO characteristics of + the physical device being used. Archives are expected + to be properly "blocked". + + + The record size this archive is using. + + + + + Sets the IsStreamOwner property on the underlying stream. + Set this to false to prevent the Close of the TarArchive from closing the stream. + + + + + Close the archive. + + + + + Perform the "list" command for the archive contents. + + NOTE That this method uses the progress event to actually list + the contents. If the progress display event is not set, nothing will be listed! + + + + + Perform the "extract" command and extract the contents of the archive. + + + The destination directory into which to extract. + + + + + Perform the "extract" command and extract the contents of the archive. + + + The destination directory into which to extract. + + Allow parent directory traversal in file paths (e.g. ../file) + + + + Extract an entry from the archive. This method assumes that the + tarIn stream has been properly set with a call to GetNextEntry(). + + + The destination directory into which to extract. + + + The TarEntry returned by tarIn.GetNextEntry(). + + Allow parent directory traversal in file paths (e.g. ../file) + + + + Write an entry to the archive. This method will call the putNextEntry + and then write the contents of the entry, and finally call closeEntry() + for entries that are files. For directories, it will call putNextEntry(), + and then, if the recurse flag is true, process each entry that is a + child of the directory. + + + The TarEntry representing the entry to write to the archive. + + + If true, process the children of directory entries. + + + + + Write an entry to the archive. This method will call the putNextEntry + and then write the contents of the entry, and finally call closeEntry() + for entries that are files. For directories, it will call putNextEntry(), + and then, if the recurse flag is true, process each entry that is a + child of the directory. + + + The TarEntry representing the entry to write to the archive. + + + If true, process the children of directory entries. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases the unmanaged resources used by the FileStream and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + + + Closes the archive and releases any associated resources. + + + + + Ensures that resources are freed and other cleanup operations are performed + when the garbage collector reclaims the . + + + + + The TarBuffer class implements the tar archive concept + of a buffered input stream. This concept goes back to the + days of blocked tape drives and special io devices. In the + C# universe, the only real function that this class + performs is to ensure that files have the correct "record" + size, or other tars will complain. +

+ You should never have a need to access this class directly. + TarBuffers are created by Tar IO Streams. +

+
+
+ + + The size of a block in a tar archive in bytes. + + This is 512 bytes. + + + + The number of blocks in a default record. + + + The default value is 20 blocks per record. + + + + + The size in bytes of a default record. + + + The default size is 10KB. + + + + + Get the record size for this buffer + + The record size in bytes. + This is equal to the multiplied by the + + + + Get the TAR Buffer's record size. + + The record size in bytes. + This is equal to the multiplied by the + + + + Get the Blocking factor for the buffer + + This is the number of blocks in each record. + + + + Get the TAR Buffer's block factor + + The block factor; the number of blocks per record. + + + + Construct a default TarBuffer + + + + + Create TarBuffer for reading with default BlockFactor + + Stream to buffer + A new suitable for input. + + + + Construct TarBuffer for reading inputStream setting BlockFactor + + Stream to buffer + Blocking factor to apply + A new suitable for input. + + + + Construct TarBuffer for writing with default BlockFactor + + output stream for buffer + A new suitable for output. + + + + Construct TarBuffer for writing Tar output to streams. + + Output stream to write to. + Blocking factor to apply + A new suitable for output. + + + + Initialization common to all constructors. + + + + + Determine if an archive block indicates End of Archive. End of + archive is indicated by a block that consists entirely of null bytes. + All remaining blocks for the record should also be null's + However some older tars only do a couple of null blocks (Old GNU tar for one) + and also partial records + + The data block to check. + Returns true if the block is an EOF block; false otherwise. + + + + Determine if an archive block indicates the End of an Archive has been reached. + End of archive is indicated by a block that consists entirely of null bytes. + All remaining blocks for the record should also be null's + However some older tars only do a couple of null blocks (Old GNU tar for one) + and also partial records + + The data block to check. + Returns true if the block is an EOF block; false otherwise. + + + + Skip over a block on the input stream. + + + + + Skip over a block on the input stream. + + + + + Read a block from the input stream. + + + The block of data read. + + + + + Read a record from data stream. + + + false if End-Of-File, else true. + + + + + Get the current block number, within the current record, zero based. + + Block numbers are zero based values + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Get the current block number, within the current record, zero based. + + + The current zero based block number. + + + The absolute block number = (record number * block factor) + block number. + + + + + Get the current record number. + + + The current zero based record number. + + + + + Get the current record number. + + + The current zero based record number. + + + + + Write a block of data to the archive. + + + The data to write to the archive. + + + + + + Write a block of data to the archive. + + + The data to write to the archive. + + + + + Write an archive record to the archive, where the record may be + inside of a larger array buffer. The buffer must be "offset plus + record size" long. + + + The buffer containing the record data to write. + + + The offset of the record data within buffer. + + + + + + Write an archive record to the archive, where the record may be + inside of a larger array buffer. The buffer must be "offset plus + record size" long. + + + The buffer containing the record data to write. + + + The offset of the record data within buffer. + + + + + Write a TarBuffer record to the archive. + + + + + WriteFinalRecord writes the current record buffer to output any unwritten data is present. + + Any trailing bytes are set to zero which is by definition correct behaviour + for the end of a tar stream. + + + + Close the TarBuffer. If this is an output buffer, also flush the + current block before closing. + + + + + Close the TarBuffer. If this is an output buffer, also flush the + current block before closing. + + + + + This class represents an entry in a Tar archive. It consists + of the entry's header, as well as the entry's File. Entries + can be instantiated in one of three ways, depending on how + they are to be used. +

+ TarEntries that are created from the header bytes read from + an archive are instantiated with the TarEntry( byte[] ) + constructor. These entries will be used when extracting from + or listing the contents of an archive. These entries have their + header filled in using the header bytes. They also set the File + to null, since they reference an archive entry not a file.

+

+ TarEntries that are created from files that are to be written + into an archive are instantiated with the CreateEntryFromFile(string) + pseudo constructor. These entries have their header filled in using + the File's information. They also keep a reference to the File + for convenience when writing entries.

+

+ Finally, TarEntries can be constructed from nothing but a name. + This allows the programmer to construct the entry by hand, for + instance when only an InputStream is available for writing to + the archive, and the header information is constructed from + other information. In this case the header fields are set to + defaults and the File is set to null.

+ +
+
+ + + Initialise a default instance of . + + + + + Construct an entry from an archive's header bytes. File is set + to null. + + + The header bytes from a tar archive entry. + + + + + Construct an entry from an archive's header bytes. File is set + to null. + + + The header bytes from a tar archive entry. + + + The used for the Name fields, or null for ASCII only + + + + + Construct a TarEntry using the header provided + + Header details for entry + + + + Clone this tar entry. + + Returns a clone of this entry. + + + + Construct an entry with only a name. + This allows the programmer to construct the entry's header "by hand". + + The name to use for the entry + Returns the newly created + + + + Construct an entry for a file. File is set to file, and the + header is constructed from information from the file. + + The file name that the entry represents. + Returns the newly created + + + + Determine if the two entries are equal. Equality is determined + by the header names being equal. + + The to compare with the current Object. + + True if the entries are equal; false if not. + + + + + Derive a Hash value for the current + + A Hash code for the current + + + + Determine if the given entry is a descendant of this entry. + Descendancy is determined by the name of the descendant + starting with this entry's name. + + + Entry to be checked as a descendent of this. + + + True if entry is a descendant of this. + + + + + Get this entry's header. + + + This entry's TarHeader. + + + + + Get/Set this entry's name. + + + + + Get/set this entry's user id. + + + + + Get/set this entry's group id. + + + + + Get/set this entry's user name. + + + + + Get/set this entry's group name. + + + + + Convenience method to set this entry's group and user ids. + + + This entry's new user id. + + + This entry's new group id. + + + + + Convenience method to set this entry's group and user names. + + + This entry's new user name. + + + This entry's new group name. + + + + + Get/Set the modification time for this entry + + + + + Get this entry's file. + + + This entry's file. + + + + + Get/set this entry's recorded file size. + + + + + Return true if this entry represents a directory, false otherwise + + + True if this entry is a directory. + + + + + Fill in a TarHeader with information from a File. + + + The TarHeader to fill in. + + + The file from which to get the header information. + + + + + Get entries for all files present in this entries directory. + If this entry doesnt represent a directory zero entries are returned. + + + An array of TarEntry's for this entry's children. + + + + + Write an entry's header information to a header buffer. + + + The tar entry header buffer to fill in. + + + + + Write an entry's header information to a header buffer. + + + The tar entry header buffer to fill in. + + + The used for the Name fields, or null for ASCII only + + + + + Convenience method that will modify an entry's name directly + in place in an entry header buffer byte array. + + + The buffer containing the entry header to modify. + + + The new name to place into the header buffer. + + + + + Convenience method that will modify an entry's name directly + in place in an entry header buffer byte array. + + + The buffer containing the entry header to modify. + + + The new name to place into the header buffer. + + + The used for the Name fields, or null for ASCII only + + + + + Fill in a TarHeader given only the entry's name. + + + The tar entry name. + + + + + The name of the file this entry represents or null if the entry is not based on a file. + + + + + The entry's header information. + + + + + TarException represents exceptions specific to Tar classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the TarException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + Reads the extended header of a Tar stream + + + + + Creates a new . + + + + + Read bytes from + + + + + + + Returns the parsed headers as key-value strings + + + + + This class encapsulates the Tar Entry Header used in Tar Archives. + The class also holds a number of tar constants, used mostly in headers. + + + The tar format and its POSIX successor PAX have a long history which makes for compatability + issues when creating and reading files. + + This is further complicated by a large number of programs with variations on formats + One common issue is the handling of names longer than 100 characters. + GNU style long names are currently supported. + + This is the ustar (Posix 1003.1) header. + + struct header + { + char t_name[100]; // 0 Filename + char t_mode[8]; // 100 Permissions + char t_uid[8]; // 108 Numerical User ID + char t_gid[8]; // 116 Numerical Group ID + char t_size[12]; // 124 Filesize + char t_mtime[12]; // 136 st_mtime + char t_chksum[8]; // 148 Checksum + char t_typeflag; // 156 Type of File + char t_linkname[100]; // 157 Target of Links + char t_magic[6]; // 257 "ustar" or other... + char t_version[2]; // 263 Version fixed to 00 + char t_uname[32]; // 265 User Name + char t_gname[32]; // 297 Group Name + char t_devmajor[8]; // 329 Major for devices + char t_devminor[8]; // 337 Minor for devices + char t_prefix[155]; // 345 Prefix for t_name + char t_mfill[12]; // 500 Filler up to 512 + }; + + + + + The length of the name field in a header buffer. + + + + + The length of the mode field in a header buffer. + + + + + The length of the user id field in a header buffer. + + + + + The length of the group id field in a header buffer. + + + + + The length of the checksum field in a header buffer. + + + + + Offset of checksum in a header buffer. + + + + + The length of the size field in a header buffer. + + + + + The length of the magic field in a header buffer. + + + + + The length of the version field in a header buffer. + + + + + The length of the modification time field in a header buffer. + + + + + The length of the user name field in a header buffer. + + + + + The length of the group name field in a header buffer. + + + + + The length of the devices field in a header buffer. + + + + + The length of the name prefix field in a header buffer. + + + + + The "old way" of indicating a normal file. + + + + + Normal file type. + + + + + Link file type. + + + + + Symbolic link file type. + + + + + Character device file type. + + + + + Block device file type. + + + + + Directory file type. + + + + + FIFO (pipe) file type. + + + + + Contiguous file type. + + + + + Posix.1 2001 global extended header + + + + + Posix.1 2001 extended header + + + + + Solaris access control list file type + + + + + GNU dir dump file type + This is a dir entry that contains the names of files that were in the + dir at the time the dump was made + + + + + Solaris Extended Attribute File + + + + + Inode (metadata only) no file content + + + + + Identifies the next file on the tape as having a long link name + + + + + Identifies the next file on the tape as having a long name + + + + + Continuation of a file that began on another volume + + + + + For storing filenames that dont fit in the main header (old GNU) + + + + + GNU Sparse file + + + + + GNU Tape/volume header ignore on extraction + + + + + The magic tag representing a POSIX tar archive. (would be written with a trailing NULL) + + + + + The magic tag representing an old GNU tar archive where version is included in magic and overwrites it + + + + + Initialise a default TarHeader instance + + + + + Get/set the name for this tar entry. + + Thrown when attempting to set the property to null. + + + + Get the name of this entry. + + The entry's name. + + + + Get/set the entry's Unix style permission mode. + + + + + The entry's user id. + + + This is only directly relevant to unix systems. + The default is zero. + + + + + Get/set the entry's group id. + + + This is only directly relevant to linux/unix systems. + The default value is zero. + + + + + Get/set the entry's size. + + Thrown when setting the size to less than zero. + + + + Get/set the entry's modification time. + + + The modification time is only accurate to within a second. + + Thrown when setting the date time to less than 1/1/1970. + + + + Get the entry's checksum. This is only valid/updated after writing or reading an entry. + + + + + Get value of true if the header checksum is valid, false otherwise. + + + + + Get/set the entry's type flag. + + + + + The entry's link name. + + Thrown when attempting to set LinkName to null. + + + + Get/set the entry's magic tag. + + Thrown when attempting to set Magic to null. + + + + The entry's version. + + Thrown when attempting to set Version to null. + + + + The entry's user name. + + + + + Get/set the entry's group name. + + + This is only directly relevant to unix systems. + + + + + Get/set the entry's major device number. + + + + + Get/set the entry's minor device number. + + + + + Create a new that is a copy of the current instance. + + A new that is a copy of the current instance. + + + + Parse TarHeader information from a header buffer. + + + The tar entry header buffer to get information from. + + + The used for the Name field, or null for ASCII only + + + + + Parse TarHeader information from a header buffer. + + + The tar entry header buffer to get information from. + + + + + 'Write' header information to buffer provided, updating the check sum. + + output buffer for header information + + + + 'Write' header information to buffer provided, updating the check sum. + + output buffer for header information + The used for the Name field, or null for ASCII only + + + + Get a hash code for the current object. + + A hash code for the current object. + + + + Determines if this instance is equal to the specified object. + + The object to compare with. + true if the objects are equal, false otherwise. + + + + Set defaults for values used when constructing a TarHeader instance. + + Value to apply as a default for userId. + Value to apply as a default for userName. + Value to apply as a default for groupId. + Value to apply as a default for groupName. + + + + Parse an octal string from a header buffer. + + The header buffer from which to parse. + The offset into the buffer from which to parse. + The number of header bytes to parse. + The long equivalent of the octal string. + + + + Parse a name from a header buffer. + + + The header buffer from which to parse. + + + The offset into the buffer from which to parse. + + + The number of header bytes to parse. + + + The name parsed. + + + + + Parse a name from a header buffer. + + + The header buffer from which to parse. + + + name encoding, or null for ASCII only + + + The name parsed. + + + + + Add name to the buffer as a collection of bytes + + The name to add + The offset of the first character + The buffer to add to + The index of the first byte to add + The number of characters/bytes to add + The next free index in the + + + + Add name to the buffer as a collection of bytes + + The name to add + The offset of the first character + The buffer to add to + The index of the first byte to add + The number of characters/bytes to add + The next free index in the + + + + Add name to the buffer as a collection of bytes + + The name to add + The offset of the first character + The buffer to add to + The index of the first byte to add + The number of characters/bytes to add + name encoding, or null for ASCII only + The next free index in the + + + + Add an entry name to the buffer + + + The name to add + + + The buffer to add to + + + The offset into the buffer from which to start adding + + + The number of header bytes to add + + + The index of the next free byte in the buffer + + TODO: what should be default behavior?(omit upper byte or UTF8?) + + + + Add an entry name to the buffer + + + The name to add + + + The buffer to add to + + + The offset into the buffer from which to start adding + + + The number of header bytes to add + + + + + The index of the next free byte in the buffer + + + + + Add an entry name to the buffer + + The name to add + The buffer to add to + The offset into the buffer from which to start adding + The number of header bytes to add + The index of the next free byte in the buffer + TODO: what should be default behavior?(omit upper byte or UTF8?) + + + + Add an entry name to the buffer + + The name to add + The buffer to add to + The offset into the buffer from which to start adding + The number of header bytes to add + + The index of the next free byte in the buffer + + + + Add a string to a buffer as a collection of ascii bytes. + + The string to add + The offset of the first character to add. + The buffer to add to. + The offset to start adding at. + The number of ascii characters to add. + The next free index in the buffer. + + + + Add a string to a buffer as a collection of ascii bytes. + + The string to add + The offset of the first character to add. + The buffer to add to. + The offset to start adding at. + The number of ascii characters to add. + String encoding, or null for ASCII only + The next free index in the buffer. + + + + Put an octal representation of a value into a buffer + + + the value to be converted to octal + + + buffer to store the octal string + + + The offset into the buffer where the value starts + + + The length of the octal string to create + + + The offset of the character next byte after the octal string + + + + + Put an octal or binary representation of a value into a buffer + + Value to be convert to octal + The buffer to update + The offset into the buffer to store the value + The length of the octal string. Must be 12. + Index of next byte + + + + Add the checksum integer to header buffer. + + + The header buffer to set the checksum for + The offset into the buffer for the checksum + The number of header bytes to update. + It's formatted differently from the other fields: it has 6 digits, a + null, then a space -- rather than digits, a space, then a null. + The final space is already there, from checksumming + + The modified buffer offset + + + + Compute the checksum for a tar entry header. + The checksum field must be all spaces prior to this happening + + The tar entry's header buffer. + The computed checksum. + + + + Make a checksum for a tar entry ignoring the checksum contents. + + The tar entry's header buffer. + The checksum for the buffer + + + + The TarInputStream reads a UNIX tar archive as an InputStream. + methods are provided to position at each successive entry in + the archive, and the read each entry as a normal input stream + using read(). + + + + + Construct a TarInputStream with default block factor + + stream to source data from + + + + Construct a TarInputStream with default block factor + + stream to source data from + The used for the Name fields, or null for ASCII only + + + + Construct a TarInputStream with user specified block factor + + stream to source data from + block factor to apply to archive + + + + Construct a TarInputStream with user specified block factor + + stream to source data from + block factor to apply to archive + The used for the Name fields, or null for ASCII only + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value indicating whether the current stream supports seeking + This property always returns false. + + + + + Gets a value indicating if the stream supports writing. + This property always returns false. + + + + + The length in bytes of the stream + + + + + Gets or sets the position within the stream. + Setting the Position is not supported and throws a NotSupportedExceptionNotSupportedException + + Any attempt to set position + + + + Flushes the baseInputStream + + + + + Flushes the baseInputStream + + + + + + Set the streams position. This operation is not supported and will throw a NotSupportedException + + The offset relative to the origin to seek to. + The to start seeking from. + The new position in the stream. + Any access + + + + Sets the length of the stream + This operation is not supported and will throw a NotSupportedException + + The new stream length. + Any access + + + + Writes a block of bytes to this stream using data from a buffer. + This operation is not supported and will throw a NotSupportedException + + The buffer containing bytes to write. + The offset in the buffer of the frist byte to write. + The number of bytes to write. + Any access + + + + Writes a byte to the current position in the file stream. + This operation is not supported and will throw a NotSupportedException + + The byte value to write. + Any access + + + + Reads a byte from the current tar archive entry. + + A byte cast to an int; -1 if the at the end of the stream. + + + + Reads bytes from the current tar archive entry. + + This method is aware of the boundaries of the current + entry in the archive and will deal with them appropriately + + + The buffer into which to place bytes read. + + + The offset at which to place bytes read. + + + The number of bytes to read. + + + + The number of bytes read, or 0 at end of stream/EOF. + + + + + Reads bytes from the current tar archive entry. + + This method is aware of the boundaries of the current + entry in the archive and will deal with them appropriately + + + The buffer into which to place bytes read. + + + The offset at which to place bytes read. + + + The number of bytes to read. + + + The number of bytes read, or 0 at end of stream/EOF. + + + + + Closes this stream. Calls the TarBuffer's close() method. + The underlying stream is closed by the TarBuffer. + + + + + Set the entry factory for this instance. + + The factory for creating new entries + + + + Get the record size being used by this stream's TarBuffer. + + + + + Get the record size being used by this stream's TarBuffer. + + + TarBuffer record size. + + + + + Get the available data that can be read from the current + entry in the archive. This does not indicate how much data + is left in the entire archive, only in the current entry. + This value is determined from the entry's size header field + and the amount of data already read from the current entry. + + + The number of available bytes for the current entry. + + + + + Skip bytes in the input buffer. This skips bytes in the + current entry's data, not the entire archive, and will + stop at the end of the current entry's data if the number + to skip extends beyond that point. + + + The number of bytes to skip. + + + + + + Skip bytes in the input buffer. This skips bytes in the + current entry's data, not the entire archive, and will + stop at the end of the current entry's data if the number + to skip extends beyond that point. + + + The number of bytes to skip. + + + + + Return a value of true if marking is supported; false otherwise. + + Currently marking is not supported, the return value is always false. + + + + Since we do not support marking just yet, we do nothing. + + + The limit to mark. + + + + + Since we do not support marking just yet, we do nothing. + + + + + Get the next entry in this tar archive. This will skip + over any remaining data in the current entry, if there + is one, and place the input stream at the header of the + next entry, and read the header and instantiate a new + TarEntry from the header bytes and return that entry. + If there are no more entries in the archive, null will + be returned to indicate that the end of the archive has + been reached. + + + The next TarEntry in the archive, or null. + + + + + Get the next entry in this tar archive. This will skip + over any remaining data in the current entry, if there + is one, and place the input stream at the header of the + next entry, and read the header and instantiate a new + TarEntry from the header bytes and return that entry. + If there are no more entries in the archive, null will + be returned to indicate that the end of the archive has + been reached. + + + The next TarEntry in the archive, or null. + + + + + Copies the contents of the current tar archive entry directly into + an output stream. + + + The OutputStream into which to write the entry's data. + + + + + + Copies the contents of the current tar archive entry directly into + an output stream. + + + The OutputStream into which to write the entry's data. + + + + + This interface is provided, along with the method , to allow + the programmer to have their own subclass instantiated for the + entries return from . + + + + + Create an entry based on name alone + + + Name of the new EntryPointNotFoundException to create + + created TarEntry or descendant class + + + + Create an instance based on an actual file + + + Name of file to represent in the entry + + + Created TarEntry or descendant class + + + + + Create a tar entry based on the header information passed + + + Buffer containing header information to create an entry from. + + + Created TarEntry or descendant class + + + + + Standard entry factory class creating instances of the class TarEntry + + + + + Construct standard entry factory class with ASCII name encoding + + + + + Construct standard entry factory with name encoding + + The used for the Name fields, or null for ASCII only + + + + Create a based on named + + The name to use for the entry + A new + + + + Create a tar entry with details obtained from file + + The name of the file to retrieve details from. + A new + + + + Create an entry based on details in header + + The buffer containing entry details. + A new + + + + Flag set when last block has been read + + + + + Size of this entry as recorded in header + + + + + Number of bytes read for this entry so far + + + + + Buffer used with calls to Read() + + + + + Working buffer + + + + + Current entry being read + + + + + Factory used to create TarEntry or descendant class instance + + + + + Stream used as the source of input data. + + + + + The TarOutputStream writes a UNIX tar archive as an OutputStream. + Methods are provided to put entries, and then write their contents + by writing to this stream using write(). + + public + + + + Construct TarOutputStream using default block factor + + stream to write to + + + + Construct TarOutputStream using default block factor + + stream to write to + The used for the Name fields, or null for ASCII only + + + + Construct TarOutputStream with user specified block factor + + stream to write to + blocking factor + + + + Construct TarOutputStream with user specified block factor + + stream to write to + blocking factor + The used for the Name fields, or null for ASCII only + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + true if the stream supports reading; otherwise, false. + + + + + true if the stream supports seeking; otherwise, false. + + + + + true if stream supports writing; otherwise, false. + + + + + length of stream in bytes + + + + + gets or sets the position within the current stream. + + + + + set the position within the current stream + + The offset relative to the to seek to + The to seek from. + The new position in the stream. + + + + Set the length of the current stream + + The new stream length. + + + + Read a byte from the stream and advance the position within the stream + by one byte or returns -1 if at the end of the stream. + + The byte value or -1 if at end of stream + + + + read bytes from the current stream and advance the position within the + stream by the number of bytes read. + + The buffer to store read bytes in. + The index into the buffer to being storing bytes at. + The desired number of bytes to read. + The total number of bytes read, or zero if at the end of the stream. + The number of bytes may be less than the count + requested if data is not available. + + + + read bytes from the current stream and advance the position within the + stream by the number of bytes read. + + The buffer to store read bytes in. + The index into the buffer to being storing bytes at. + The desired number of bytes to read. + + The total number of bytes read, or zero if at the end of the stream. + The number of bytes may be less than the count + requested if data is not available. + + + + All buffered data is written to destination + + + + + All buffered data is written to destination + + + + + Ends the TAR archive without closing the underlying OutputStream. + The result is that the EOF block of nulls is written. + + + + + Ends the TAR archive without closing the underlying OutputStream. + The result is that the EOF block of nulls is written. + + + + + Ends the TAR archive and closes the underlying OutputStream. + + This means that Finish() is called followed by calling the + TarBuffer's Close(). + + + + Get the record size being used by this stream's TarBuffer. + + + + + Get the record size being used by this stream's TarBuffer. + + + The TarBuffer record size. + + + + + Get a value indicating whether an entry is open, requiring more data to be written. + + + + + Put an entry on the output stream. This writes the entry's + header and positions the output stream for writing + the contents of the entry. Once this method is called, the + stream is ready for calls to write() to write the entry's + contents. Once the contents are written, closeEntry() + MUST be called to ensure that all buffered data + is completely written to the output stream. + + + The TarEntry to be written to the archive. + + + + + + Put an entry on the output stream. This writes the entry's + header and positions the output stream for writing + the contents of the entry. Once this method is called, the + stream is ready for calls to write() to write the entry's + contents. Once the contents are written, closeEntry() + MUST be called to ensure that all buffered data + is completely written to the output stream. + + + The TarEntry to be written to the archive. + + + + + Close an entry. This method MUST be called for all file + entries that contain data. The reason is that we must + buffer data written to the stream in order to satisfy + the buffer's block based writes. Thus, there may be + data fragments still being assembled that must be written + to the output stream before this entry is closed and the + next entry written. + + + + + Close an entry. This method MUST be called for all file + entries that contain data. The reason is that we must + buffer data written to the stream in order to satisfy + the buffer's block based writes. Thus, there may be + data fragments still being assembled that must be written + to the output stream before this entry is closed and the + next entry written. + + + + + Writes a byte to the current tar archive entry. + This method simply calls Write(byte[], int, int). + + + The byte to be written. + + + + + Writes bytes to the current tar archive entry. This method + is aware of the current entry and will throw an exception if + you attempt to write bytes past the length specified for the + current entry. The method is also (painfully) aware of the + record buffering required by TarBuffer, and manages buffers + that are not a multiple of recordsize in length, including + assembling records from small buffers. + + + The buffer to write to the archive. + + + The offset in the buffer from which to get bytes. + + + The number of bytes to write. + + + + + Writes bytes to the current tar archive entry. This method + is aware of the current entry and will throw an exception if + you attempt to write bytes past the length specified for the + current entry. The method is also (painfully) aware of the + record buffering required by TarBuffer, and manages buffers + that are not a multiple of recordsize in length, including + assembling records from small buffers. + + + The buffer to write to the archive. + + + The offset in the buffer from which to get bytes. + + + The number of bytes to write. + + + + + + Write an EOF (end of archive) block to the tar archive. + The end of the archive is indicated by two blocks consisting entirely of zero bytes. + + + + + bytes written for this entry so far + + + + + current 'Assembly' buffer length + + + + + Flag indicating whether this instance has been closed or not. + + + + + Size for the current entry + + + + + single block working buffer + + + + + 'Assembly' buffer used to assemble data before writing + + + + + TarBuffer used to provide correct blocking factor + + + + + the destination stream for the archive contents + + + + + name encoding + + + + + This is the Deflater class. The deflater class compresses input + with the deflate algorithm described in RFC 1951. It has several + compression levels and three different strategies described below. + + This class is not thread safe. This is inherent in the API, due + to the split of deflate and setInput. + + author of the original java version : Jochen Hoenicke + + + + + The best and slowest compression level. This tries to find very + long and distant string repetitions. + + + + + The worst but fastest compression level. + + + + + The default compression level. + + + + + This level won't compress at all but output uncompressed blocks. + + + + + The compression method. This is the only method supported so far. + There is no need to use this constant at all. + + + + + Compression Level as an enum for safer use + + + + + The best and slowest compression level. This tries to find very + long and distant string repetitions. + + + + + The worst but fastest compression level. + + + + + The default compression level. + + + + + This level won't compress at all but output uncompressed blocks. + + + + + The compression method. This is the only method supported so far. + There is no need to use this constant at all. + + + + + Creates a new deflater with default compression level. + + + + + Creates a new deflater with given compression level. + + + the compression level, a value between NO_COMPRESSION + and BEST_COMPRESSION, or DEFAULT_COMPRESSION. + + if lvl is out of range. + + + + Creates a new deflater with given compression level. + + + the compression level, a value between NO_COMPRESSION + and BEST_COMPRESSION. + + + true, if we should suppress the Zlib/RFC1950 header at the + beginning and the adler checksum at the end of the output. This is + useful for the GZIP/PKZIP formats. + + if lvl is out of range. + + + + Resets the deflater. The deflater acts afterwards as if it was + just created with the same compression level and strategy as it + had before. + + + + + Gets the current adler checksum of the data that was processed so far. + + + + + Gets the number of input bytes processed so far. + + + + + Gets the number of output bytes so far. + + + + + Flushes the current input block. Further calls to deflate() will + produce enough output to inflate everything in the current input + block. This is not part of Sun's JDK so I have made it package + private. It is used by DeflaterOutputStream to implement + flush(). + + + + + Finishes the deflater with the current input block. It is an error + to give more input after this method was called. This method must + be called to force all bytes to be flushed. + + + + + Returns true if the stream was finished and no more output bytes + are available. + + + + + Returns true, if the input buffer is empty. + You should then call setInput(). + NOTE: This method can also return true when the stream + was finished. + + + + + Sets the data which should be compressed next. This should be only + called when needsInput indicates that more input is needed. + If you call setInput when needsInput() returns false, the + previous input that is still pending will be thrown away. + The given byte array should not be changed, before needsInput() returns + true again. + This call is equivalent to setInput(input, 0, input.length). + + + the buffer containing the input data. + + + if the buffer was finished() or ended(). + + + + + Sets the data which should be compressed next. This should be + only called when needsInput indicates that more input is needed. + The given byte array should not be changed, before needsInput() returns + true again. + + + the buffer containing the input data. + + + the start of the data. + + + the number of data bytes of input. + + + if the buffer was Finish()ed or if previous input is still pending. + + + + + Sets the compression level. There is no guarantee of the exact + position of the change, but if you call this when needsInput is + true the change of compression level will occur somewhere near + before the end of the so far given input. + + + the new compression level. + + + + + Get current compression level + + Returns the current compression level + + + + Sets the compression strategy. Strategy is one of + DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact + position where the strategy is changed, the same as for + SetLevel() applies. + + + The new compression strategy. + + + + + Deflates the current input block with to the given array. + + + The buffer where compressed data is stored + + + The number of compressed bytes added to the output, or 0 if either + IsNeedingInput() or IsFinished returns true or length is zero. + + + + + Deflates the current input block to the given array. + + + Buffer to store the compressed data. + + + Offset into the output array. + + + The maximum number of bytes that may be stored. + + + The number of compressed bytes added to the output, or 0 if either + needsInput() or finished() returns true or length is zero. + + + If Finish() was previously called. + + + If offset or length don't match the array length. + + + + + Sets the dictionary which should be used in the deflate process. + This call is equivalent to setDictionary(dict, 0, dict.Length). + + + the dictionary. + + + if SetInput () or Deflate () were already called or another dictionary was already set. + + + + + Sets the dictionary which should be used in the deflate process. + The dictionary is a byte array containing strings that are + likely to occur in the data which should be compressed. The + dictionary is not stored in the compressed output, only a + checksum. To decompress the output you need to supply the same + dictionary again. + + + The dictionary data + + + The index where dictionary information commences. + + + The number of bytes in the dictionary. + + + If SetInput () or Deflate() were already called or another dictionary was already set. + + + + + Compression level. + + + + + If true no Zlib/RFC1950 headers or footers are generated + + + + + The current state. + + + + + The total bytes of output written. + + + + + The pending output. + + + + + The deflater engine. + + + + + This class contains constants used for deflation. + + + + + Set to true to enable debugging + + + + + Written to Zip file to identify a stored block + + + + + Identifies static tree in Zip file + + + + + Identifies dynamic tree in Zip file + + + + + Header flag indicating a preset dictionary for deflation + + + + + Sets internal buffer sizes for Huffman encoding + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Internal compression engine constant + + + + + Strategies for deflater + + + + + The default strategy + + + + + This strategy will only allow longer string repetitions. It is + useful for random data with a small character set. + + + + + This strategy will not look for string repetitions at all. It + only encodes with Huffman trees (which means, that more common + characters get a smaller encoding. + + + + + Low level compression engine for deflate algorithm which uses a 32K sliding window + with secondary compression from Huffman/Shannon-Fano codes. + + + + + Construct instance with pending buffer + Adler calculation will be performed + + + Pending buffer to use + + + + + Construct instance with pending buffer + + + Pending buffer to use + + + If no adler calculation should be performed + + + + + Deflate drives actual compression of data + + True to flush input buffers + Finish deflation with the current input. + Returns true if progress has been made. + + + + Sets input data to be deflated. Should only be called when NeedsInput() + returns true + + The buffer containing input data. + The offset of the first byte of data. + The number of bytes of data to use as input. + + + + Determines if more input is needed. + + Return true if input is needed via SetInput + + + + Set compression dictionary + + The buffer containing the dictionary data + The offset in the buffer for the first byte of data + The length of the dictionary data. + + + + Reset internal state + + + + + Reset Adler checksum + + + + + Get current value of Adler checksum + + + + + Total data processed + + + + + Get/set the deflate strategy + + + + + Set the deflate level (0-9) + + The value to set the level to. + + + + Fill the window + + + + + Inserts the current string in the head hash and returns the previous + value for this hash. + + The previous hash value + + + + Find the best (longest) string in the window matching the + string starting at strstart. + + Preconditions: + + strstart + DeflaterConstants.MAX_MATCH <= window.length. + + + True if a match greater than the minimum length is found + + + + Hashtable, hashing three characters to an index for window, so + that window[index]..window[index+2] have this hash code. + Note that the array should really be unsigned short, so you need + to and the values with 0xffff. + + + + + prev[index & WMASK] points to the previous index that has the + same hash code as the string starting at index. This way + entries with the same hash code are in a linked list. + Note that the array should really be unsigned short, so you need + to and the values with 0xffff. + + + + + Points to the current character in the window. + + + + + lookahead is the number of characters starting at strstart in + window that are valid. + So window[strstart] until window[strstart+lookahead-1] are valid + characters. + + + + + This array contains the part of the uncompressed stream that + is of relevance. The current character is indexed by strstart. + + + + + The current compression function. + + + + + The input data for compression. + + + + + The total bytes of input read. + + + + + The offset into inputBuf, where input data starts. + + + + + The end offset of the input data. + + + + + The adler checksum + + + + + This is the DeflaterHuffman class. + + This class is not thread safe. This is inherent in the API, due + to the split of Deflate and SetInput. + + author of the original java version : Jochen Hoenicke + + + + + Resets the internal state of the tree + + + + + Check that all frequencies are zero + + + At least one frequency is non-zero + + + + + Set static codes and length + + new codes + length for new codes + + + + Build dynamic codes and lengths + + + + + Get encoded length + + Encoded length, the sum of frequencies * lengths + + + + Scan a literal or distance tree to determine the frequencies of the codes + in the bit length tree. + + + + + Write tree values + + Tree to write + + + + Pending buffer to use + + + + + Construct instance with pending buffer + + Pending buffer to use + + + + Reset internal state + + + + + Write all trees to pending buffer + + The number/rank of treecodes to send. + + + + Compress current buffer writing data to pending buffer + + + + + Flush block to output with no compression + + Data to write + Index of first byte to write + Count of bytes to write + True if this is the last block + + + + Flush block to output with compression + + Data to flush + Index of first byte to flush + Count of bytes to flush + True if this is the last block + + + + Get value indicating if internal buffer is full + + true if buffer is full + + + + Add literal to buffer + + Literal value to add to buffer. + Value indicating internal buffer is full + + + + Add distance code and length to literal and distance trees + + Distance code + Length + Value indicating if internal buffer is full + + + + Reverse the bits of a 16 bit value. + + Value to reverse bits + Value with bits reversed + + + + This class stores the pending output of the Deflater. + + author of the original java version : Jochen Hoenicke + + + + + Construct instance with default buffer size + + + + + Inflater is used to decompress data that has been compressed according + to the "deflate" standard described in rfc1951. + + By default Zlib (rfc1950) headers and footers are expected in the input. + You can use constructor public Inflater(bool noHeader) passing true + if there is no Zlib header information + + The usage is as following. First you have to set some input with + SetInput(), then Inflate() it. If inflate doesn't + inflate any bytes there may be three reasons: +
    +
  • IsNeedingInput() returns true because the input buffer is empty. + You have to provide more input with SetInput(). + NOTE: IsNeedingInput() also returns true when, the stream is finished. +
  • +
  • IsNeedingDictionary() returns true, you have to provide a preset + dictionary with SetDictionary().
  • +
  • IsFinished returns true, the inflater has finished.
  • +
+ Once the first output byte is produced, a dictionary will not be + needed at a later stage. + + author of the original java version : John Leuner, Jochen Hoenicke +
+
+ + + Copy lengths for literal codes 257..285 + + + + + Extra bits for literal codes 257..285 + + + + + Copy offsets for distance codes 0..29 + + + + + Extra bits for distance codes + + + + + These are the possible states for an inflater + + + + + This variable contains the current state. + + + + + The adler checksum of the dictionary or of the decompressed + stream, as it is written in the header resp. footer of the + compressed stream. + Only valid if mode is DECODE_DICT or DECODE_CHKSUM. + + + + + The number of bits needed to complete the current state. This + is valid, if mode is DECODE_DICT, DECODE_CHKSUM, + DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS. + + + + + True, if the last block flag was set in the last block of the + inflated stream. This means that the stream ends after the + current block. + + + + + The total number of inflated bytes. + + + + + The total number of bytes set with setInput(). This is not the + value returned by the TotalIn property, since this also includes the + unprocessed input. + + + + + This variable stores the noHeader flag that was given to the constructor. + True means, that the inflated stream doesn't contain a Zlib header or + footer. + + + + + Creates a new inflater or RFC1951 decompressor + RFC1950/Zlib headers and footers will be expected in the input data + + + + + Creates a new inflater. + + + True if no RFC1950/Zlib header and footer fields are expected in the input data + + This is used for GZIPed/Zipped input. + + For compatibility with + Sun JDK you should provide one byte of input more than needed in + this case. + + + + + Resets the inflater so that a new stream can be decompressed. All + pending input and output will be discarded. + + + + + Decodes a zlib/RFC1950 header. + + + False if more input is needed. + + + The header is invalid. + + + + + Decodes the dictionary checksum after the deflate header. + + + False if more input is needed. + + + + + Decodes the huffman encoded symbols in the input stream. + + + false if more input is needed, true if output window is + full or the current block ends. + + + if deflated stream is invalid. + + + + + Decodes the adler checksum after the deflate stream. + + + false if more input is needed. + + + If checksum doesn't match. + + + + + Decodes the deflated stream. + + + false if more input is needed, or if finished. + + + if deflated stream is invalid. + + + + + Sets the preset dictionary. This should only be called, if + needsDictionary() returns true and it should set the same + dictionary, that was used for deflating. The getAdler() + function returns the checksum of the dictionary needed. + + + The dictionary. + + + + + Sets the preset dictionary. This should only be called, if + needsDictionary() returns true and it should set the same + dictionary, that was used for deflating. The getAdler() + function returns the checksum of the dictionary needed. + + + The dictionary. + + + The index into buffer where the dictionary starts. + + + The number of bytes in the dictionary. + + + No dictionary is needed. + + + The adler checksum for the buffer is invalid + + + + + Sets the input. This should only be called, if needsInput() + returns true. + + + the input. + + + + + Sets the input. This should only be called, if needsInput() + returns true. + + + The source of input data + + + The index into buffer where the input starts. + + + The number of bytes of input to use. + + + No input is needed. + + + The index and/or count are wrong. + + + + + Inflates the compressed stream to the output buffer. If this + returns 0, you should check, whether IsNeedingDictionary(), + IsNeedingInput() or IsFinished() returns true, to determine why no + further output is produced. + + + the output buffer. + + + The number of bytes written to the buffer, 0 if no further + output can be produced. + + + if buffer has length 0. + + + if deflated stream is invalid. + + + + + Inflates the compressed stream to the output buffer. If this + returns 0, you should check, whether needsDictionary(), + needsInput() or finished() returns true, to determine why no + further output is produced. + + + the output buffer. + + + the offset in buffer where storing starts. + + + the maximum number of bytes to output. + + + the number of bytes written to the buffer, 0 if no further output can be produced. + + + if count is less than 0. + + + if the index and / or count are wrong. + + + if deflated stream is invalid. + + + + + Returns true, if the input buffer is empty. + You should then call setInput(). + NOTE: This method also returns true when the stream is finished. + + + + + Returns true, if a preset dictionary is needed to inflate the input. + + + + + Returns true, if the inflater has finished. This means, that no + input is needed and no output can be produced. + + + + + Gets the adler checksum. This is either the checksum of all + uncompressed bytes returned by inflate(), or if needsDictionary() + returns true (and thus no output was yet produced) this is the + adler checksum of the expected dictionary. + + + the adler checksum. + + + + + Gets the total number of output bytes returned by Inflate(). + + + the total number of output bytes. + + + + + Gets the total number of processed compressed input bytes. + + + The total number of bytes of processed input bytes. + + + + + Gets the number of unprocessed input bytes. Useful, if the end of the + stream is reached and you want to further process the bytes after + the deflate stream. + + + The number of bytes of the input which have not been processed. + + + + + Continue decoding header from until more bits are needed or decoding has been completed + + Returns whether decoding could be completed + + + + Get literal/length huffman tree, must not be used before has returned true + + If hader has not been successfully read by the state machine + + + + Get distance huffman tree, must not be used before has returned true + + If hader has not been successfully read by the state machine + + + + Huffman tree used for inflation + + + + + Literal length tree + + + + + Distance tree + + + + + Constructs a Huffman tree from the array of code lengths. + + + the array of code lengths + + + + + Reads the next symbol from input. The symbol is encoded using the + huffman tree. + + + input the input source. + + + the next symbol, or -1 if not enough input is available. + + + + + This class is general purpose class for writing data to a buffer. + + It allows you to write bits as well as bytes + Based on DeflaterPending.java + + author of the original java version : Jochen Hoenicke + + + + + Internal work buffer + + + + + construct instance using default buffer size of 4096 + + + + + construct instance using specified buffer size + + + size to use for internal buffer + + + + + Clear internal state/buffers + + + + + Write a byte to buffer + + + The value to write + + + + + Write a short value to buffer LSB first + + + The value to write. + + + + + write an integer LSB first + + The value to write. + + + + Write a block of data to buffer + + data to write + offset of first byte to write + number of bytes to write + + + + The number of bits written to the buffer + + + + + Align internal buffer on a byte boundary + + + + + Write bits to internal buffer + + source of bits + number of bits to write + + + + Write a short value to internal buffer most significant byte first + + value to write + + + + Indicates if buffer has been flushed + + + + + Flushes the pending buffer into the given output array. If the + output array is to small, only a partial flush is done. + + The output array. + The offset into output array. + The maximum number of bytes to store. + The number of bytes flushed. + + + + Convert internal buffer to byte array. + Buffer is empty on completion + + + The internal buffer contents converted to a byte array. + + + + + A special stream deflating or compressing the bytes that are + written to it. It uses a Deflater to perform actual deflating.
+ Authors of the original java version : Tom Tromey, Jochen Hoenicke +
+
+ + + Creates a new DeflaterOutputStream with a default Deflater and default buffer size. + + + the output stream where deflated output should be written. + + + + + Creates a new DeflaterOutputStream with the given Deflater and + default buffer size. + + + the output stream where deflated output should be written. + + + the underlying deflater. + + + + + Creates a new DeflaterOutputStream with the given Deflater and + buffer size. + + + The output stream where deflated output is written. + + + The underlying deflater to use + + + The buffer size in bytes to use when deflating (minimum value 512) + + + bufsize is less than or equal to zero. + + + baseOutputStream does not support writing + + + deflater instance is null + + + + + Finishes the stream by calling finish() on the deflater. + + + Not all input is deflated + + + + + Finishes the stream by calling finish() on the deflater. + + The that can be used to cancel the operation. + + Not all input is deflated + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Allows client to determine if an entry can be patched after its added + + + + + The CryptoTransform currently being used to encrypt the compressed data. + + + + + Returns the 10 byte AUTH CODE to be appended immediately following the AES data stream. + + + + + + + + Encrypt a block of data + + + Data to encrypt. NOTE the original contents of the buffer are lost + + + Offset of first byte in buffer to encrypt + + + Number of bytes in buffer to encrypt + + + + + Deflates everything in the input buffers. This will call + def.deflate() until all bytes from the input buffers + are processed. + + + + + Gets value indicating stream can be read from + + + + + Gets a value indicating if seeking is supported for this stream + This property always returns false + + + + + Get value indicating if this stream supports writing + + + + + Get current length of stream + + + + + Gets the current position within the stream. + + Any attempt to set position + + + + Sets the current position of this stream to the given value. Not supported by this class! + + The offset relative to the to seek. + The to seek from. + The new position in the stream. + Any access + + + + Sets the length of this stream to the given value. Not supported by this class! + + The new stream length. + Any access + + + + Read a byte from stream advancing position by one + + The byte read cast to an int. THe value is -1 if at the end of the stream. + Any access + + + + Read a block of bytes from stream + + The buffer to store read data in. + The offset to start storing at. + The maximum number of bytes to read. + The actual number of bytes read. Zero if end of stream is detected. + Any access + + + + Flushes the stream by calling Flush on the deflater and then + on the underlying stream. This ensures that all bytes are flushed. + + + + + + + + Calls and closes the underlying + stream when is true. + + + + + Get the Auth code for AES encrypted entries + + + + + Writes a single byte to the compressed output stream. + + + The byte value. + + + + + Writes bytes from an array to the compressed stream. + + + The byte array + + + The offset into the byte array where to start. + + + The number of bytes to write. + + + + + + + + This buffer is used temporarily to retrieve the bytes from the + deflater and write them to the underlying output stream. + + + + + The deflater which is used to deflate the stream. + + + + + Base stream the deflater depends on. + + + + + + + + An input buffer customised for use by + + + The buffer supports decryption of incoming data. + + + + + Initialise a new instance of with a default buffer size + + The stream to buffer. + + + + Initialise a new instance of + + The stream to buffer. + The size to use for the buffer + A minimum buffer size of 1KB is permitted. Lower sizes are treated as 1KB. + + + + Get the length of bytes in the + + + + + Get the contents of the raw data buffer. + + This may contain encrypted data. + + + + Get the number of useable bytes in + + + + + Get the contents of the clear text buffer. + + + + + Get/set the number of bytes available + + + + + Call passing the current clear text buffer contents. + + The inflater to set input for. + + + + Fill the buffer from the underlying input stream. + + + + + Read a buffer directly from the input stream + + The buffer to fill + Returns the number of bytes read. + + + + Read a buffer directly from the input stream + + The buffer to read into + The offset to start reading data into. + The number of bytes to read. + Returns the number of bytes read. + + + + Read clear text data from the input stream. + + The buffer to add data to. + The offset to start adding data at. + The number of bytes to read. + Returns the number of bytes actually read. + + + + Read a from the input stream. + + Returns the byte read. + + + + Read an in little endian byte order. + + The short value read case to an int. + + + + Read an in little endian byte order. + + The int value read. + + + + Read a in little endian byte order. + + The long value read. + + + + Get/set the to apply to any data. + + Set this value to null to have no transform applied. + + + + This filter stream is used to decompress data compressed using the "deflate" + format. The "deflate" format is described in RFC 1951. + + This stream may form the basis for other decompression filters, such + as the GZipInputStream. + + Author of the original java version : John Leuner. + + + + + Create an InflaterInputStream with the default decompressor + and a default buffer size of 4KB. + + + The InputStream to read bytes from + + + + + Create an InflaterInputStream with the specified decompressor + and a default buffer size of 4KB. + + + The source of input data + + + The decompressor used to decompress data read from baseInputStream + + + + + Create an InflaterInputStream with the specified decompressor + and the specified buffer size. + + + The InputStream to read bytes from + + + The decompressor to use + + + Size of the buffer to use + + + + + Gets or sets a flag indicating ownership of underlying stream. + When the flag is true will close the underlying stream also. + + The default value is true. + + + + Skip specified number of bytes of uncompressed data + + + Number of bytes to skip + + + The number of bytes skipped, zero if the end of + stream has been reached + + + The number of bytes to skip is less than or equal to zero. + + + + + Clear any cryptographic state. + + + + + Returns 0 once the end of the stream (EOF) has been reached. + Otherwise returns 1. + + + + + Fills the buffer with more data to decompress. + + + Stream ends early + + + + + Gets a value indicating whether the current stream supports reading + + + + + Gets a value of false indicating seeking is not supported for this stream. + + + + + Gets a value of false indicating that this stream is not writeable. + + + + + A value representing the length of the stream in bytes. + + + + + The current position within the stream. + Throws a NotSupportedException when attempting to set the position + + Attempting to set the position + + + + Flushes the baseInputStream + + + + + Sets the position within the current stream + Always throws a NotSupportedException + + The relative offset to seek to. + The defining where to seek from. + The new position in the stream. + Any access + + + + Set the length of the current stream + Always throws a NotSupportedException + + The new length value for the stream. + Any access + + + + Writes a sequence of bytes to stream and advances the current position + This method always throws a NotSupportedException + + The buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + Any access + + + + Writes one byte to the current stream and advances the current position + Always throws a NotSupportedException + + The byte to write. + Any access + + + + Closes the input stream. When + is true the underlying stream is also closed. + + + + + Reads decompressed data into the provided buffer byte array + + + The array to read and decompress data into + + + The offset indicating where the data should be placed + + + The number of bytes to decompress + + The number of bytes read. Zero signals the end of stream + + Inflater needs a dictionary + + + + + Decompressor for this stream + + + + + Input buffer for this stream. + + + + + Base stream the inflater reads from. + + + + + The compressed size + + + + + Flag indicating whether this instance has been closed or not. + + + + + Contains the output from the Inflation process. + We need to have a window so that we can refer backwards into the output stream + to repeat stuff.
+ Author of the original java version : John Leuner +
+
+ + + Write a byte to this output window + + value to write + + if window is full + + + + + Append a byte pattern already in the window itself + + length of pattern to copy + distance from end of window pattern occurs + + If the repeated data overflows the window + + + + + Copy from input manipulator to internal window + + source of data + length of data to copy + the number of bytes copied + + + + Copy dictionary to window + + source dictionary + offset of start in source dictionary + length of dictionary + + If window isnt empty + + + + + Get remaining unfilled space in window + + Number of bytes left in window + + + + Get bytes available for output in window + + Number of bytes filled + + + + Copy contents of window to output + + buffer to copy to + offset to start at + number of bytes to count + The number of bytes copied + + If a window underflow occurs + + + + + Reset by clearing window so GetAvailable returns 0 + + + + + This class allows us to retrieve a specified number of bits from + the input buffer, as well as copy big byte blocks. + + It uses an int buffer to store up to 31 bits for direct + manipulation. This guarantees that we can get at least 16 bits, + but we only need at most 15, so this is all safe. + + There are some optimizations in this class, for example, you must + never peek more than 8 bits more than needed, and you must first + peek bits before you may drop them. This is not a general purpose + class but optimized for the behaviour of the Inflater. + + authors of the original java version : John Leuner, Jochen Hoenicke + + + + + Get the next sequence of bits but don't increase input pointer. bitCount must be + less or equal 16 and if this call succeeds, you must drop + at least n - 8 bits in the next call. + + The number of bits to peek. + + the value of the bits, or -1 if not enough bits available. */ + + + + + Tries to grab the next bits from the input and + sets to the value, adding . + + true if enough bits could be read, otherwise false + + + + Tries to grab the next bits from the input and + sets of to the value. + + true if enough bits could be read, otherwise false + + + + Drops the next n bits from the input. You should have called PeekBits + with a bigger or equal n before, to make sure that enough bits are in + the bit buffer. + + The number of bits to drop. + + + + Gets the next n bits and increases input pointer. This is equivalent + to followed by , except for correct error handling. + + The number of bits to retrieve. + + the value of the bits, or -1 if not enough bits available. + + + + + Gets the number of bits available in the bit buffer. This must be + only called when a previous PeekBits() returned -1. + + + the number of bits available. + + + + + Gets the number of bytes available. + + + The number of bytes available. + + + + + Skips to the next byte boundary. + + + + + Returns true when SetInput can be called + + + + + Copies bytes from input buffer to output buffer starting + at output[offset]. You have to make sure, that the buffer is + byte aligned. If not enough bytes are available, copies fewer + bytes. + + + The buffer to copy bytes to. + + + The offset in the buffer at which copying starts + + + The length to copy, 0 is allowed. + + + The number of bytes copied, 0 if no bytes were available. + + + Length is less than zero + + + Bit buffer isnt byte aligned + + + + + Resets state and empties internal buffers + + + + + Add more input for consumption. + Only call when IsNeedingInput returns true + + data to be input + offset of first byte of input + number of bytes of input to add. + + + + FastZipEvents supports all events applicable to FastZip operations. + + + + + Delegate to invoke when processing directories. + + + + + Delegate to invoke when processing files. + + + + + Delegate to invoke during processing of files. + + + + + Delegate to invoke when processing for a file has been completed. + + + + + Delegate to invoke when processing directory failures. + + + + + Delegate to invoke when processing file failures. + + + + + Raise the directory failure event. + + The directory causing the failure. + The exception for this event. + A boolean indicating if execution should continue or not. + + + + Fires the file failure handler delegate. + + The file causing the failure. + The exception for this failure. + A boolean indicating if execution should continue or not. + + + + Fires the ProcessFile delegate. + + The file being processed. + A boolean indicating if execution should continue or not. + + + + Fires the delegate + + The file whose processing has been completed. + A boolean indicating if execution should continue or not. + + + + Fires the process directory delegate. + + The directory being processed. + Flag indicating if the directory has matching files as determined by the current filter. + A of true if the operation should continue; false otherwise. + + + + The minimum timespan between events. + + The minimum period of time between events. + + The default interval is three seconds. + + + + FastZip provides facilities for creating and extracting zip files. + + + + + Defines the desired handling when overwriting files during extraction. + + + + + Prompt the user to confirm overwriting + + + + + Never overwrite files. + + + + + Always overwrite files. + + + + + Initialise a default instance of . + + + + + Initialise a new instance of using the specified + + The time setting to use when creating or extracting Zip entries. + Using TimeSetting.LastAccessTime[Utc] when + creating an archive will set the file time to the moment of reading. + + + + + Initialise a new instance of using the specified + + The time to set all values for created or extracted Zip Entries. + + + + Initialise a new instance of + + The events to use during operations. + + + + Get/set a value indicating whether empty directories should be created. + + + + + Get / set the password value. + + + + + Get / set the method of encrypting entries. + + + Only applies when is set. + Defaults to ZipCrypto for backwards compatibility purposes. + + + + + Get or set the active when creating Zip files. + + + + + + Get or set the active when creating Zip files. + + + + + Gets or sets the setting for Zip64 handling when writing. + + + The default value is dynamic which is not backwards compatible with old + programs and can cause problems with XP's built in compression which cant + read Zip64 archives. However it does avoid the situation were a large file + is added and cannot be completed correctly. + NOTE: Setting the size for entries before they are added is the best solution! + By default the EntryFactory used by FastZip will set the file size. + + + + + Get/set a value indicating whether file dates and times should + be restored when extracting files from an archive. + + The default value is false. + + + + Get/set a value indicating whether file attributes should + be restored during extract operations + + + + + Get/set the Compression Level that will be used + when creating the zip + + + + + Reflects the opposite of the internal , setting it to false overrides the encoding used for reading and writing zip entries + + + + Gets or sets the code page used for reading/writing zip file entries when unicode is disabled + + + + + + + Delegate called when confirming overwriting of files. + + + + + Create a zip file. + + The name of the zip file to create. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + + + + Create a zip file/archive. + + The name of the zip file to create. + The directory to obtain files and directories from. + True to recurse directories, false for no recursion. + The file filter to apply. + + + + Create a zip archive sending output to the passed. + + The stream to write archive data to. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + The is closed after creation. + + + + Create a zip archive sending output to the passed. + + The stream to write archive data to. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + true to leave open after the zip has been created, false to dispose it. + + + + Create a zip file. + + The name of the zip file to create. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + + + + Create a zip archive sending output to the passed. + + The stream to write archive data to. + The directory to source files from. + True to recurse directories, false for no recursion. + The file filter to apply. + The directory filter to apply. + true to leave open after the zip has been created, false to dispose it. + + + + Create a zip archive sending output to the passed. + + The stream to write archive data to. + The directory to source files from. + True to recurse directories, false for no recursion. + For performing the actual file system scan + true to leave open after the zip has been created, false to dispose it. + The is closed after creation. + + + + Extract the contents of a zip file. + + The zip file to extract from. + The directory to save extracted information in. + A filter to apply to files. + + + + Extract the contents of a zip file. + + The zip file to extract from. + The directory to save extracted information in. + The style of overwriting to apply. + A delegate to invoke when confirming overwriting. + A filter to apply to files. + A filter to apply to directories. + Flag indicating whether to restore the date and time for extracted files. + Allow parent directory traversal in file paths (e.g. ../file) + + + + Extract the contents of a zip file held in a stream. + + The seekable input stream containing the zip to extract from. + The directory to save extracted information in. + The style of overwriting to apply. + A delegate to invoke when confirming overwriting. + A filter to apply to files. + A filter to apply to directories. + Flag indicating whether to restore the date and time for extracted files. + Flag indicating whether the inputStream will be closed by this method. + Allow parent directory traversal in file paths (e.g. ../file) + + + + Defines factory methods for creating new values. + + + + + Create a for a file given its name + + The name of the file to create an entry for. + Returns a file entry based on the passed. + + + + Create a for a file given its name + + The name of the file to create an entry for. + If true get details from the file system if the file exists. + Returns a file entry based on the passed. + + + + Create a for a file given its actual name and optional override name + + The name of the file to create an entry for. + An alternative name to be used for the new entry. Null if not applicable. + If true get details from the file system if the file exists. + Returns a file entry based on the passed. + + + + Create a for a directory given its name + + The name of the directory to create an entry for. + Returns a directory entry based on the passed. + + + + Create a for a directory given its name + + The name of the directory to create an entry for. + If true get details from the file system for this directory if it exists. + Returns a directory entry based on the passed. + + + + Get/set the applicable. + + + + + Get the in use. + + + + + Get the value to use when is set to , + or if not specified, the value of when the class was the initialized + + + + + WindowsNameTransform transforms names to windows compatible ones. + + + + + The maximum windows path name permitted. + + This may not valid for all windows systems - CE?, etc but I cant find the equivalent in the CLR. + + + + In this case we need Windows' invalid path characters. + Path.GetInvalidPathChars() only returns a subset invalid on all platforms. + + + + + Initialises a new instance of + + + Allow parent directory traversal in file paths (e.g. ../file) + + + + Initialise a default instance of + + + + + Gets or sets a value containing the target directory to prefix values with. + + + + + Allow parent directory traversal in file paths (e.g. ../file) + + + + + Gets or sets a value indicating whether paths on incoming values should be removed. + + + + + Transform a Zip directory name to a windows directory name. + + The directory name to transform. + The transformed name. + + + + Transform a Zip format file name to a windows style one. + + The file name to transform. + The transformed name. + + + + Test a name to see if it is a valid name for a windows filename as extracted from a Zip archive. + + The name to test. + Returns true if the name is a valid zip name; false otherwise. + The filename isnt a true windows path in some fundamental ways like no absolute paths, no rooted paths etc. + + + + Force a name to be valid by replacing invalid characters with a fixed value + + The name to make valid + The replacement character to use for any invalid characters. + Returns a valid name + + + + Gets or set the character to replace invalid characters during transformations. + + + + + Determines how entries are tested to see if they should use Zip64 extensions or not. + + + + + Zip64 will not be forced on entries during processing. + + An entry can have this overridden if required + + + + Zip64 should always be used. + + + + + #ZipLib will determine use based on entry values when added to archive. + + + + + The kind of compression used for an entry in an archive + + + + + A direct copy of the file contents is held in the archive + + + + + Common Zip compression method using a sliding dictionary + of up to 32KB and secondary compression from Huffman/Shannon-Fano trees + + + + + An extension to deflate with a 64KB window. Not supported by #Zip currently + + + + + BZip2 compression. Not supported by #Zip. + + + + + LZMA compression. Not supported by #Zip. + + + + + PPMd compression. Not supported by #Zip. + + + + + WinZip special for AES encryption, Now supported by #Zip. + + + + + Identifies the encryption algorithm used for an entry + + + + + No encryption has been used. + + + + + Encrypted using PKZIP 2.0 or 'classic' encryption. + + + + + DES encryption has been used. + + + + + RC2 encryption has been used for encryption. + + + + + Triple DES encryption with 168 bit keys has been used for this entry. + + + + + Triple DES with 112 bit keys has been used for this entry. + + + + + AES 128 has been used for encryption. + + + + + AES 192 has been used for encryption. + + + + + AES 256 has been used for encryption. + + + + + RC2 corrected has been used for encryption. + + + + + Blowfish has been used for encryption. + + + + + Twofish has been used for encryption. + + + + + RC4 has been used for encryption. + + + + + An unknown algorithm has been used for encryption. + + + + + Defines the contents of the general bit flags field for an archive entry. + + + + + Bit 0 if set indicates that the file is encrypted + + + + + Bits 1 and 2 - Two bits defining the compression method (only for Method 6 Imploding and 8,9 Deflating) + + + + + Bit 3 if set indicates a trailing data descriptor is appended to the entry data + + + + + Bit 4 is reserved for use with method 8 for enhanced deflation + + + + + Bit 5 if set indicates the file contains Pkzip compressed patched data. + Requires version 2.7 or greater. + + + + + Bit 6 if set indicates strong encryption has been used for this entry. + + + + + Bit 7 is currently unused + + + + + Bit 8 is currently unused + + + + + Bit 9 is currently unused + + + + + Bit 10 is currently unused + + + + + Bit 11 if set indicates the filename and + comment fields for this file must be encoded using UTF-8. + + + + + Bit 12 is documented as being reserved by PKware for enhanced compression. + + + + + Bit 13 if set indicates that values in the local header are masked to hide + their actual values, and the central directory is encrypted. + + + Used when encrypting the central directory contents. + + + + + Bit 14 is documented as being reserved for use by PKware + + + + + Bit 15 is documented as being reserved for use by PKware + + + + + Helpers for + + + + + This is equivalent of in .NET Core, but since the .NET FW + version is really slow (due to un-/boxing and reflection) we use this wrapper. + + + + + + + + This class contains constants used for Zip format files + + + + + The version made by field for entries in the central header when created by this library + + + This is also the Zip version for the library when comparing against the version required to extract + for an entry. See . + + + + + The version made by field for entries in the central header when created by this library + + + This is also the Zip version for the library when comparing against the version required to extract + for an entry. See ZipInputStream.CanDecompressEntry. + + + + + The minimum version required to support strong encryption + + + + + The minimum version required to support strong encryption + + + + + Version indicating AES encryption + + + + + The version required for Zip64 extensions (4.5 or higher) + + + + + The version required for BZip2 compression (4.6 or higher) + + + + + Size of local entry header (excluding variable length fields at end) + + + + + Size of local entry header (excluding variable length fields at end) + + + + + Size of Zip64 data descriptor + + + + + Size of data descriptor + + + + + Size of data descriptor + + + + + Size of central header entry (excluding variable fields) + + + + + Size of central header entry + + + + + Size of end of central record (excluding variable fields) + + + + + Size of end of central record (excluding variable fields) + + + + + Size of 'classic' cryptographic header stored before any entry data + + + + + Size of cryptographic header stored before entry data + + + + + The size of the Zip64 central directory locator. + + + + + Signature for local entry header + + + + + Signature for local entry header + + + + + Signature for spanning entry + + + + + Signature for spanning entry + + + + + Signature for temporary spanning entry + + + + + Signature for temporary spanning entry + + + + + Signature for data descriptor + + + This is only used where the length, Crc, or compressed size isnt known when the + entry is created and the output stream doesnt support seeking. + The local entry cannot be 'patched' with the correct values in this case + so the values are recorded after the data prefixed by this header, as well as in the central directory. + + + + + Signature for data descriptor + + + This is only used where the length, Crc, or compressed size isnt known when the + entry is created and the output stream doesnt support seeking. + The local entry cannot be 'patched' with the correct values in this case + so the values are recorded after the data prefixed by this header, as well as in the central directory. + + + + + Signature for central header + + + + + Signature for central header + + + + + Signature for Zip64 central file header + + + + + Signature for Zip64 central file header + + + + + Signature for Zip64 central directory locator + + + + + Signature for archive extra data signature (were headers are encrypted). + + + + + Central header digital signature + + + + + Central header digital signature + + + + + End of central directory record signature + + + + + End of central directory record signature + + + + + GeneralBitFlags helper extensions + + + + + Efficiently check if any of the flags are set without enum un-/boxing + + + + Returns whether any of flags are set + + + + Efficiently check if all the flags are set without enum un-/boxing + + + + Returns whether the flags are all set + + + + The method of encrypting entries when creating zip archives. + + + + + No encryption will be used. + + + + + Encrypt entries with ZipCrypto. + + + + + Encrypt entries with AES 128. + + + + + Encrypt entries with AES 256. + + + + + Defines known values for the property. + + + + + Host system = MSDOS + + + + + Host system = Amiga + + + + + Host system = Open VMS + + + + + Host system = Unix + + + + + Host system = VMCms + + + + + Host system = Atari ST + + + + + Host system = OS2 + + + + + Host system = Macintosh + + + + + Host system = ZSystem + + + + + Host system = Cpm + + + + + Host system = Windows NT + + + + + Host system = MVS + + + + + Host system = VSE + + + + + Host system = Acorn RISC + + + + + Host system = VFAT + + + + + Host system = Alternate MVS + + + + + Host system = BEOS + + + + + Host system = Tandem + + + + + Host system = OS400 + + + + + Host system = OSX + + + + + Host system = WinZIP AES + + + + + This class represents an entry in a zip archive. This can be a file + or a directory + ZipFile and ZipInputStream will give you instances of this class as + information about the members in an archive. ZipOutputStream + uses an instance of this class when creating an entry in a Zip file. +
+
Author of the original java version : Jochen Hoenicke +
+
+ + + Creates a zip entry with the given name. + + + The name for this entry. Can include directory components. + The convention for names is 'unix' style paths with relative names only. + There are with no device names and path elements are separated by '/' characters. + + + The name passed is null + + + + + Creates a zip entry with the given name and version required to extract + + + The name for this entry. Can include directory components. + The convention for names is 'unix' style paths with no device names and + path elements separated by '/' characters. This is not enforced see CleanName + on how to ensure names are valid if this is desired. + + + The minimum 'feature version' required this entry + + + The name passed is null + + + + + Initializes an entry with the given name and made by information + + Name for this entry + Version and HostSystem Information + Minimum required zip feature version required to extract this entry + Compression method for this entry. + Whether the entry uses unicode for name and comment + + The name passed is null + + + versionRequiredToExtract should be 0 (auto-calculate) or > 10 + + + This constructor is used by the ZipFile class when reading from the central header + It is not generally useful, use the constructor specifying the name only. + + + + + Creates a deep copy of the given zip entry. + + + The entry to copy. + + + + + Get a value indicating whether the entry has a CRC value available. + + + + + Get/Set flag indicating if entry is encrypted. + A simple helper routine to aid interpretation of flags + + This is an assistant that interprets the flags property. + + + + Get / set a flag indicating whether entry name and comment text are + encoded in unicode UTF8. + + This is an assistant that interprets the flags property. + + + + Value used during password checking for PKZIP 2.0 / 'classic' encryption. + + + + + Get/Set general purpose bit flag for entry + + + General purpose bit flag
+
+ Bit 0: If set, indicates the file is encrypted
+ Bit 1-2 Only used for compression type 6 Imploding, and 8, 9 deflating
+ Imploding:
+ Bit 1 if set indicates an 8K sliding dictionary was used. If clear a 4k dictionary was used
+ Bit 2 if set indicates 3 Shannon-Fanno trees were used to encode the sliding dictionary, 2 otherwise
+
+ Deflating:
+ Bit 2 Bit 1
+ 0 0 Normal compression was used
+ 0 1 Maximum compression was used
+ 1 0 Fast compression was used
+ 1 1 Super fast compression was used
+
+ Bit 3: If set, the fields crc-32, compressed size + and uncompressed size are were not able to be written during zip file creation + The correct values are held in a data descriptor immediately following the compressed data.
+ Bit 4: Reserved for use by PKZIP for enhanced deflating
+ Bit 5: If set indicates the file contains compressed patch data
+ Bit 6: If set indicates strong encryption was used.
+ Bit 7-10: Unused or reserved
+ Bit 11: If set the name and comments for this entry are in unicode.
+ Bit 12-15: Unused or reserved
+
+ + +
+ + + Get/Set index of this entry in Zip file + + This is only valid when the entry is part of a + + + + Get/set offset for use in central header + + + + + Get/Set external file attributes as an integer. + The values of this are operating system dependent see + HostSystem for details + + + + + Get the version made by for this entry or zero if unknown. + The value / 10 indicates the major version number, and + the value mod 10 is the minor version number + + + + + Get a value indicating this entry is for a DOS/Windows system. + + + + + Test the external attributes for this to + see if the external attributes are Dos based (including WINNT and variants) + and match the values + + The attributes to test. + Returns true if the external attributes are known to be DOS/Windows + based and have the same attributes set as the value passed. + + + + Gets the compatibility information for the external file attribute + If the external file attributes are compatible with MS-DOS and can be read + by PKZIP for DOS version 2.04g then this value will be zero. Otherwise the value + will be non-zero and identify the host system on which the attributes are compatible. + + + + The values for this as defined in the Zip File format and by others are shown below. The values are somewhat + misleading in some cases as they are not all used as shown. You should consult the relevant documentation + to obtain up to date and correct information. The modified appnote by the infozip group is + particularly helpful as it documents a lot of peculiarities. The document is however a little dated. + + 0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems) + 1 - Amiga + 2 - OpenVMS + 3 - Unix + 4 - VM/CMS + 5 - Atari ST + 6 - OS/2 HPFS + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - Windows NTFS + 11 - MVS (OS/390 - Z/OS) + 12 - VSE + 13 - Acorn Risc + 14 - VFAT + 15 - Alternate MVS + 16 - BeOS + 17 - Tandem + 18 - OS/400 + 19 - OS/X (Darwin) + 99 - WinZip AES + remainder - unused + + + + + + Get minimum Zip feature version required to extract this entry + + + Minimum features are defined as:
+ 1.0 - Default value
+ 1.1 - File is a volume label
+ 2.0 - File is a folder/directory
+ 2.0 - File is compressed using Deflate compression
+ 2.0 - File is encrypted using traditional encryption
+ 2.1 - File is compressed using Deflate64
+ 2.5 - File is compressed using PKWARE DCL Implode
+ 2.7 - File is a patch data set
+ 4.5 - File uses Zip64 format extensions
+ 4.6 - File is compressed using BZIP2 compression
+ 5.0 - File is encrypted using DES
+ 5.0 - File is encrypted using 3DES
+ 5.0 - File is encrypted using original RC2 encryption
+ 5.0 - File is encrypted using RC4 encryption
+ 5.1 - File is encrypted using AES encryption
+ 5.1 - File is encrypted using corrected RC2 encryption
+ 5.1 - File is encrypted using corrected RC2-64 encryption
+ 6.1 - File is encrypted using non-OAEP key wrapping
+ 6.2 - Central directory encryption (not confirmed yet)
+ 6.3 - File is compressed using LZMA
+ 6.3 - File is compressed using PPMD+
+ 6.3 - File is encrypted using Blowfish
+ 6.3 - File is encrypted using Twofish
+
+ +
+ + + Get a value indicating whether this entry can be decompressed by the library. + + This is based on the and + whether the compression method is supported. + + + + Force this entry to be recorded using Zip64 extensions. + + + + + Get a value indicating whether Zip64 extensions were forced. + + A value of true if Zip64 extensions have been forced on; false if not. + + + + Gets a value indicating if the entry requires Zip64 extensions + to store the full entry values. + + A value of true if a local header requires Zip64 extensions; false if not. + + + + Get a value indicating whether the central directory entry requires Zip64 extensions to be stored. + + + + + Get/Set DosTime value. + + + The MS-DOS date format can only represent dates between 1/1/1980 and 12/31/2107. + + + + + Gets/Sets the time of last modification of the entry. + + + The property is updated to match this as far as possible. + + + + + Returns the entry name. + + + The unix naming convention is followed. + Path components in the entry should always separated by forward slashes ('/'). + Dos device names like C: should also be removed. + See the class, or + + + + + Gets/Sets the size of the uncompressed data. + + + The size or -1 if unknown. + + Setting the size before adding an entry to an archive can help + avoid compatibility problems with some archivers which don't understand Zip64 extensions. + + + + Gets/Sets the size of the compressed data. + + + The compressed entry size or -1 if unknown. + + + + + Gets/Sets the crc of the uncompressed data. + + + Crc is not in the range 0..0xffffffffL + + + The crc value or -1 if unknown. + + + + + Gets/Sets the compression method. + + + The compression method for this entry + + + + + Gets the compression method for outputting to the local or central header. + Returns same value as CompressionMethod except when AES encrypting, which + places 99 in the method and places the real method in the extra data. + + + + + Gets/Sets the extra data. + + + Extra data is longer than 64KB (0xffff) bytes. + + + Extra data or null if not set. + + + + + For AES encrypted files returns or sets the number of bits of encryption (128, 192 or 256). + When setting, only 0 (off), 128 or 256 is supported. + + + + + AES Encryption strength for storage in extra data in entry header. + 1 is 128 bit, 2 is 192 bit, 3 is 256 bit. + + + + + Returns the length of the salt, in bytes + + Key size -> Salt length: 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes. + + + + Number of extra bytes required to hold the AES Header fields (Salt, Pwd verify, AuthCode) + + File format: + Bytes | Content + ---------+--------------------------- + Variable | Salt value + 2 | Password verification value + Variable | Encrypted file data + 10 | Authentication code + + + + Number of extra bytes required to hold the encryption header fields. + + + + + Process extra data fields updating the entry based on the contents. + + True if the extra data fields should be handled + for a local header, rather than for a central header. + + + + + Gets/Sets the entry comment. + + + If comment is longer than 0xffff. + + + The comment or null if not set. + + + A comment is only available for entries when read via the class. + The class doesn't have the comment data available. + + + + + Gets a value indicating if the entry is a directory. + however. + + + A directory is determined by an entry name with a trailing slash '/'. + The external file attributes can also indicate an entry is for a directory. + Currently only dos/windows attributes are tested in this manner. + The trailing slash convention should always be followed. + + + + + Get a value of true if the entry appears to be a file; false otherwise + + + This only takes account of DOS/Windows attributes. Other operating systems are ignored. + For linux and others the result may be incorrect. + + + + + Test entry to see if data can be extracted. + + Returns true if data can be extracted for this entry; false otherwise. + + + + Creates a copy of this zip entry. + + An that is a copy of the current instance. + + + + Gets a string representation of this ZipEntry. + + A readable textual representation of this + + + + Test a compression method to see if this library + supports extracting data compressed with that method + + The compression method to test. + Returns true if the compression method is supported; false otherwise + + + + Cleans a name making it conform to Zip file conventions. + Devices names ('c:\') and UNC share names ('\\server\share') are removed + and back slashes ('\') are converted to forward slashes ('/'). + Names are made relative by trimming leading slashes which is compatible + with the ZIP naming convention. + + The name to clean + The 'cleaned' name. + + The Zip name transform class is more flexible. + + + + + General ZipEntry helper extensions + + + + + Efficiently check if a flag is set without enum un-/boxing + + + + Returns whether the flag was set + + + + Efficiently set a flag without enum un-/boxing + + + + Whether the passed flag should be set (1) or cleared (0) + + + + Basic implementation of + + + + + Defines the possible values to be used for the . + + + + + Use the recorded LastWriteTime value for the file. + + + + + Use the recorded LastWriteTimeUtc value for the file + + + + + Use the recorded CreateTime value for the file. + + + + + Use the recorded CreateTimeUtc value for the file. + + + + + Use the recorded LastAccessTime value for the file. + + + + + Use the recorded LastAccessTimeUtc value for the file. + + + + + Use a fixed value. + + The actual value used can be + specified via the constructor or + using the with the setting set + to which will use the when this class was constructed. + The property can also be used to set this value. + + + + Initialise a new instance of the class. + + A default , and the LastWriteTime for files is used. + + + + Initialise a new instance of using the specified + + The time setting to use when creating Zip entries. + + + + Initialise a new instance of using the specified + + The time to set all values to. + + + + Get / set the to be used when creating new values. + + + Setting this property to null will cause a default name transform to be used. + + + + + Get / set the in use. + + + + + Get / set the value to use when is set to + + + + + A bitmask defining the attributes to be retrieved from the actual file. + + The default is to get all possible attributes from the actual file. + + + + A bitmask defining which attributes are to be set on. + + By default no attributes are set on. + + + + Get set a value indicating whether unicode text should be set on. + + + + + Make a new for a file. + + The name of the file to create a new entry for. + Returns a new based on the . + + + + Make a new for a file. + + The name of the file to create a new entry for. + If true entry detail is retrieved from the file system if the file exists. + Returns a new based on the . + + + + Make a new from a name. + + The name of the file to create a new entry for. + An alternative name to be used for the new entry. Null if not applicable. + If true entry detail is retrieved from the file system if the file exists. + Returns a new based on the . + + + + Make a new for a directory. + + The raw untransformed name for the new directory + Returns a new representing a directory. + + + + Make a new for a directory. + + The raw untransformed name for the new directory + If true entry detail is retrieved from the file system if the file exists. + Returns a new representing a directory. + + + + ZipException represents exceptions specific to Zip classes and code. + + + + + Initialise a new instance of . + + + + + Initialise a new instance of with its message string. + + A that describes the error. + + + + Initialise a new instance of . + + A that describes the error. + The that caused this exception. + + + + Initializes a new instance of the ZipException class with serialized data. + + + The System.Runtime.Serialization.SerializationInfo that holds the serialized + object data about the exception being thrown. + + + The System.Runtime.Serialization.StreamingContext that contains contextual information + about the source or destination. + + + + + ExtraData tagged value interface. + + + + + Get the ID for this tagged data value. + + + + + Set the contents of this instance from the data passed. + + The data to extract contents from. + The offset to begin extracting data from. + The number of bytes to extract. + + + + Get the data representing this instance. + + Returns the data for this instance. + + + + A raw binary tagged value + + + + + Initialise a new instance. + + The tag ID. + + + + Get the ID for this tagged data value. + + + + + Set the data from the raw values provided. + + The raw data to extract values from. + The index to start extracting values from. + The number of bytes available. + + + + Get the binary data representing this instance. + + The raw binary data representing this instance. + + + + Get /set the binary data representing this instance. + + The raw binary data representing this instance. + + + + The tag ID for this instance. + + + + + Class representing extended unix date time values. + + + + + Flags indicate which values are included in this instance. + + + + + The modification time is included + + + + + The access time is included + + + + + The create time is included. + + + + + Get the ID + + + + + Set the data from the raw values provided. + + The raw data to extract values from. + The index to start extracting values from. + The number of bytes available. + + + + Get the binary data representing this instance. + + The raw binary data representing this instance. + + + + Test a value to see if is valid and can be represented here. + + The value to test. + Returns true if the value is valid and can be represented; false if not. + The standard Unix time is a signed integer data type, directly encoding the Unix time number, + which is the number of seconds since 1970-01-01. + Being 32 bits means the values here cover a range of about 136 years. + The minimum representable time is 1901-12-13 20:45:52, + and the maximum representable time is 2038-01-19 03:14:07. + + + + + Get /set the Modification Time + + + + + + + Get / set the Access Time + + + + + + + Get / Set the Create Time + + + + + + + Get/set the values to include. + + + + + Class handling NT date time values. + + + + + Get the ID for this tagged data value. + + + + + Set the data from the raw values provided. + + The raw data to extract values from. + The index to start extracting values from. + The number of bytes available. + + + + Get the binary data representing this instance. + + The raw binary data representing this instance. + + + + Test a valuie to see if is valid and can be represented here. + + The value to test. + Returns true if the value is valid and can be represented; false if not. + + NTFS filetimes are 64-bit unsigned integers, stored in Intel + (least significant byte first) byte order. They determine the + number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch", + which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit + + + + + Get/set the last modification time. + + + + + Get /set the create time + + + + + Get /set the last access time. + + + + + A factory that creates tagged data instances. + + + + + Get data for a specific tag value. + + The tag ID to find. + The data to search. + The offset to begin extracting data from. + The number of bytes to extract. + The located value found, or null if not found. + + + + + A class to handle the extra data field for Zip entries + + + Extra data contains 0 or more values each prefixed by a header tag and length. + They contain zero or more bytes of actual data. + The data is held internally using a copy on write strategy. This is more efficient but + means that for extra data created by passing in data can have the values modified by the caller + in some circumstances. + + + + + Initialise a default instance. + + + + + Initialise with known extra data. + + The extra data. + + + + Get the raw extra data value + + Returns the raw byte[] extra data this instance represents. + + + + Clear the stored data. + + + + + Gets the current extra data length. + + + + + Get a read-only for the associated tag. + + The tag to locate data for. + Returns a containing tag data or null if no tag was found. + + + + Get the tagged data for a tag. + + The tag to search for. + Returns a tagged value or null if none found. + + + + Get the length of the last value found by + + This is only valid if has previously returned true. + + + + Get the index for the current read value. + + This is only valid if has previously returned true. + Initially the result will be the index of the first byte of actual data. The value is updated after calls to + , and . + + + + Get the number of bytes remaining to be read for the current value; + + + + + Find an extra data value + + The identifier for the value to find. + Returns true if the value was found; false otherwise. + + + + Add a new entry to extra data. + + The value to add. + + + + Add a new entry to extra data + + The ID for this entry. + The data to add. + If the ID already exists its contents are replaced. + + + + Start adding a new entry. + + Add data using , , , or . + The new entry is completed and actually added by calling + + + + + Add entry data added since using the ID passed. + + The identifier to use for this entry. + + + + Add a byte of data to the pending new entry. + + The byte to add. + + + + + Add data to a pending new entry. + + The data to add. + + + + + Add a short value in little endian order to the pending new entry. + + The data to add. + + + + + Add an integer value in little endian order to the pending new entry. + + The data to add. + + + + + Add a long value in little endian order to the pending new entry. + + The data to add. + + + + + Delete an extra data field. + + The identifier of the field to delete. + Returns true if the field was found and deleted. + + + + Read a long in little endian form from the last found data value + + Returns the long value read. + + + + Read an integer in little endian form from the last found data value. + + Returns the integer read. + + + + Read a short value in little endian form from the last found data value. + + Returns the short value read. + + + + Read a byte from an extra data + + The byte value read or -1 if the end of data has been reached. + + + + Skip data during reading. + + The number of bytes to skip. + + + + Internal form of that reads data at any location. + + Returns the short value read. + + + + Dispose of this instance. + + + + + Arguments used with KeysRequiredEvent + + + + + Initialise a new instance of + + The name of the file for which keys are required. + + + + Initialise a new instance of + + The name of the file for which keys are required. + The current key value. + + + + Gets the name of the file for which keys are required. + + + + + Gets or sets the key value + + + + + The strategy to apply to testing. + + + + + Find the first error only. + + + + + Find all possible errors. + + + + + The operation in progress reported by a during testing. + + TestArchive + + + + Setting up testing. + + + + + Testing an individual entries header + + + + + Testing an individual entries data + + + + + Testing an individual entry has completed. + + + + + Running miscellaneous tests + + + + + Testing is complete + + + + + Status returned by during testing. + + TestArchive + + + + Initialise a new instance of + + The this status applies to. + + + + Get the current in progress. + + + + + Get the this status is applicable to. + + + + + Get the current/last entry tested. + + + + + Get the number of errors detected so far. + + + + + Get the number of bytes tested so far for the current entry. + + + + + Get a value indicating whether the last entry test was valid. + + + + + Delegate invoked during testing if supplied indicating current progress and status. + + If the message is non-null an error has occured. If the message is null + the operation as found in status has started. + + + + The possible ways of applying updates to an archive. + + + + + Perform all updates on temporary files ensuring that the original file is saved. + + + + + Update the archive directly, which is faster but less safe. + + + + + This class represents a Zip archive. You can ask for the contained + entries, or get an input stream for a file entry. The entry is + automatically decompressed. + + You can also update the archive adding or deleting entries. + + This class is thread safe for input: You can open input streams for arbitrary + entries in different threads. +
+
Author of the original java version : Jochen Hoenicke +
+ + + using System; + using System.Text; + using System.Collections; + using System.IO; + + using ICSharpCode.SharpZipLib.Zip; + + class MainClass + { + static public void Main(string[] args) + { + using (ZipFile zFile = new ZipFile(args[0])) { + Console.WriteLine("Listing of : " + zFile.Name); + Console.WriteLine(""); + Console.WriteLine("Raw Size Size Date Time Name"); + Console.WriteLine("-------- -------- -------- ------ ---------"); + foreach (ZipEntry e in zFile) { + if ( e.IsFile ) { + DateTime d = e.DateTime; + Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize, + d.ToString("dd-MM-yy"), d.ToString("HH:mm"), + e.Name); + } + } + } + } + } + + +
+ + + Delegate for handling keys/password setting during compression/decompression. + + + + + Event handler for handling encryption keys. + + + + + Handles getting of encryption keys when required. + + The file for which encryption keys are required. + + + + Get/set the encryption key value. + + + + + Password to be used for encrypting/decrypting files. + + Set to null if no password is required. + + + + Get a value indicating whether encryption keys are currently available. + + + + + Opens a Zip file with the given name for reading. + + The name of the file to open. + + The argument supplied is null. + + An i/o error occurs + + + The file doesn't contain a valid zip archive. + + + + + Opens a Zip file reading the given . + + The to read archive data from. + The supplied argument is null. + + An i/o error occurs. + + + The file doesn't contain a valid zip archive. + + + + + Opens a Zip file reading the given . + + The to read archive data from. + true to leave the file open when the ZipFile is disposed, false to dispose of it + The supplied argument is null. + + An i/o error occurs. + + + The file doesn't contain a valid zip archive. + + + + + Opens a Zip file reading the given . + + The to read archive data from. + + An i/o error occurs + + + The stream doesn't contain a valid zip archive.
+
+ + The stream doesnt support seeking. + + + The stream argument is null. + +
+ + + Opens a Zip file reading the given . + + The to read archive data from. + true to leave the stream open when the ZipFile is disposed, false to dispose of it + + + An i/o error occurs + + + The stream doesn't contain a valid zip archive.
+
+ + The stream doesnt support seeking. + + + The stream argument is null. + +
+ + + Initialises a default instance with no entries and no file storage. + + + + + Finalize this instance. + + + + + Closes the ZipFile. If the stream is owned then this also closes the underlying input stream. + Once closed, no further instance methods should be called. + + + An i/o error occurs. + + + + + Create a new whose data will be stored in a file. + + The name of the archive to create. + Returns the newly created + is null + + + + Create a new whose data will be stored on a stream. + + The stream providing data storage. + Returns the newly created + is null + doesnt support writing. + + + + Get/set a flag indicating if the underlying stream is owned by the ZipFile instance. + If the flag is true then the stream will be closed when Close is called. + + + The default value is true in all cases. + + + + + Get a value indicating whether + this archive is embedded in another file or not. + + + + + Get a value indicating that this archive is a new one. + + + + + Gets the comment for the zip file. + + + + + Gets the name of this zip file. + + + + + Gets the number of entries in this zip file. + + + The Zip file has been closed. + + + + + Get the number of entries contained in this . + + + + + Indexer property for ZipEntries + + + + + + + + + + + Gets an enumerator for the Zip entries in this Zip file. + + Returns an for this archive. + + The Zip file has been closed. + + + + + Return the index of the entry with a matching name + + Entry name to find + If true the comparison is case insensitive + The index position of the matching entry or -1 if not found + + The Zip file has been closed. + + + + + Searches for a zip entry in this archive with the given name. + String comparisons are case insensitive + + + The name to find. May contain directory components separated by slashes ('/'). + + + A clone of the zip entry, or null if no entry with that name exists. + + + The Zip file has been closed. + + + + + Gets an input stream for reading the given zip entry data in an uncompressed form. + Normally the should be an entry returned by GetEntry(). + + The to obtain a data for + An input containing data for this + + The ZipFile has already been closed + + + The compression method for the entry is unknown + + + The entry is not found in the ZipFile + + + + + Creates an input stream reading a zip entry + + The index of the entry to obtain an input stream for. + + An input containing data for this + + + The ZipFile has already been closed + + + The compression method for the entry is unknown + + + The entry is not found in the ZipFile + + + + + Test an archive for integrity/validity + + Perform low level data Crc check + true if all tests pass, false otherwise + Testing will terminate on the first error found. + + + + Test an archive for integrity/validity + + Perform low level data Crc check + The to apply. + The handler to call during testing. + true if all tests pass, false otherwise + The object has already been closed. + + + + Test a local header against that provided from the central directory + + + The entry to test against + + The type of tests to carry out. + The offset of the entries data in the file + + + + The kind of update to apply. + + + + + Get / set the to apply to names when updating. + + + + + Get/set the used to generate values + during updates. + + + + + Get /set the buffer size to be used when updating this zip file. + + + + + Get a value indicating an update has been started. + + + + + Get / set a value indicating how Zip64 Extension usage is determined when adding entries. + + + + + Begin updating this archive. + + The archive storage for use during the update. + The data source to utilise during updating. + ZipFile has been closed. + One of the arguments provided is null + ZipFile has been closed. + + + + Begin updating to this archive. + + The storage to use during the update. + + + + Begin updating this archive. + + + + + + + + Commit current updates, updating this archive. + + + + ZipFile has been closed. + + + + Abort updating leaving the archive unchanged. + + + + + + + Set the file comment to be recorded when the current update is commited. + + The comment to record. + ZipFile has been closed. + + + + Add a new entry to the archive. + + The name of the file to add. + The compression method to use. + Ensure Unicode text is used for name and comment for this entry. + Argument supplied is null. + ZipFile has been closed. + Compression method is not supported for creating entries. + + + + Add a new entry to the archive. + + The name of the file to add. + The compression method to use. + ZipFile has been closed. + Compression method is not supported for creating entries. + + + + Add a file to the archive. + + The name of the file to add. + Argument supplied is null. + + + + Add a file to the archive. + + The name of the file to add. + The name to use for the on the Zip file created. + Argument supplied is null. + + + + Add a file entry with data. + + The source of the data for this entry. + The name to give to the entry. + + + + Add a file entry with data. + + The source of the data for this entry. + The name to give to the entry. + The compression method to use. + Compression method is not supported for creating entries. + + + + Add a file entry with data. + + The source of the data for this entry. + The name to give to the entry. + The compression method to use. + Ensure Unicode text is used for name and comments for this entry. + Compression method is not supported for creating entries. + + + + Add a that contains no data. + + The entry to add. + This can be used to add directories, volume labels, or empty file entries. + + + + Add a with data. + + The source of the data for this entry. + The entry to add. + This can be used to add file entries with a custom data source. + + The encryption method specified in is unsupported. + + Compression method is not supported for creating entries. + + + + Add a directory entry to the archive. + + The directory to add. + + + + Check if the specified compression method is supported for adding a new entry. + + The compression method for the new entry. + + + + Delete an entry by name + + The filename to delete + True if the entry was found and deleted; false otherwise. + + + + Delete a from the archive. + + The entry to delete. + + + + Write an unsigned short in little endian byte order. + + + + + Write an int in little endian byte order. + + + + + Write an unsigned int in little endian byte order. + + + + + Write a long in little endian byte order. + + + + + Get a raw memory buffer. + + Returns a raw memory buffer. + + + + Get the size of the source descriptor for a . + + The update to get the size for. + Whether to include the signature size + The descriptor size, zero if there isn't one. + + + + Get an output stream for the specified + + The entry to get an output stream for. + The output stream obtained for the entry. + + + + Class used to sort updates. + + + + + Compares two objects and returns a value indicating whether one is + less than, equal to or greater than the other. + + First object to compare + Second object to compare. + Compare result. + + + + Represents a pending update to a Zip file. + + + + + Copy an existing entry. + + The existing entry to copy. + + + + Get the for this update. + + This is the source or original entry. + + + + Get the that will be written to the updated/new file. + + + + + Get the command for this update. + + + + + Get the filename if any for this update. Null if none exists. + + + + + Get/set the location of the size patch for this update. + + + + + Get /set the location of the crc patch for this update. + + + + + Get/set the size calculated by offset. + Specifically, the difference between this and next entry's starting offset. + + + + + Releases the unmanaged resources used by the this instance and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + + + Read an unsigned short in little endian byte order. + + Returns the value read. + + The stream ends prematurely + + + + + Read a uint in little endian byte order. + + Returns the value read. + + An i/o error occurs. + + + The file ends prematurely + + + + + Search for and read the central directory of a zip file filling the entries array. + + + An i/o error occurs. + + + The central directory is malformed or cannot be found + + + + + Locate the data for a given entry. + + + The start offset of the data. + + + The stream ends prematurely + + + The local header signature is invalid, the entry and central header file name lengths are different + or the local and entry compression methods dont match + + + + + Skip the verification of the local header when reading an archive entry. Set this to attempt to read the + entries even if the headers should indicate that doing so would fail or produce an unexpected output. + + + + + Represents a string from a which is stored as an array of bytes. + + + + + Initialise a with a string. + + The textual string form. + + + + + Initialise a using a string in its binary 'raw' form. + + + + + + + Get a value indicating the original source of data for this instance. + True if the source was a string; false if the source was binary data. + + + + + Get the length of the comment when represented as raw bytes. + + + + + Get the comment in its 'raw' form as plain bytes. + + + + + Reset the comment to its initial state. + + + + + Implicit conversion of comment to a string. + + The to convert to a string. + The textual equivalent for the input value. + + + + An enumerator for Zip entries + + + + + An is a stream that you can write uncompressed data + to and flush, but cannot read, seek or do anything else to. + + + + + Gets a value indicating whether the current stream supports reading. + + + + + Write any buffered data to underlying storage. + + + + + Gets a value indicating whether the current stream supports writing. + + + + + Gets a value indicating whether the current stream supports seeking. + + + + + Get the length in bytes of the stream. + + + + + Gets or sets the position within the current stream. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. + + The sum of offset and count is larger than the buffer length. + Methods were called after the stream was closed. + The stream does not support reading. + buffer is null. + An I/O error occurs. + offset or count is negative. + + + + Sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type indicating the reference point used to obtain the new position. + + The new position within the current stream. + + An I/O error occurs. + The stream does not support seeking, such as if the stream is constructed from a pipe or console output. + Methods were called after the stream was closed. + + + + Sets the length of the current stream. + + The desired length of the current stream in bytes. + The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. + An I/O error occurs. + Methods were called after the stream was closed. + + + + Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + An I/O error occurs. + The stream does not support writing. + Methods were called after the stream was closed. + buffer is null. + The sum of offset and count is greater than the buffer length. + offset or count is negative. + + + + A is an + whose data is only a part or subsection of a file. + + + + + Initialise a new instance of the class. + + The containing the underlying stream to use for IO. + The start of the partial data. + The length of the partial data. + + + + Read a byte from this stream. + + Returns the byte read or -1 on end of stream. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. + The zero-based byte offset in buffer at which to begin storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. + + The sum of offset and count is larger than the buffer length. + Methods were called after the stream was closed. + The stream does not support reading. + buffer is null. + An I/O error occurs. + offset or count is negative. + + + + Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + An I/O error occurs. + The stream does not support writing. + Methods were called after the stream was closed. + buffer is null. + The sum of offset and count is greater than the buffer length. + offset or count is negative. + + + + When overridden in a derived class, sets the length of the current stream. + + The desired length of the current stream in bytes. + The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. + An I/O error occurs. + Methods were called after the stream was closed. + + + + When overridden in a derived class, sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type indicating the reference point used to obtain the new position. + + The new position within the current stream. + + An I/O error occurs. + The stream does not support seeking, such as if the stream is constructed from a pipe or console output. + Methods were called after the stream was closed. + + + + Clears all buffers for this stream and causes any buffered data to be written to the underlying device. + + An I/O error occurs. + + + + Gets or sets the position within the current stream. + + + The current position within the stream. + An I/O error occurs. + The stream does not support seeking. + Methods were called after the stream was closed. + + + + Gets the length in bytes of the stream. + + + A long value representing the length of the stream in bytes. + A class derived from Stream does not support seeking. + Methods were called after the stream was closed. + + + + Gets a value indicating whether the current stream supports writing. + + false + true if the stream supports writing; otherwise, false. + + + + Gets a value indicating whether the current stream supports seeking. + + true + true if the stream supports seeking; otherwise, false. + + + + Gets a value indicating whether the current stream supports reading. + + true. + true if the stream supports reading; otherwise, false. + + + + Gets a value that determines whether the current stream can time out. + + + A value that determines whether the current stream can time out. + + + + Provides a static way to obtain a source of data for an entry. + + + + + Get a source of data by creating a new stream. + + Returns a to use for compression input. + Ideally a new stream is created and opened to achieve this, to avoid locking problems. + + + + Represents a source of data that can dynamically provide + multiple data sources based on the parameters passed. + + + + + Get a data source. + + The to get a source for. + The name for data if known. + Returns a to use for compression input. + Ideally a new stream is created and opened to achieve this, to avoid locking problems. + + + + Default implementation of a for use with files stored on disk. + + + + + Initialise a new instance of + + The name of the file to obtain data from. + + + + Get a providing data. + + Returns a providing data. + + + + Default implementation of for files stored on disk. + + + + + Get a providing data for an entry. + + The entry to provide data for. + The file name for data if known. + Returns a stream providing data; or null if not available + + + + Defines facilities for data storage when updating Zip Archives. + + + + + Get the to apply during updates. + + + + + Get an empty that can be used for temporary output. + + Returns a temporary output + + + + + Convert a temporary output stream to a final stream. + + The resulting final + + + + + Make a temporary copy of the original stream. + + The to copy. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The current stream. + Returns a stream suitable for direct updating. + This may be the current stream passed. + + + + Dispose of this instance. + + + + + An abstract suitable for extension by inheritance. + + + + + Initializes a new instance of the class. + + The update mode. + + + + Gets a temporary output + + Returns the temporary output stream. + + + + + Converts the temporary to its final form. + + Returns a that can be used to read + the final storage for the archive. + + + + + Make a temporary copy of a . + + The to make a copy of. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The to open for direct update. + Returns a stream suitable for direct updating. + + + + Disposes this instance. + + + + + Gets the update mode applicable. + + The update mode. + + + + An implementation suitable for hard disks. + + + + + Initializes a new instance of the class. + + The file. + The update mode. + + + + Initializes a new instance of the class. + + The file. + + + + Gets a temporary output for performing updates on. + + Returns the temporary output stream. + + + + Converts a temporary to its final form. + + Returns a that can be used to read + the final storage for the archive. + + + + Make a temporary copy of a stream. + + The to copy. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The current stream. + Returns a stream suitable for direct updating. + If the is not null this is used as is. + + + + Disposes this instance. + + + + + An implementation suitable for in memory streams. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The to use + This constructor is for testing as memory streams dont really require safe mode. + + + + Get the stream returned by if this was in fact called. + + + + + Gets the temporary output + + Returns the temporary output stream. + + + + Converts the temporary to its final form. + + Returns a that can be used to read + the final storage for the archive. + + + + Make a temporary copy of the original stream. + + The to copy. + Returns a temporary output that is a copy of the input. + + + + Return a stream suitable for performing direct updates on the original source. + + The original source stream + Returns a stream suitable for direct updating. + If the passed is not null this is used; + otherwise a new is returned. + + + + Disposes this instance. + + + + + Holds data pertinent to a data descriptor. + + + + + Get /set the compressed size of data. + + + + + Get / set the uncompressed size of data + + + + + Get /set the crc value. + + + + + This class assists with writing/reading from Zip files. + + + + + Locates a block with the desired . + + + The signature to find. + Location, marking the end of block. + Minimum size of the block. + The maximum variable data. + Returns the offset of the first byte after the signature; -1 if not found + + + + + + + Write Zip64 end of central directory records (File header and locator). + + + The number of entries in the central directory. + The size of entries in the central directory. + The offset of the central directory. + + + + + + + Write the required records to end the central directory. + + + The number of entries in the directory. + The size of the entries in the directory. + The start of the central directory. + The archive comment. (This can be null). + + + + Write a data descriptor. + + + The entry to write a descriptor for. + Returns the number of descriptor bytes written. + + + + Read data descriptor at the end of compressed data. + + + if set to true [zip64]. + The data to fill in. + Returns the number of bytes read in the descriptor. + + + + This is an InflaterInputStream that reads the files baseInputStream an zip archive + one after another. It has a special method to get the zip entry of + the next file. The zip entry contains information about the file name + size, compressed size, Crc, etc. + It includes support for Stored and Deflated entries. +
+
Author of the original java version : Jochen Hoenicke +
+ + This sample shows how to read a zip file + + using System; + using System.Text; + using System.IO; + + using ICSharpCode.SharpZipLib.Zip; + + class MainClass + { + public static void Main(string[] args) + { + using ( ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { + + ZipEntry theEntry; + const int size = 2048; + byte[] data = new byte[2048]; + + while ((theEntry = s.GetNextEntry()) != null) { + if ( entry.IsFile ) { + Console.Write("Show contents (y/n) ?"); + if (Console.ReadLine() == "y") { + while (true) { + size = s.Read(data, 0, data.Length); + if (size > 0) { + Console.Write(new ASCIIEncoding().GetString(data, 0, size)); + } else { + break; + } + } + } + } + } + } + } + } + + +
+ + + Delegate for reading bytes from a stream. + + + + + The current reader this instance. + + + + + Creates a new Zip input stream, for reading a zip archive. + + The underlying providing data. + + + + Creates a new Zip input stream, for reading a zip archive. + + The underlying providing data. + Size of the buffer. + + + + Creates a new Zip input stream, for reading a zip archive. + + The underlying providing data. + + + + + Optional password used for encryption when non-null + + A password for all encrypted entries in this + + + + Gets a value indicating if there is a current entry and it can be decompressed + + + The entry can only be decompressed if the library supports the zip features required to extract it. + See the ZipEntry Version property for more details. + + Since uses the local headers for extraction, entries with no compression combined with the + flag set, cannot be extracted as the end of the entry data cannot be deduced. + + + + + Is the compression method for the specified entry supported? + + + Uses entry.CompressionMethodForHeader so that entries of type WinZipAES will be rejected. + + the entry to check. + true if the compression method is supported, false if not. + + + + Advances to the next entry in the archive + + + The next entry in the archive or null if there are no more entries. + + + If the previous entry is still open CloseEntry is called. + + + Input stream is closed + + + Password is not set, password is invalid, compression method is invalid, + version required to extract is not supported + + + + + Reads bytes from the input stream until either a local file header signature, or another signature + indicating that no more entries should be present, is found. + + Thrown if the end of the input stream is reached without any signatures found + Returns whether the found signature is for a local entry header + + + + Read data descriptor at the end of compressed data. + + + + + Complete cleanup as the final part of closing. + + True if the crc value should be tested + + + + Closes the current zip entry and moves to the next one. + + + The stream is closed + + + The Zip stream ends early + + + + + Returns 1 if there is an entry available + Otherwise returns 0. + + + + + Returns the current size that can be read from the current entry if available + + Thrown if the entry size is not known. + Thrown if no entry is currently available. + + + + Reads a byte from the current zip entry. + + + The byte or -1 if end of stream is reached. + + + + + Handle attempts to read by throwing an . + + The destination array to store data in. + The offset at which data read should be stored. + The maximum number of bytes to read. + Returns the number of bytes actually read. + + + + Handle attempts to read from this entry by throwing an exception + + + + + Handle attempts to read from this entry by throwing an exception + + + + + Perform the initial read on an entry which may include + reading encryption headers and setting up inflation. + + The destination to fill with data read. + The offset to start reading at. + The maximum number of bytes to read. + The actual number of bytes read. + + + + Read a block of bytes from the stream. + + The destination for the bytes. + The index to start storing data. + The number of bytes to attempt to read. + Returns the number of bytes read. + Zero bytes read means end of stream. + + + + Reads a block of bytes from the current zip entry. + + + The number of bytes read (this may be less than the length requested, even before the end of stream), or 0 on end of stream. + + + An i/o error occurred. + + + The deflated stream is corrupted. + + + The stream is not open. + + + + + Closes the zip input stream + + + + + ZipNameTransform transforms names as per the Zip file naming convention. + + The use of absolute names is supported although its use is not valid + according to Zip naming conventions, and should not be used if maximum compatability is desired. + + + + Initialize a new instance of + + + + + Initialize a new instance of + + The string to trim from the front of paths if found. + + + + Static constructor. + + + + + Transform a windows directory name according to the Zip file naming conventions. + + The directory name to transform. + The transformed name. + + + + Transform a windows file name according to the Zip file naming conventions. + + The file name to transform. + The transformed name. + + + + Get/set the path prefix to be trimmed from paths if present. + + The prefix is trimmed before any conversion from + a windows path is done. + + + + Force a name to be valid by replacing invalid characters with a fixed value + + The name to force valid + The replacement character to use. + Returns a valid name + + + + Test a name to see if it is a valid name for a zip entry. + + The name to test. + If true checking is relaxed about windows file names and absolute paths. + Returns true if the name is a valid zip name; false otherwise. + Zip path names are actually in Unix format, and should only contain relative paths. + This means that any path stored should not contain a drive or + device letter, or a leading slash. All slashes should forward slashes '/'. + An empty name is valid for a file where the input comes from standard input. + A null name is not considered valid. + + + + + Test a name to see if it is a valid name for a zip entry. + + The name to test. + Returns true if the name is a valid zip name; false otherwise. + Zip path names are actually in unix format, + and should only contain relative paths if a path is present. + This means that the path stored should not contain a drive or + device letter, or a leading slash. All slashes should forward slashes '/'. + An empty name is valid where the input comes from standard input. + A null name is not considered valid. + + + + + An implementation of INameTransform that transforms entry paths as per the Zip file naming convention. + Strips path roots and puts directory separators in the correct format ('/') + + + + + Initialize a new instance of + + + + + Transform a windows directory name according to the Zip file naming conventions. + + The directory name to transform. + The transformed name. + + + + Transform a windows file name according to the Zip file naming conventions. + + The file name to transform. + The transformed name. + + + + This is a DeflaterOutputStream that writes the files into a zip + archive one after another. It has a special method to start a new + zip entry. The zip entries contains information about the file name + size, compressed size, CRC, etc. + + It includes support for Stored and Deflated entries. + This class is not thread safe. +
+
Author of the original java version : Jochen Hoenicke +
+ This sample shows how to create a zip file + + using System; + using System.IO; + + using ICSharpCode.SharpZipLib.Core; + using ICSharpCode.SharpZipLib.Zip; + + class MainClass + { + public static void Main(string[] args) + { + string[] filenames = Directory.GetFiles(args[0]); + byte[] buffer = new byte[4096]; + + using ( ZipOutputStream s = new ZipOutputStream(File.Create(args[1])) ) { + + s.SetLevel(9); // 0 - store only to 9 - means best compression + + foreach (string file in filenames) { + ZipEntry entry = new ZipEntry(file); + s.PutNextEntry(entry); + + using (FileStream fs = File.OpenRead(file)) { + StreamUtils.Copy(fs, s, buffer); + } + } + } + } + } + + +
+ + + Creates a new Zip output stream, writing a zip archive. + + + The output stream to which the archive contents are written. + + + + + Creates a new Zip output stream, writing a zip archive. + + The output stream to which the archive contents are written. + Size of the buffer to use. + + + + Creates a new Zip output stream, writing a zip archive. + + The output stream to which the archive contents are written. + + + + + Gets a flag value of true if the central header has been added for this archive; false if it has not been added. + + No further entries can be added once this has been done. + + + + Set the zip file comment. + + + The comment text for the entire archive. + + + The converted comment is longer than 0xffff bytes. + + + + + Sets the compression level. The new level will be activated + immediately. + + The new compression level (1 to 9). + + Level specified is not supported. + + + + + + Get the current deflater compression level + + The current compression level + + + + Get / set a value indicating how Zip64 Extension usage is determined when adding entries. + + Older archivers may not understand Zip64 extensions. + If backwards compatability is an issue be careful when adding entries to an archive. + Setting this property to off is workable but less desirable as in those circumstances adding a file + larger then 4GB will fail. + + + + Used for transforming the names of entries added by . + Defaults to , set to null to disable transforms and use names as supplied. + + + + + Get/set the password used for encryption. + + When set to null or if the password is empty no encryption is performed + + + + Write an unsigned short in little endian byte order. + + + + + Write an int in little endian byte order. + + + + + Write an int in little endian byte order. + + + + + Starts a new Zip entry. It automatically closes the previous + entry if present. + All entry elements bar name are optional, but must be correct if present. + If the compression method is stored and the output is not patchable + the compression for that entry is automatically changed to deflate level 0 + + + the entry. + + + if entry passed is null. + + + if an I/O error occurred. + + + if stream was finished + + + Too many entries in the Zip file
+ Entry name is too long
+ Finish has already been called
+
+ + The Compression method specified for the entry is unsupported. + +
+ + + Starts a new passthrough Zip entry. It automatically closes the previous + entry if present. + Passthrough entry is an entry that is created from compressed data. + It is useful to avoid recompression to save CPU resources if compressed data is already disposable. + All entry elements bar name, crc, size and compressed size are optional, but must be correct if present. + Compression should be set to Deflated. + + + the entry. + + + if entry passed is null. + + + if an I/O error occurred. + + + if stream was finished. + + + Crc is not set
+ Size is not set
+ CompressedSize is not set
+ CompressionMethod is not Deflate
+ Too many entries in the Zip file
+ Entry name is too long
+ Finish has already been called
+
+ + The Compression method specified for the entry is unsupported
+ Entry is encrypted
+
+
+ + + Starts a new Zip entry. It automatically closes the previous + entry if present. + All entry elements bar name are optional, but must be correct if present. + If the compression method is stored and the output is not patchable + the compression for that entry is automatically changed to deflate level 0 + + + the entry. + + The that can be used to cancel the operation. + + if entry passed is null. + + + if an I/O error occured. + + + if stream was finished + + + Too many entries in the Zip file
+ Entry name is too long
+ Finish has already been called
+
+ + The Compression method specified for the entry is unsupported. + +
+ + + Closes the current entry, updating header and footer information as required + + + Invalid entry field values. + + + An I/O error occurs. + + + No entry is active. + + + + + + + + Initializes encryption keys based on given password. + + + + + Initializes encryption keys based on given . + + The password. + + + + Writes the given buffer to the current entry. + + The buffer containing data to write. + The offset of the first byte to write. + The number of bytes to write. + Archive size is invalid + No entry is active. + + + + + + + Finishes the stream. This will write the central directory at the + end of the zip file and flush the stream. + + + This is automatically called when the stream is closed. + + + An I/O error occurs. + + + Comment exceeds the maximum length
+ Entry name exceeds the maximum length +
+
+ + > + + + + Flushes the stream by calling Flush on the deflater stream unless + the current compression method is . Then it flushes the underlying output stream. + + + + + The entries for the archive. + + + + + Used to track the crc of data added to entries. + + + + + The current entry being added. + + + + + Used to track the size of data for an entry during writing. + + + + + Offset to be recorded for each entry in the central header. + + + + + Comment for the entire archive recorded in central header. + + + + + Flag indicating that header patching is required for the current entry. + + + + + The values to patch in the entry local header + + + + + The password to use when encrypting archive entries. + + + + + Deprecated way of setting zip encoding provided for backwards compability. + Use when possible. + + + If any ZipStrings properties are being modified, it will enter a backwards compatibility mode, mimicking the + old behaviour where a single instance was shared between all Zip* instances. + + + + + Returns a new instance or the shared backwards compatible instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Utility class for resolving the encoding used for reading and writing strings + + + + + Creates a StringCodec that uses the system default encoder or UTF-8 depending on whether the zip entry Unicode flag is set + + + + + Creates a StringCodec that uses an encoding from the specified code page except for zip entries with the Unicode flag + + + + + Creates a StringCodec that uses an the specified encoding, except for zip entries with the Unicode flag + + + + + Creates a StringCodec that uses the zip specification encoder or UTF-8 depending on whether the zip entry Unicode flag is set + + + + + If set, use the encoding set by for zip entries instead of the defaults + + + + + The default encoding used for ZipCrypto passwords in zip files, set to + for greatest compability. + + + + + Returns the encoding for an output . + Unless overriden by it returns . + + + + + Returns if is set, otherwise it returns the encoding indicated by + + + + + Returns the appropriate encoding for an input according to . + If overridden by , it always returns the encoding indicated by . + + + + + + + + + Code page encoding, used for non-unicode strings + + The original Zip specification (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) states + that file names should only be encoded with IBM Code Page 437 or UTF-8. + In practice, most zip apps use OEM or system encoding (typically cp437 on Windows). + + + + + Returns the UTF-8 code page (65001) used for zip entries with unicode flag set + + + + + Code page used for non-unicode strings and legacy zip encoding (if is set). + Default value is + + + + + The non-unicode code page that should be used according to the zip specification + + + + + Operating system default codepage. + + + + + The system default encoding. + + + + + The encoding used for the zip archive comment. Defaults to the encoding for , since + no unicode flag can be set for it in the files. + + + + + The encoding used for the ZipCrypto passwords. Defaults to . + + + + + Create a copy of this StringCodec with the specified zip archive comment encoding + + + + + + + Create a copy of this StringCodec with the specified zip crypto password encoding + + + + + + + Create a copy of this StringCodec that ignores the Unicode flag when reading entries + + + +
+
diff --git a/TS SE Tool/libs/LICENSE.txt b/TS SE Tool/libs/LICENSE.txt new file mode 100644 index 00000000..03fea03b --- /dev/null +++ b/TS SE Tool/libs/LICENSE.txt @@ -0,0 +1,289 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Truck Simulator SaveEditor Tool SUBCOMPONENTS: + +The Truck Simulator SaveEditor Tool includes a number of subcomponents with +separate copyright notices and license terms. Your use of the source +code for the these subcomponents is subject to the terms and +conditions of the following licenses. + +For the SII_Decrypt component: + +Licensing +---------------------------------------- +Everything (source codes, executables/binaries, configurations, etc.) is +licensed under Mozilla Public License Version 2.0. You can find full text of +this license in file license.txt or on web page https://www.mozilla.org/MPL/2.0/. + + + +Authors, contacts, links +---------------------------------------- +František Milt, frantisek.milt@gmail.com + +For theI CSharpCode.SharpZipLib component: + +Copyright © 2000-2018 SharpZipLib Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For the ErikEJ.SqlCe40 component: + +MIT License + +Copyright (c) 2017 Erik Ejlskov Jensen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +For the TGASharpLib component: + +MIT License +Copyright (c) 2017 TGASharpLib + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/TS SE Tool/libs/Microsoft.Bcl.AsyncInterfaces.dll b/TS SE Tool/libs/Microsoft.Bcl.AsyncInterfaces.dll new file mode 100644 index 00000000..d3842860 Binary files /dev/null and b/TS SE Tool/libs/Microsoft.Bcl.AsyncInterfaces.dll differ diff --git a/TS SE Tool/libs/Microsoft.Bcl.AsyncInterfaces.xml b/TS SE Tool/libs/Microsoft.Bcl.AsyncInterfaces.xml new file mode 100644 index 00000000..0894c64f --- /dev/null +++ b/TS SE Tool/libs/Microsoft.Bcl.AsyncInterfaces.xml @@ -0,0 +1,417 @@ + + + + Microsoft.Bcl.AsyncInterfaces + + + + Provides the core logic for implementing a manual-reset or . + + + + + The callback to invoke when the operation completes if was called before the operation completed, + or if the operation completed before a callback was supplied, + or null if a callback hasn't yet been provided and the operation hasn't yet completed. + + + + State to pass to . + + + to flow to the callback, or null if no flowing is required. + + + + A "captured" or with which to invoke the callback, + or null if no special context is required. + + + + Whether the current operation has completed. + + + The result with which the operation succeeded, or the default value if it hasn't yet completed or failed. + + + The exception with which the operation failed, or null if it hasn't yet completed or completed successfully. + + + The current version of this value, used to help prevent misuse. + + + Gets or sets whether to force continuations to run asynchronously. + Continuations may run asynchronously if this is false, but they'll never run synchronously if this is true. + + + Resets to prepare for the next operation. + + + Completes with a successful result. + The result. + + + Complets with an error. + + + + Gets the operation version. + + + Gets the status of the operation. + Opaque value that was provided to the 's constructor. + + + Gets the result of the operation. + Opaque value that was provided to the 's constructor. + + + Schedules the continuation action for this operation. + The continuation to invoke when the operation has completed. + The state object to pass to when it's invoked. + Opaque value that was provided to the 's constructor. + The flags describing the behavior of the continuation. + + + Ensures that the specified token matches the current version. + The token supplied by . + + + Signals that the operation has completed. Invoked after the result or error has been set. + + + + Invokes the continuation with the appropriate captured context / scheduler. + This assumes that if is not null we're already + running within that . + + + + Provides a set of static methods for configuring -related behaviors on asynchronous enumerables and disposables. + + + Configures how awaits on the tasks returned from an async disposable will be performed. + The source async disposable. + Whether to capture and marshal back to the current context. + The configured async disposable. + + + Configures how awaits on the tasks returned from an async iteration will be performed. + The type of the objects being iterated. + The source enumerable being iterated. + Whether to capture and marshal back to the current context. + The configured enumerable. + + + Sets the to be passed to when iterating. + The type of the objects being iterated. + The source enumerable being iterated. + The to use. + The configured enumerable. + + + Represents a builder for asynchronous iterators. + + + Creates an instance of the struct. + The initialized instance. + + + Invokes on the state machine while guarding the . + The type of the state machine. + The state machine instance, passed by reference. + + + Schedules the state machine to proceed to the next action when the specified awaiter completes. + The type of the awaiter. + The type of the state machine. + The awaiter. + The state machine. + + + Schedules the state machine to proceed to the next action when the specified awaiter completes. + The type of the awaiter. + The type of the state machine. + The awaiter. + The state machine. + + + Marks iteration as being completed, whether successfully or otherwise. + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + Indicates whether a method is an asynchronous iterator. + + + Initializes a new instance of the class. + The type object for the underlying state machine type that's used to implement a state machine method. + + + Provides a type that can be used to configure how awaits on an are performed. + + + Asynchronously releases the unmanaged resources used by the . + A task that represents the asynchronous dispose operation. + + + Provides an awaitable async enumerable that enables cancelable iteration and configured awaits. + + + Configures how awaits on the tasks returned from an async iteration will be performed. + Whether to capture and marshal back to the current context. + The configured enumerable. + This will replace any previous value set by for this iteration. + + + Sets the to be passed to when iterating. + The to use. + The configured enumerable. + This will replace any previous set by for this iteration. + + + Returns an enumerator that iterates asynchronously through collections that enables cancelable iteration and configured awaits. + An enumerator for the class. + + + Provides an awaitable async enumerator that enables cancelable iteration and configured awaits. + + + Advances the enumerator asynchronously to the next element of the collection. + + A that will complete with a result of true + if the enumerator was successfully advanced to the next element, or false if the enumerator has + passed the end of the collection. + + + + Gets the element in the collection at the current position of the enumerator. + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources asynchronously. + + + + Allows users of async-enumerable methods to mark the parameter that should receive the cancellation token value from . + + + Initializes a new instance of the class. + + + + Attribute used to indicate a source generator should create a function for marshalling + arguments instead of relying on the runtime to generate an equivalent marshalling function at run-time. + + + This attribute is meaningless if the source generator associated with it is not enabled. + The current built-in source generator only supports C# and only supplies an implementation when + applied to static, partial, non-generic methods. + + + + + Initializes a new instance of the . + + Name of the library containing the import. + + + + Gets the name of the library containing the import. + + + + + Gets or sets the name of the entry point to be called. + + + + + Gets or sets how to marshal string arguments to the method. + + + If this field is set to a value other than , + must not be specified. + + + + + Gets or sets the used to control how string arguments to the method are marshalled. + + + If this field is specified, must not be specified + or must be set to . + + + + + Gets or sets whether the callee sets an error (SetLastError on Windows or errno + on other platforms) before returning from the attributed method. + + + + + Specifies how strings should be marshalled for generated p/invokes + + + + + Indicates the user is supplying a specific marshaller in . + + + + + Use the platform-provided UTF-8 marshaller. + + + + + Use the platform-provided UTF-16 marshaller. + + + + Exposes an enumerator that provides asynchronous iteration over values of a specified type. + The type of values to enumerate. + + + Returns an enumerator that iterates asynchronously through the collection. + A that may be used to cancel the asynchronous iteration. + An enumerator that can be used to iterate asynchronously through the collection. + + + Supports a simple asynchronous iteration over a generic collection. + The type of objects to enumerate. + + + Advances the enumerator asynchronously to the next element of the collection. + + A that will complete with a result of true if the enumerator + was successfully advanced to the next element, or false if the enumerator has passed the end + of the collection. + + + + Gets the element in the collection at the current position of the enumerator. + + + Provides a mechanism for releasing unmanaged resources asynchronously. + + + + Performs application-defined tasks associated with freeing, releasing, or + resetting unmanaged resources asynchronously. + + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + Specifies that null is disallowed as an input even if the corresponding type allows it. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns. + + + Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter may be null. + + + + Gets the return value condition. + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that the output will be non-null if the named parameter is non-null. + + + Initializes the attribute with the associated parameter name. + + The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null. + + + + Gets the associated parameter name. + + + Applied to a method that will never return under any circumstance. + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + Initializes the attribute with the specified parameter value. + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + Specifies that the method or property will ensure that the listed field and property members have not-null values. + + + Initializes the attribute with a field or property member. + + The field or property member that is promised to be not-null. + + + + Initializes the attribute with the list of field and property members. + + The list of field and property members that are promised to be not-null. + + + + Gets field or property member names. + + + Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition. + + + Initializes the attribute with the specified return value condition and a field or property member. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + The field or property member that is promised to be not-null. + + + + Initializes the attribute with the specified return value condition and list of field and property members. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + The list of field and property members that are promised to be not-null. + + + + Gets the return value condition. + + + Gets field or property member names. + + + diff --git a/TS SE Tool/libs/MoreLinq.dll b/TS SE Tool/libs/MoreLinq.dll new file mode 100644 index 00000000..5abad158 Binary files /dev/null and b/TS SE Tool/libs/MoreLinq.dll differ diff --git a/TS SE Tool/libs/MoreLinq.xml b/TS SE Tool/libs/MoreLinq.xml new file mode 100644 index 00000000..f2c5fbff --- /dev/null +++ b/TS SE Tool/libs/MoreLinq.xml @@ -0,0 +1,13401 @@ + + + + MoreLinq + + + + + Provides a set of static methods for querying objects that + implement . + + + + + Ensures that a source sequence of + objects are all acquired successfully. If the acquisition of any + one fails then those successfully + acquired till that point are disposed. + + Type of elements in sequence. + Source sequence of objects. + + Returns an array of all the acquired + objects in source order. + + + This operator executes immediately. + + + + + Applies two accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies three accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies four accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies five accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies six accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of sixth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + The seed value for the sixth accumulator. + The sixth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies seven accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of sixth accumulator value. + The type of seventh accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + The seed value for the sixth accumulator. + The sixth accumulator. + The seed value for the seventh accumulator. + The seventh accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies eight accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of sixth accumulator value. + The type of seventh accumulator value. + The type of eighth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + The seed value for the sixth accumulator. + The sixth accumulator. + The seed value for the seventh accumulator. + The seventh accumulator. + The seed value for the eighth accumulator. + The eighth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies a right-associative accumulator function over a sequence. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + Source sequence. + A right-associative accumulator function to be invoked on each element. + The final accumulator value. + + i.ToString()).AggregateRight((a, b) => $"({a}/{b})"); + ]]> + The result variable will contain "(1/(2/(3/(4/5))))". + + + This operator executes immediately. + + + + + Applies a right-associative accumulator function over a sequence. + The specified seed value is used as the initial accumulator value. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + The type of the accumulator value. + Source sequence. + The initial accumulator value. + A right-associative accumulator function to be invoked on each element. + The final accumulator value. + + $"({a}/{b})"); + ]]> + The result variable will contain "(1/(2/(3/(4/(5/6)))))". + + + This operator executes immediately. + + + + + Applies a right-associative accumulator function over a sequence. + The specified seed value is used as the initial accumulator value, + and the specified function is used to select the result value. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + The type of the accumulator value. + The type of the resulting value. + Source sequence. + The initial accumulator value. + A right-associative accumulator function to be invoked on each element. + A function to transform the final accumulator value into the result value. + The transformed final accumulator value. + + $"({a}/{b})", str => str.Length); + ]]> + The result variable will contain 21. + + + This operator executes immediately. + + + + + Returns a sequence consisting of the head elements and the given tail element. + + Type of sequence + All elements of the head. Must not be null. + Tail element of the new sequence. + A sequence consisting of the head elements and the given tail element. + This operator uses deferred execution and streams its results. + + + + Asserts that all elements of a sequence meet a given condition + otherwise throws an object. + + Type of elements in sequence. + Source sequence. + Function that asserts an element of the sequence for a condition. + + Returns the original sequence. + + The input sequence + contains an element that does not meet the condition being + asserted. + + This operator uses deferred execution and streams its results. + + + + + Asserts that all elements of a sequence meet a given condition + otherwise throws an object. + + Type of elements in sequence. + Source sequence. + Function that asserts an element of the input sequence for a condition. + Function that returns the object to throw. + + Returns the original sequence. + + + This operator uses deferred execution and streams its results. + + + + + Asserts that a source sequence contains a given count of elements. + + Type of elements in sequence. + Source sequence. + Count to assert. + + Returns the original sequence as long it is contains the + number of elements specified by . + Otherwise it throws . + + + This operator uses deferred execution and streams its results. + + + + + Asserts that a source sequence contains a given count of elements. + A parameter specifies the exception to be thrown. + + Type of elements in sequence. + Source sequence. + Count to assert. + + Function that receives a comparison (a negative integer if actual + count is less than and a positive integer + if actual count is greater than ) and + as arguments and which returns the + object to throw. + + Returns the original sequence as long it is contains the + number of elements specified by . + Otherwise it throws the object + returned by calling . + + + This operator uses deferred execution and streams its results. + + + + + Inserts the elements of a sequence into another sequence at a + specified index from the tail of the sequence, where zero always + represents the last position, one represents the second-last + element, two represents the third-last element and so on. + + + Type of elements in all sequences. + The source sequence. + The sequence that will be inserted. + + The zero-based index from the end of where + elements from should be inserted. + . + + A sequence that contains the elements of + plus the elements of inserted at + the given index from the end of . + + is null. + is null. + + Thrown if is negative. + + + Thrown lazily if is greater than the + length of . The validation occurs when + the resulting sequence is iterated. + + + This method uses deferred execution and streams its results. + + + + + Batches the source sequence into sized buckets. + + Type of elements in sequence. + The source sequence. + Size of buckets. + A sequence of equally sized buckets containing elements of the source collection. + + + This operator uses deferred execution and streams its results + (buckets are streamed but their content buffered). + + When more than one bucket is streamed, all buckets except the last + is guaranteed to have elements. The last + bucket may be smaller depending on the remaining elements in the + sequence. + + Each bucket is pre-allocated to elements. + If is set to a very large value, e.g. + to effectively disable batching by just + hoping for a single bucket, then it can lead to memory exhaustion + (). + + + + + + Batches the source sequence into sized buckets and applies a projection to each bucket. + + Type of elements in sequence. + Type of result returned by . + The source sequence. + Size of buckets. + The projection to apply to each bucket. + A sequence of projections on equally sized buckets containing elements of the source collection. + + + This operator uses deferred execution and streams its results + (buckets are streamed but their content buffered). + + + When more than one bucket is streamed, all buckets except the last + is guaranteed to have elements. The last + bucket may be smaller depending on the remaining elements in the + sequence. + Each bucket is pre-allocated to elements. + If is set to a very large value, e.g. + to effectively disable batching by just + hoping for a single bucket, then it can lead to memory exhaustion + (). + + + + + + Returns the Cartesian product of two sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of three sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of four sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of five sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of six sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + The sixth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of seven sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + The sixth sequence of elements. + The seventh sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of eight sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + The sixth sequence of elements. + The seventh sequence of elements. + The eighth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Applies a function to each element of the source sequence and + returns a new sequence of result elements for source elements + where the function returns a couple (2-tuple) having a true + as its first element and result as the second. + + + The type of the elements in . + + The type of the elements in the returned sequence. + The source sequence. + The function that is applied to each source + element. + A sequence elements. + + This method uses deferred execution semantics and streams its + results. + + + (int.TryParse(s, out var n), n)); + ]]> + The xs variable will be a sequence of the integers 2, 3, 4, + 6, 7 and 9. + + + + + Completely consumes the given sequence. This method uses immediate execution, + and doesn't store any data during execution. + + Element type of the sequence + Source to consume + + + + Applies a key-generating function to each element of a sequence and returns a sequence of + unique keys and their number of occurrences in the original sequence. + + Type of the elements of the source sequence. + Type of the projected element. + Source sequence. + Function that transforms each item of source sequence into a key to be compared against the others. + A sequence of unique keys and their number of occurrences in the original sequence. + + + + Applies a key-generating function to each element of a sequence and returns a sequence of + unique keys and their number of occurrences in the original sequence. + An additional argument specifies a comparer to use for testing equivalence of keys. + + Type of the elements of the source sequence. + Type of the projected element. + Source sequence. + Function that transforms each item of source sequence into a key to be compared against the others. + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for is used. + A sequence of unique keys and their number of occurrences in the original sequence. + + + + Provides a countdown counter for a given count of elements at the + tail of the sequence where zero always represents the last element, + one represents the second-last element, two represents the + third-last element and so on. + + + The type of elements of + + The type of elements of the resulting sequence. + The source sequence. + Count of tail elements of + to count down. + + A function that receives the element and the current countdown + value for the element and which returns those mapped to a + result returned in the resulting sequence. For elements before + the last , the countdown value is + null. + + A sequence of results returned by + . + + This method uses deferred execution semantics and streams its + results. At most, elements of the source + sequence may be buffered at any one time unless + is a collection or a list. + + + + + Determines whether or not the number of elements in the sequence is greater than + or equal to the given integer. + + Element type of sequence + The source sequence + The minimum number of items a sequence must have for this + function to return true + is null + is negative + true if the number of elements in the sequence is greater than + or equal to the given integer or false otherwise. + + + The result variable will contain true. + + + + + Determines whether or not the number of elements in the sequence is lesser than + or equal to the given integer. + + Element type of sequence + The source sequence + The maximum number of items a sequence must have for this + function to return true + is null + is negative + true if the number of elements in the sequence is lesser than + or equal to the given integer or false otherwise. + + + The result variable will contain false. + + + + + Determines whether or not the number of elements in the sequence is equals to the given integer. + + Element type of sequence + The source sequence + The exactly number of items a sequence must have for this + function to return true + is null + is negative + true if the number of elements in the sequence is equals + to the given integer or false otherwise. + + + The result variable will contain true. + + + + + Determines whether or not the number of elements in the sequence is between + an inclusive range of minimum and maximum integers. + + Element type of sequence + The source sequence + The minimum number of items a sequence must have for this + function to return true + The maximum number of items a sequence must have for this + function to return true + is null + is negative or is less than min + true if the number of elements in the sequence is between (inclusive) + the min and max given integers or false otherwise. + + + The result variable will contain false. + + + + + Compares two sequences and returns an integer that indicates whether the first sequence + has fewer, the same or more elements than the second sequence. + + Element type of the first sequence + Element type of the second sequence + The first sequence + The second sequence + is null + is null + -1 if the first sequence has the fewest elements, 0 if the two sequences have the same number of elements + or 1 if the first sequence has the most elements. + + + The result variable will contain 1. + + + + + Returns all distinct elements of the given source, where "distinctness" + is determined via a projection and the default equality comparer for the projected type. + + + This operator uses deferred execution and streams the results, although + a set of already-seen keys is retained. If a key is seen multiple times, + only the first element with that key is returned. + + Type of the source sequence + Type of the projected element + Source sequence + Projection for determining "distinctness" + A sequence consisting of distinct elements from the source sequence, + comparing them by the specified key projection. + + + + Returns all distinct elements of the given source, where "distinctness" + is determined via a projection and the specified comparer for the projected type. + + + This operator uses deferred execution and streams the results, although + a set of already-seen keys is retained. If a key is seen multiple times, + only the first element with that key is returned. + + Type of the source sequence + Type of the projected element + Source sequence + Projection for determining "distinctness" + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TSource is used. + A sequence consisting of distinct elements from the source sequence, + comparing them by the specified key projection. + + + + Returns all duplicate elements of the given source. + + The source sequence. + The type of the elements in the source sequence. + is . + All elements that are duplicated. + This operator uses deferred execution and streams its results. + + + + Returns all duplicate elements of the given source, using the specified equality + comparer. + + The source sequence. + + The equality comparer to use to determine whether one + equals another. If , the default equality comparer for + is used. + The type of the elements in the source sequence. + is . + All elements that are duplicated. + This operator uses deferred execution and streams its results. + + + + Determines whether the end of the first sequence is equivalent to + the second sequence, using the default equality comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + + true if ends with elements + equivalent to . + + + This is the equivalent of + and + it calls using + on pairs of elements at + the same index. + + + + + Determines whether the end of the first sequence is equivalent to + the second sequence, using the specified element equality comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + Equality comparer to use. + + true if ends with elements + equivalent to . + + + This is the equivalent of + and it calls + on pairs of + elements at the same index. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. An exception is thrown + if the input sequences are of different lengths. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + + Function to apply to each pair of elements. + + A sequence that contains elements of the two input sequences, + combined by . + + + The input sequences are of different lengths. + + + , , or is . + + + n + l); + ]]> + The zipped variable, when iterated over, will yield "1A", + "2B", "3C", "4D" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. An exception is thrown + if the input sequences are of different lengths. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + The third sequence. + + Function to apply to each triplet of elements. + + A sequence that contains elements of the three input sequences, + combined by . + + + The input sequences are of different lengths. + + + , , , or is . + + + n + l + c); + ]]> + The zipped variable, when iterated over, will yield "1Aa", + "2Bb", "3Cc", "4Dd" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. An exception is thrown + if the input sequences are of different lengths. + + Type of elements in first sequence + Type of elements in second sequence + Type of elements in third sequence + Type of elements in fourth sequence + Type of elements in result sequence + The first sequence. + The second sequence. + The third sequence. + The fourth sequence. + + Function to apply to each quadruplet of elements. + + A sequence that contains elements of the four input sequences, + combined by . + + + The input sequences are of different lengths. + + + , , , , or is . + + + n + l + c + f); + ]]> + The zipped variable, when iterated over, will yield "1AaTrue", + "2BbFalse", "3CcTrue", "4DdFalse" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a sequence containing the values resulting from invoking (in order) each function in the source sequence of functions. + + + This operator uses deferred execution and streams the results. + If the resulting sequence is enumerated multiple times, the functions will be + evaluated multiple times too. + + The type of the object returned by the functions. + The functions to evaluate. + A sequence with results from invoking . + When is null. + + + + Returns the set of elements in the first sequence which aren't + in the second sequence, according to a given key selector. + + + This is a set operation; if multiple elements in have + equal keys, only the first such element is returned. + This operator uses deferred execution and streams the results, although + a set of keys from is immediately selected and retained. + + The type of the elements in the input sequences. + The type of the key returned by . + The sequence of potentially included elements. + The sequence of elements whose keys may prevent elements in + from being returned. + The mapping from source element to key. + A sequence of elements from whose key was not also a key for + any element in . + + + + Returns the set of elements in the first sequence which aren't + in the second sequence, according to a given key selector. + + + This is a set operation; if multiple elements in have + equal keys, only the first such element is returned. + This operator uses deferred execution and streams the results, although + a set of keys from is immediately selected and retained. + + The type of the elements in the input sequences. + The type of the key returned by . + The sequence of potentially included elements. + The sequence of elements whose keys may prevent elements in + from being returned. + The mapping from source element to key. + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TSource is used. + A sequence of elements from whose key was not also a key for + any element in . + + + + Excludes a contiguous number of elements from a sequence starting + at a given index. + + The type of the elements of the sequence + The sequence to exclude elements from + The zero-based index at which to begin excluding elements + The number of elements to exclude + A sequence that excludes the specified portion of elements + + + + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + + The type of the elements in the sequences. + The source sequence. + The value to return in a singleton + collection if is empty. + + An that contains + if is empty; otherwise, . + + + x == 100).FallbackIfEmpty(-1).Single(); + ]]> + The result variable will contain -1. + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + First value of the alternate sequence that + is returned if is empty. + Second value of the alternate sequence that + is returned if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + First value of the alternate sequence that + is returned if is empty. + Second value of the alternate sequence that + is returned if is empty. + Third value of the alternate sequence that + is returned if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + First value of the alternate sequence that + is returned if is empty. + Second value of the alternate sequence that + is returned if is empty. + Third value of the alternate sequence that + is returned if is empty. + Fourth value of the alternate sequence that + is returned if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence from an array of values. + + The type of the elements in the sequences. + The source sequence. + The array that is returned as the alternate + sequence if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + The alternate sequence that is returned + if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns a sequence with each null reference or value in the source + replaced with the following non-null reference or value in + that sequence. + + The source sequence. + Type of the elements in the source sequence. + + An with null references or values + replaced. + + + This method uses deferred execution semantics and streams its + results. If references or values are null at the end of the + sequence then they remain null. + + + + + Returns a sequence with each missing element in the source replaced + with the following non-missing element in that sequence. An + additional parameter specifies a function used to determine if an + element is considered missing or not. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + Type of the elements in the source sequence. + + An with missing values replaced. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the end of the sequence then + they remain missing. + + + + + Returns a sequence with each missing element in the source replaced + with the following non-missing element in that sequence. Additional + parameters specify two functions, one used to determine if an + element is considered missing or not and another to provide the + replacement for the missing element. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + The function used to produce the element + that will replace the missing one. Its first argument receives the + current element considered missing while the second argument + receives the next non-missing element. + Type of the elements in the source sequence. + An with missing values replaced. + + An with missing elements filled. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the end of the sequence then + they remain missing. + + + + + Returns a sequence with each null reference or value in the source + replaced with the previous non-null reference or value seen in + that sequence. + + The source sequence. + Type of the elements in the source sequence. + + An with null references or values + replaced. + + + This method uses deferred execution semantics and streams its + results. If references or values are null at the start of the + sequence then they remain null. + + + + + Returns a sequence with each missing element in the source replaced + with the previous non-missing element seen in that sequence. An + additional parameter specifies a function used to determine if an + element is considered missing or not. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + Type of the elements in the source sequence. + + An with missing values replaced. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the start of the sequence then + they remain missing. + + + + + Returns a sequence with each missing element in the source replaced + with one based on the previous non-missing element seen in that + sequence. Additional parameters specify two functions, one used to + determine if an element is considered missing or not and another + to provide the replacement for the missing element. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + The function used to produce the element + that will replace the missing one. Its first argument receives the + current element considered missing while the second argument + receives the previous non-missing element. + Type of the elements in the source sequence. + + An with missing values replaced. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the start of the sequence then + they remain missing. + + + + + Flattens a sequence containing arbitrarily-nested sequences. + + The sequence that will be flattened. + + A sequence that contains the elements of + and all nested sequences (except strings). + + is null. + + + + Flattens a sequence containing arbitrarily-nested sequences. An + additional parameter specifies a predicate function used to + determine whether a nested should be + flattened or not. + + The sequence that will be flattened. + + A function that receives each element that implements + and indicates if its elements should be + recursively flattened into the resulting sequence. + + + A sequence that contains the elements of + and all nested sequences for which the predicate function + returned true. + + + is null. + + is null. + + + + Flattens a sequence containing arbitrarily-nested sequences. An + additional parameter specifies a function that projects an inner + sequence via a property of an object. + + The sequence that will be flattened. + + A function that receives each element of the sequence as an object + and projects an inner sequence to be flattened. If the function + returns null then the object argument is considered a leaf + of the flattening process. + + + A sequence that contains the elements of + and all nested sequences projected via the + function. + + + is null. + + is null. + + + + Returns the result of applying a function to a sequence of + 1 element. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 1 element. + + + + Returns the result of applying a function to a sequence of + 2 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 2 elements. + + + + Returns the result of applying a function to a sequence of + 3 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 3 elements. + + + + Returns the result of applying a function to a sequence of + 4 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 4 elements. + + + + Returns the result of applying a function to a sequence of + 5 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 5 elements. + + + + Returns the result of applying a function to a sequence of + 6 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 6 elements. + + + + Returns the result of applying a function to a sequence of + 7 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 7 elements. + + + + Returns the result of applying a function to a sequence of + 8 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 8 elements. + + + + Returns the result of applying a function to a sequence of + 9 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 9 elements. + + + + Returns the result of applying a function to a sequence of + 10 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 10 elements. + + + + Returns the result of applying a function to a sequence of + 11 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 11 elements. + + + + Returns the result of applying a function to a sequence of + 12 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 12 elements. + + + + Returns the result of applying a function to a sequence of + 13 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 13 elements. + + + + Returns the result of applying a function to a sequence of + 14 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 14 elements. + + + + Returns the result of applying a function to a sequence of + 15 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 15 elements. + + + + Returns the result of applying a function to a sequence of + 16 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 16 elements. + + + + Immediately executes the given action on each element in the source sequence. + + The type of the elements in the sequence + The sequence of elements + The action to execute on each element + + + + Immediately executes the given action on each element in the source sequence. + Each element's index is used in the logic of the action. + + The type of the elements in the sequence + The sequence of elements + The action to execute on each element; the second parameter + of the action represents the index of the source element. + + + + Returns a single-element sequence containing the result of invoking the function. + + + This operator uses deferred execution and streams the results. + If the resulting sequence is enumerated multiple times, the function will be + invoked multiple times too. + + The type of the object returned by the function. + The function to evaluate. + A sequence with the value resulting from invoking . + + + + Returns a sequence containing the result of invoking each parameter function in order. + + + This operator uses deferred execution and streams the results. + If the resulting sequence is enumerated multiple times, the functions will be + invoked multiple times too. + + The type of the object returned by the functions. + The first function to evaluate. + The second function to evaluate. + A sequence with the values resulting from invoking and . + + + + Returns a sequence containing the result of invoking each parameter function in order. + + + This operator uses deferred execution and streams the results. + If the resulting sequence is enumerated multiple times, the functions will be + invoked multiple times too. + + The type of the object returned by the functions. + The first function to evaluate. + The second function to evaluate. + The third function to evaluate. + A sequence with the values resulting from invoking , and . + + + + Returns a sequence containing the values resulting from invoking (in order) each function in the source sequence of functions. + + + This operator uses deferred execution and streams the results. + If the resulting sequence is enumerated multiple times, the functions will be + invoked multiple times too. + + The type of the object returned by the functions. + The functions to evaluate. + A sequence with the values resulting from invoking all of the . + When is null. + + + + Performs a Full Group Join between the and sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + A sequence of elements joined from and . + + + + + Performs a Full Group Join between the and sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TKey is used. + A sequence of elements joined from and . + + + + + Performs a full group-join between two sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + The type of the elements of the resulting sequence + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + Function to apply to each pair of elements plus the key + A sequence of elements joined from and . + + + + + Performs a full group-join between two sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + The type of the elements of the resulting sequence + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + Function to apply to each pair of elements plus the key + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TKey is used. + A sequence of elements joined from and . + + + + + Performs a full outer join on two homogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Performs a full outer join on two homogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Performs a full outer join on two heterogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Performs a full outer join on two heterogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Returns a sequence of values consecutively generated by a generator function. + + Type of elements to generate. + Value of first element in sequence + + Generator function which takes the previous series element and uses it to generate the next element. + + A sequence containing the generated values. + + This function defers element generation until needed and streams the results. + + + n * n).Take(5); + ]]> + The result variable, when iterated over, will yield 2, 4, 16, 256, and 65536, in turn. + + + + + Returns a sequence of values based on indexes. + + + The type of the value returned by + and therefore the elements of the generated sequence. + + Generation function to apply to each index. + A sequence of generated results. + + + The sequence is (practically) infinite where the index ranges from + zero to inclusive. + + This function defers execution and streams the results. + + + + + is not thread-safe so the following + implementation uses thread-local + instances to create the illusion of a global + implementation. For some background, + see Getting + random numbers in a thread-safe way. + On .NET 6+, delegates to Random.Shared. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. + + The type of the elements of + . + The type of the key returned by + . + A sequence whose elements to group. + A function to extract the key for each + element. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements in the same order as found in the + source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function and compares the keys by using a + specified comparer. + + The type of the elements of + . + The type of the key returned by + . + A sequence whose elements to group. + A function to extract the key for each + element. + An to + compare keys. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements in the same order as found in the + source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function and projects the elements for + each group by using a specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting groupings. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each source + element to an element in the resulting grouping. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements (of type ) + in the same order as found in the source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. The keys are compared by using + a comparer and each group's elements are projected by using a + specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting groupings. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each source + element to an element in the resulting grouping. + An to + compare keys. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements (of type ) + in the same order as found in the source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. The keys are compared by using + a comparer and each group's elements are projected by using a + specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting sequence. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each key and + associated source elements to a result object. + A collection of elements of type + where each element represents + a projection over a group and its key. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. The keys are compared by using + a comparer and each group's elements are projected by using a + specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting sequence. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each key and + associated source elements to a result object. + An to + compare keys. + A collection of elements of type + where each element represents + a projection over a group and its key. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Returns a sequence of + where the key is the zero-based index of the value in the source + sequence. + + Type of elements in sequence. + The source sequence. + A sequence of . + This operator uses deferred execution and streams its + results. + + + + Returns a sequence of + where the key is the index of the value in the source sequence. + An additional parameter specifies the starting index. + + Type of elements in sequence. + The source sequence. + + A sequence of . + This operator uses deferred execution and streams its + results. + + + + Applies a key-generating function to each element of a sequence and + returns a sequence that contains the elements of the original + sequence as well its key and index inside the group of its key. + + Type of the source sequence elements. + Type of the projected key. + Source sequence. + + Function that projects the key given an element in the source sequence. + + A sequence of elements paired with their index within the key-group. + The index is the key and the element is the value of the pair. + + + + + Applies a key-generating function to each element of a sequence and + returns a sequence that contains the elements of the original + sequence as well its key and index inside the group of its key. + An additional parameter specifies a comparer to use for testing the + equivalence of keys. + + Type of the source sequence elements. + Type of the projected key. + Source sequence. + + Function that projects the key given an element in the source sequence. + + The equality comparer to use to determine whether or not keys are + equal. If null, the default equality comparer for + is used. + + A sequence of elements paired with their index within the key-group. + The index is the key and the element is the value of the pair. + + + + + Inserts the elements of a sequence into another sequence at a + specified index. + + Type of the elements of the source sequence. + The source sequence. + The sequence that will be inserted. + + The zero-based index at which to insert elements from + . + + A sequence that contains the elements of + plus the elements of inserted at + the given index. + + is null. + is null. + + Thrown if is negative. + + + Thrown lazily if is greater than the + length of . The validation occurs when + yielding the next element after having iterated + entirely. + + + + + Interleaves the elements of two or more sequences into a single sequence, skipping + sequences as they are consumed. + + The type of the elements of the source sequences. + The first sequence in the interleave group. + The other sequences in the interleave group. + A sequence of interleaved elements from all of the source sequences. + + + Interleave combines sequences by visiting each in turn, and returning the first element + of each, followed by the second, then the third, and so on. So, for example: + + + This operator behaves in a deferred and streaming manner. + + When sequences are of unequal length, this method will skip those sequences that have + been fully consumed and continue interleaving the remaining sequences. + + The sequences are interleaved in the order that they appear in the collection, with as the first + sequence. + + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + negative offset. + + The type of the elements of the source sequence. + The type of the elements of the result sequence. + The sequence over which to evaluate lag. + The offset (expressed as a positive number) by which to lag each + value of the sequence. + A projection function which accepts the current and lagged + items (in that order) and returns a result. + + A sequence produced by projecting each element of the sequence with its lagged + pairing. + + + This operator evaluates in a deferred and streaming manner. + + For elements prior to the lag offset, default(T) is used as the lagged + value. + + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + negative offset. + + The type of the elements of the source sequence. + The type of the elements of the result sequence. + The sequence over which to evaluate lag. + The offset (expressed as a positive number) by which to lag each + value of the sequence. + A default value supplied for the lagged value prior to the + lag offset. + A projection function which accepts the current and lagged + items (in that order) and returns a result. + + A sequence produced by projecting each element of the sequence with its lagged + pairing. + + This operator evaluates in a deferred and streaming manner. + + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + positive offset. + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + The sequence over which to evaluate lead. + The offset (expressed as a positive number) by which to lead each + element of the sequence. + A projection function which accepts the current and + subsequent (lead) element (in that order) and produces a result. + + A sequence produced by projecting each element of the sequence with its lead + pairing. + + + This operator evaluates in a deferred and streaming manner. + + For elements of the sequence that are less than items from the + end, default(T) is used as the lead value. + + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + positive offset. + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + The sequence over which to evaluate Lead. + The offset (expressed as a positive number) by which to lead each + element of the sequence. + A default value supplied for the leading element when + none is available. + A projection function which accepts the current and + subsequent (lead) element (in that order) and produces a result. + + A sequence produced by projecting each element of the sequence with its lead + pairing. + + This operator evaluates in a deferred and streaming manner. + + + + + Performs a left outer join on two homogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Performs a left outer join on two homogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Performs a left outer join on two heterogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Performs a left outer join on two heterogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Returns the maximal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of maximal elements, according to the projection. + or is null + + + + Returns the maximal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of maximal elements, according to the projection. + , + or is null + + + + Returns the first element of a sequence. + + + The type of the elements of . + The input sequence. + + The input sequence is empty. + + The first element of the input sequence. + + + + + Returns the first element of a sequence, or a default value if the + sequence contains no elements. + + + The type of the elements of . + The input sequence. + + Default value of type if source is empty; + otherwise, the first element in source. + + + + + Returns the last element of a sequence. + + + The type of the elements of . + The input sequence. + + The input sequence is empty. + + The last element of the input sequence. + + + + + Returns the last element of a sequence, or a default value if the + sequence contains no elements. + + + The type of the elements of . + The input sequence. + + Default value of type if source is empty; + otherwise, the last element in source. + + + + + Returns the only element of a sequence, and throws an exception if + there is not exactly one element in the sequence. + + + The type of the elements of . + The input sequence. + + The input sequence contains more than one element. + + The single element of the input sequence. + + + + + Returns the only element of a sequence, or a default value if the + sequence is empty; this method throws an exception if there is more + than one element in the sequence. + + + The type of the elements of . + The input sequence. + + The single element of the input sequence, or default value of type + if the sequence contains no elements. + + + + + Returns the maximal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of maximal elements, according to the projection. + or is null + + + + Returns the maximal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of maximal elements, according to the projection. + , + or is null + + + + Returns the minimal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of minimal elements, according to the projection. + or is null + + + + Returns the minimal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of minimal elements, according to the projection. + , + or is null + + + + Returns the minimal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of minimal elements, according to the projection. + or is null + + + + Returns the minimal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of minimal elements, according to the projection. + , + or is null + + + + Returns a sequence with a range of elements in the source sequence + moved to a new offset. + + Type of the source sequence. + The source sequence. + + The zero-based index identifying the first element in the range of + elements to move. + The count of items to move. + + The index where the specified range will be moved. + + A sequence with the specified range moved to the new position. + + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { 3, 4, 0, 1, 2, 5 }. + + + + + Sorts the elements of a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + An ordered copy of the source sequence + + + + Sorts the elements of a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + A comparer used to define the semantics of element comparison + An ordered copy of the source sequence + + + + Performs a subsequent ordering of elements in a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + An ordered copy of the source sequence + + + + Performs a subsequent ordering of elements in a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + A comparer used to define the semantics of element comparison + An ordered copy of the source sequence + + + + Merges two ordered sequences into one. Where the elements equal + in both sequences, the element from the first sequence is + returned in the resulting sequence. + + Type of elements in input and output sequences. + The first input sequence. + The second input sequence. + + A sequence with elements from the two input sequences merged, as + in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered as inputs. + + + + + Merges two ordered sequences into one with an additional + parameter specifying how to compare the elements of the + sequences. Where the elements equal in both sequences, the + element from the first sequence is returned in the resulting + sequence. + + Type of elements in input and output sequences. + The first input sequence. + The second input sequence. + An to compare elements. + + A sequence with elements from the two input sequences merged, as + in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered as inputs. + + + + + Merges two ordered sequences into one with an additional + parameter specifying the element key by which the sequences are + ordered. Where the keys equal in both sequences, the + element from the first sequence is returned in the resulting + sequence. + + Type of elements in input and output sequences. + Type of keys used for merging. + The first input sequence. + The second input sequence. + Function to extract a key given an element. + + A sequence with elements from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two ordered sequences into one. Additional parameters + specify the element key by which the sequences are ordered, + the result when element is found in first sequence but not in + the second, the result when element is found in second sequence + but not in the first and the result when elements are found in + both sequences. + + Type of elements in source sequences. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an element. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two ordered sequences into one. Additional parameters + specify the element key by which the sequences are ordered, + the result when element is found in first sequence but not in + the second, the result when element is found in second sequence + but not in the first, the result when elements are found in + both sequences and a method for comparing keys. + + Type of elements in source sequences. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an element. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + An to compare keys. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two heterogeneous sequences ordered by a common key type + into a homogeneous one. Additional parameters specify the + element key by which the sequences are ordered, the result when + element is found in first sequence but not in the second and + the result when element is found in second sequence but not in + the first, the result when elements are found in both sequences. + + Type of elements in the first sequence. + Type of elements in the second sequence. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an + element from the first sequence. + Function to extract a key given an + element from the second sequence. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two heterogeneous sequences ordered by a common key type + into a homogeneous one. Additional parameters specify the + element key by which the sequences are ordered, the result when + element is found in first sequence but not in the second, + the result when element is found in second sequence but not in + the first, the result when elements are found in both sequences + and a method for comparing keys. + + Type of elements in the first sequence. + Type of elements in the second sequence. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an + element from the first sequence. + Function to extract a key given an + element from the second sequence. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + An to compare keys. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Pads a sequence with default values if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield + 123, 456, 789 and two zeroes, in turn. + + + + + Pads a sequence with a given filler value if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + The value to use for padding. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield + 123, 456, and 789 followed by two occurrences of -1, in turn. + + + + + Pads a sequence with a dynamic filler value if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + Function to calculate padding. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + -i); + ]]> + The result variable, when iterated over, will yield + 0, 1, 2, -3 and -4, in turn. + + + + + Pads a sequence with default values in the beginning if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { 0, 0, 123, 456, 789 }. + + + + + Pads a sequence with a given filler value in the beginning if it is narrower (shorter + in length) than a given width. + An additional parameter specifies the value to use for padding. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + The value to use for padding. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { -1, -1, 123, 456, 789 }. + + + + + Pads a sequence with a dynamic filler value in the beginning if it is narrower (shorter + in length) than a given width. + An additional parameter specifies the function to calculate padding. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + + Function to calculate padding given the index of the missing element. + + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + -i); + ]]> + The result variable will contain { 0, -1, -2, 123, 456, 789 }. + + + + + Returns a sequence resulting from applying a function to each + element in the source sequence and its + predecessor, with the exception of the first element which is + only returned as the predecessor of the second element. + + The type of the elements of . + The type of the element of the returned sequence. + The source sequence. + A transform function to apply to + each pair of sequence. + + Returns the resulting sequence. + + + This operator uses deferred execution and streams its results. + + + a + b); + ]]> + The result variable, when iterated over, will yield + "ab", "bc" and "cd", in turn. + + + + + Combines , + where each element is its key, and + in a single operation. + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + A sequence containing at most top + elements from source, in their ascending order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + where each element is its key, and + in a single operation. + An additional parameter specifies the direction of the sort + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + where each element is its key, and + in a single operation. An additional parameter specifies how the + elements compare to each other. + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + A to compare elements. + A sequence containing at most top + elements from source, in their ascending order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + where each element is its key, and + in a single operation. + Additional parameters specify how the elements compare to each other and + the direction of the sort. + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + A to compare elements. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + A sequence containing at most top + elements from source, in ascending order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + An additional parameter specifies the direction of the sort + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + An additional parameter specifies how the keys compare to each other. + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + A to compare elements. + A sequence containing at most top + elements from source, in ascending order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + Additional parameters specify how the elements compare to each other and + the direction of the sort. + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + A to compare elements. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Partitions or splits a sequence in two using a predicate. + + The source sequence. + The predicate function. + Type of source elements. + + A tuple of elements satisfying the predicate and those that do not, + respectively. + + is + . + + x % 2 == 0); + ]]> + The evens variable, when iterated over, will yield 0, 2, 4, 6 + and then 8. The odds variable, when iterated over, will yield + 1, 3, 5, 7 and then 9. + + + + + Partitions or splits a sequence in two using a predicate and then + projects a result from the two. + + The source sequence. + The predicate function. + + Function that projects the result from sequences of elements that + satisfy the predicate and those that do not, respectively, passed as + arguments. + + Type of source elements. + Type of the result. + + The return value from . + + + , , or + is . + + + x % 2 == 0, ValueTuple.Create); + ]]> + The evens variable, when iterated over, will yield 0, 2, 4, 6 + and then 8. The odds variable, when iterated over, will yield + 1, 3, 5, 7 and then 9. + + + + + Partitions a grouping by Boolean keys into a projection of true + elements and false elements, respectively. + + Type of elements in source groupings. + Type of the result. + The source sequence. + + Function that projects the result from sequences of true elements + and false elements, respectively, passed as arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping by nullable Boolean keys into a projection of + true elements, false elements and null elements, respectively. + + Type of elements in source groupings. + Type of the result. + The source sequence. + + Function that projects the result from sequences of true elements, + false elements and null elements, respectively, passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from group elements + matching a key and those groups that do not. + + Type of keys in source groupings. + Type of elements in source + groupings. + Type of the result. + The source sequence. + The key to partition. + + Function that projects the result from sequences of elements + matching and those groups that do not (in the + order in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from group elements + matching a key and those groups that do not. An additional parameter + specifies how to compare keys for equality. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The key to partition on. + The comparer for keys. + + Function that projects the result from elements of the group + matching and those groups that do not (in + the order in which they appear in ), + passed as arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements of + groups matching a set of two keys and those groups that do not. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + + Function that projects the result from elements of the group + matching , elements of the group matching + and those groups that do not (in the order + in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements of + groups matching a set of two keys and those groups that do not. + An additional parameter specifies how to compare keys for equality. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + The comparer for keys. + + Function that projects the result from elements of the group + matching , elements of the group matching + and those groups that do not (in the order + in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements groups + matching a set of three keys and those groups that do not. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + The third key to partition on. + + Function that projects the result from elements of groups + matching , and + and those groups that do not (in the order + in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements groups + matching a set of three keys and those groups that do not. An + additional parameter specifies how to compare keys for equality. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + The third key to partition on. + The comparer for keys. + + Function that projects the result from elements of groups + matching , and + and those groups that do not (in + the order in which they appear in ), + passed as arguments. + + + The return value from . + + + or is + . + + + + + Generates a sequence of lists that represent the permutations of the original sequence. + + The type of the elements in the sequence. + The original sequence to permute. + + A sequence of lists representing permutations of the original sequence. + + Too many permutations (limited by ); thrown during iteration + of the resulting sequence. + + + A permutation is a unique re-ordering of the elements of the sequence. + + This operator returns permutations in a deferred, streaming fashion; however, each + permutation is materialized into a new list. There are N! permutations of a sequence, + where N ⇒ sequence.Count(). + + Be aware that the original sequence is considered one of the permutations and will be + returned as one of the results. + + + + + Executes the given action on each element in the source sequence + and yields it. + + The type of the elements in the sequence + The sequence of elements + The action to execute on each element + A sequence with source elements in their original order. + + The returned sequence is essentially a duplicate of + the original, but with the extra action being executed while the + sequence is evaluated. The action is always taken before the element + is yielded, so any changes made by the action will be visible in the + returned sequence. This operator uses deferred execution and streams it results. + + + + + Prepends a single value to a sequence. + + The type of the elements of . + The sequence to prepend to. + The value to prepend. + + Returns a sequence where a value is prepended to it. + + + This operator uses deferred execution and streams its results. + + + The result variable, when iterated over, will yield + 0, 1, 2 and 3, in turn. + + + + Performs a pre-scan (exclusive prefix sum) on a sequence of elements. + + + An exclusive prefix sum returns an equal-length sequence where the + N-th element is the sum of the first N-1 input elements (the first + element is a special case, it is set to the identity). More + generally, the pre-scan allows any commutative binary operation, + not just a sum. + The inclusive version of PreScan is . + This operator uses deferred execution and streams its result. + + + a + b, 0); + var scan = values.Scan((a, b) => a + b); + var result = values.EquiZip(prescan, ValueTuple.Create); + ]]> + prescan will yield { 0, 1, 3, 6 }, while scan + and result will both yield { 1, 3, 6, 10 }. This + shows the relationship between the inclusive and exclusive prefix sum. + + Type of elements in source sequence + Source sequence + Transformation operation + Identity element (see remarks) + The scanned sequence + + + + Returns an infinite sequence of random integers using the standard + .NET random number generator. + + An infinite sequence of random integers + + + The implementation internally uses a shared, thread-local instance of + to generate a random number on each + iteration. The actual instance used + therefore will depend on the thread on which a single iteration is + taking place; that is the call to + . If the + overall iteration takes place on different threads (e.g. + via asynchronous awaits completing on different threads) then various + different instances will be involved + in the generation of the sequence of random numbers. Because the + instance is shared, if multiple sequences + are generated on the same thread, the order of enumeration affects the + resulting sequences. + + On .NET 6 or later, System.Random.Shared is used. + + + + + Returns an infinite sequence of random integers using the supplied + random number generator. + + Random generator used to produce random numbers + An infinite sequence of random integers + Thrown if is . + + + + Returns an infinite sequence of random integers between zero and + a given maximum. + + exclusive upper bound for the random values returned + An infinite sequence of random integers + + + The implementation internally uses a shared, thread-local instance of + to generate a random number on each + iteration. The actual instance used + therefore will depend on the thread on which a single iteration is + taking place; that is the call to + . If the + overall iteration takes place on different threads (e.g. + via asynchronous awaits completing on different threads) then various + different instances will be involved + in the generation of the sequence of random numbers. Because the + instance is shared, if multiple sequences + are generated on the same thread, the order of enumeration affects the + resulting sequences. + + On .NET 6 or later, System.Random.Shared is used. + + + + + Returns an infinite sequence of random integers between zero and a + given maximum using the supplied random number generator. + + Random generator used to produce values + Exclusive upper bound for random values returned + An infinite sequence of random integers + Thrown if is . + + + + Returns an infinite sequence of random integers between a given + minimum and a maximum. + + Inclusive lower bound of the values returned + Exclusive upper bound of the values returned + An infinite sequence of random integers + + + The implementation internally uses a shared, thread-local instance of + to generate a random number on each + iteration. The actual instance used + therefore will depend on the thread on which a single iteration is + taking place; that is the call to + . If the + overall iteration takes place on different threads (e.g. + via asynchronous awaits completing on different threads) then various + different instances will be involved + in the generation of the sequence of random numbers. Because the + instance is shared, if multiple sequences + are generated on the same thread, the order of enumeration affects the + resulting sequences. + + On .NET 6 or later, System.Random.Shared is used. + + + + + Returns an infinite sequence of random integers between a given + minimum and a maximum using the supplied random number generator. + + Generator used to produce random numbers + Inclusive lower bound of the values returned + Exclusive upper bound of the values returned + An infinite sequence of random integers + Thrown if is . + + + + Returns an infinite sequence of random double values between 0.0 and 1.0 + + An infinite sequence of random doubles + + + The implementation internally uses a shared, thread-local instance of + to generate a random number on each + iteration. The actual instance used + therefore will depend on the thread on which a single iteration is + taking place; that is the call to + . If the + overall iteration takes place on different threads (e.g. + via asynchronous awaits completing on different threads) then various + different instances will be involved + in the generation of the sequence of random numbers. Because the + instance is shared, if multiple sequences + are generated on the same thread, the order of enumeration affects the + resulting sequences. + + On .NET 6 or later, System.Random.Shared is used. + + + + + Returns an infinite sequence of random double values between 0.0 and 1.0 + using the supplied random number generator. + + Generator used to produce random numbers + An infinite sequence of random doubles + Thrown if is . + + + + This is the underlying implementation that all random operators use to + produce a sequence of random values. + + The type of value returned (either Int32 or Double) + Random generators used to produce the sequence + Generator function that actually produces the next value - specific to T + An infinite sequence of random numbers of type T + + + + Returns a sequence of a specified size of random elements from the + original sequence. + + The type of source sequence elements. + + The sequence from which to return random elements. + The size of the random subset to return. + + A random sequence of elements in random order from the original + sequence. + + + + Returns a sequence of a specified size of random elements from the + original sequence. An additional parameter specifies a random + generator to be used for the random selection algorithm. + + The type of source sequence elements. + + The sequence from which to return random elements. + The size of the random subset to return. + + A random generator used as part of the selection algorithm. + + A random sequence of elements in random order from the original + sequence. + + + + Ranks each item in the sequence in descending ordering using a default comparer. + + Type of item in the sequence + The sequence whose items will be ranked + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + + Rank each item in the sequence using a caller-supplied comparer. + + The type of the elements in the source sequence + The sequence of items to rank + A object that defines comparison semantics for the elements in the sequence + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + + Ranks each item in the sequence in descending ordering by a specified key using a default comparer + + The type of the elements in the source sequence + The type of the key used to rank items in the sequence + The sequence of items to rank + A key selector function which returns the value by which to rank items in the sequence + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + + Ranks each item in a sequence using a specified key and a caller-supplied comparer + + The type of the elements in the source sequence + The type of the key used to rank items in the sequence + The sequence of items to rank + A key selector function which returns the value by which to rank items in the sequence + An object that defines the comparison semantics for keys used to rank items + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + + Repeats the sequence the specified number of times. + + Type of elements in sequence + The sequence to repeat + Number of times to repeat the sequence + A sequence produced from the repetition of the original source sequence + + + + Repeats the sequence forever. + + Type of elements in sequence + The sequence to repeat + A sequence produced from the infinite repetition of the original source sequence + + + + Returns a single-element sequence containing the item provided. + + The type of the item. + The item to return in a sequence. + A sequence containing only . + + + + Performs a right outer join on two homogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Performs a right outer join on two homogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Performs a right outer join on two heterogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Performs a right outer join on two heterogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Run-length encodes a sequence by converting consecutive instances of the same element into + a KeyValuePair{T,int} representing the item and its occurrence count. + + The type of the elements in the sequence + The sequence to run length encode + A sequence of KeyValuePair{T,int} where the key is the element and the value is the occurrence count + + + + Run-length encodes a sequence by converting consecutive instances of the same element into + a KeyValuePair{T,int} representing the item and its occurrence count. This overload + uses a custom equality comparer to identify equivalent items. + + The type of the elements in the sequence + The sequence to run length encode + The comparer used to identify equivalent items + A sequence of KeyValuePair{T,int} where they key is the element and the value is the occurrence count + + + + Performs a scan (inclusive prefix sum) on a sequence of elements. + + + An inclusive prefix sum returns an equal-length sequence where the + N-th element is the sum of the first N input elements. More + generally, the scan allows any commutative binary operation, not + just a sum. + The exclusive version of Scan is . + This operator uses deferred execution and streams its result. + + + a + b, 0); + var scan = values.Scan((a, b) => a + b); + var result = values.EquiZip(scan, ValueTuple.Create); + ]]> + prescan will yield { 0, 1, 3, 6 }, while scan + and result will both yield { 1, 3, 6, 10 }. This + shows the relationship between the inclusive and exclusive prefix sum. + + Type of elements in source sequence + Source sequence + Transformation operation + The scanned sequence + + + + Like except returns + the sequence of intermediate results as well as the final one. + An additional parameter specifies a seed. + + + This operator uses deferred execution and streams its result. + + + a + b); + ]]> + When iterated, result will yield { 0, 1, 3, 6, 10, 15 }. + + Type of elements in source sequence + Type of state + Source sequence + Initial state to seed + Transformation operation + The scanned sequence + + + + Applies an accumulator function over sequence element keys, + returning the keys along with intermediate accumulator states. + + Type of the elements of the source sequence. + The type of the key. + Type of the state. + The source sequence. + + A function that returns the key given an element. + + A function to determine the initial value for the accumulator that is + invoked once per key encountered. + + An accumulator function invoked for each element. + + A sequence of keys paired with intermediate accumulator states. + + + + + Applies an accumulator function over sequence element keys, + returning the keys along with intermediate accumulator states. An + additional parameter specifies the comparer to use to compare keys. + + Type of the elements of the source sequence. + The type of the key. + Type of the state. + The source sequence. + + A function that returns the key given an element. + + A function to determine the initial value for the accumulator that is + invoked once per key encountered. + + An accumulator function invoked for each element. + The equality comparer to use to determine + whether or not keys are equal. If null, the default equality + comparer for is used. + + A sequence of keys paired with intermediate accumulator states. + + + + + Performs a right-associative scan (inclusive prefix) on a sequence of elements. + This operator is the right-associative version of the + LINQ operator. + + Type of elements in source sequence. + Source sequence. + + A right-associative accumulator function to be invoked on each element. + Its first argument is the current value in the sequence; second argument is the previous accumulator value. + + The scanned sequence. + + i.ToString()).ScanRight((a, b) => $"({a}+{b})"); + ]]> + The result variable will contain [ "(1+(2+(3+(4+5))))", "(2+(3+(4+5)))", "(3+(4+5))", "(4+5)", "5" ]. + + + This operator uses deferred execution and streams its results. + Source sequence is consumed greedily when an iteration of the resulting sequence begins. + + + + + Performs a right-associative scan (inclusive prefix) on a sequence of elements. + The specified seed value is used as the initial accumulator value. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + The type of the accumulator value. + Source sequence. + The initial accumulator value. + A right-associative accumulator function to be invoked on each element. + The scanned sequence. + + $"({a}+{b})"); + ]]> + The result variable will contain [ "(1+(2+(3+(4+5))))", "(2+(3+(4+5)))", "(3+(4+5))", "(4+5)", "5" ]. + + + This operator uses deferred execution and streams its results. + Source sequence is consumed greedily when an iteration of the resulting sequence begins. + + + + + Divides a sequence into multiple sequences by using a segment detector based on the original sequence + + The type of the elements in the sequence + The sequence to segment + A function, which returns true if the given element begins a new segment, and false otherwise + A sequence of segment, each of which is a portion of the original sequence + + Thrown if either or are . + + + + + Divides a sequence into multiple sequences by using a segment detector based on the original sequence + + The type of the elements in the sequence + The sequence to segment + A function, which returns true if the given element or index indicate a new segment, and false otherwise + A sequence of segment, each of which is a portion of the original sequence + + Thrown if either or are . + + + + + Divides a sequence into multiple sequences by using a segment detector based on the original sequence + + The type of the elements in the sequence + The sequence to segment + A function, which returns true if the given current element, previous element or index indicate a new segment, and false otherwise + A sequence of segment, each of which is a portion of the original sequence + + Thrown if either or are . + + + + + Generates a sequence of integral numbers within the (inclusive) specified range. + If sequence is ascending the step is +1, otherwise -1. + + The value of the first integer in the sequence. + The value of the last integer in the sequence. + An that contains a range of sequential integral numbers. + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { 6, 5, 4, 3, 2, 1, 0 }. + + + + + Generates a sequence of integral numbers within the (inclusive) specified range. + An additional parameter specifies the steps in which the integers of the sequence increase or decrease. + + The value of the first integer in the sequence. + The value of the last integer in the sequence. + The step to define the next number. + An that contains a range of sequential integral numbers. + + When is equal to zero, this operator returns an + infinite sequence where all elements are equals to . + This operator uses deferred execution and streams its results. + + + + The result variable will contain { 6, 4, 2, 0 }. + + + + + Returns a sequence of elements in random order from the original + sequence. + + The type of source sequence elements. + + The sequence from which to return random elements. + + A sequence of elements randomized in + their order. + + + This method uses deferred execution and streams its results. The + source sequence is entirely buffered before the results are + streamed. + + + + + Returns a sequence of elements in random order from the original + sequence. An additional parameter specifies a random generator to be + used for the random selection algorithm. + + The type of source sequence elements. + + The sequence from which to return random elements. + + A random generator used as part of the selection algorithm. + + A sequence of elements randomized in + their order. + + + This method uses deferred execution and streams its results. The + source sequence is entirely buffered before the results are + streamed. + + + + + Bypasses a specified number of elements at the end of the sequence. + + Type of the source sequence + The source sequence. + The number of elements to bypass at the end of the source sequence. + + An containing the source sequence elements except for the bypassed ones at the end. + + + + + Skips items from the input sequence until the given predicate returns true + when applied to the current source item; that item will be the last skipped. + + + + SkipUntil differs from Enumerable.SkipWhile in two respects. Firstly, the sense + of the predicate is reversed: it is expected that the predicate will return false + to start with, and then return true - for example, when trying to find a matching + item in a sequence. + + + Secondly, SkipUntil skips the element which causes the predicate to return true. For + example, in a sequence and with a predicate of + x == 3]]>, the result would be . + + + SkipUntil is as lazy as possible: it will not iterate over the source sequence + until it has to, it won't iterate further than it has to, and it won't evaluate + the predicate until it has to. (This means that an item may be returned which would + actually cause the predicate to throw an exception if it were evaluated, so long as + it comes after the first item causing the predicate to return true.) + + + Type of the source sequence + Source sequence + Predicate used to determine when to stop yielding results from the source. + Items from the source sequence after the predicate first returns true when applied to the item. + or is null + + + + Extracts a contiguous count of elements from a sequence at a particular zero-based + starting index. + + The type of the elements in the source sequence. + The sequence from which to extract elements. + The zero-based index at which to begin slicing. + The number of items to slice out of the index. + + A new sequence containing any elements sliced out from the source sequence. + + + If the starting position or count specified result in slice extending past the end of + the sequence, it will return all elements up to that point. There is no guarantee that + the resulting sequence will contain the number of elements requested - it may have + anywhere from 0 to . + + This method is implemented in an optimized manner for any sequence implementing . + + The result of is identical to: + sequence.Skip(startIndex).Take(count) + + + + + Merges two or more sequences that are in a common order (either ascending or descending) + into a single sequence that preserves that order. + + The type of the elements of the sequence. + The primary sequence with which to merge. + The ordering that all sequences must already exhibit. + A variable argument array of zero or more other sequences + to merge with. + + A merged, order-preserving sequence containing all of the elements of the original + sequences. + + + Using + on sequences that are not ordered or are not in the same order produces undefined + results. + + + uses performs the merge in a deferred, streaming manner. + + Here is an example of a merge, as well as the produced result: + + + + + + Merges two or more sequences that are in a common order (either ascending or descending) + into a single sequence that preserves that order. + + The type of the elements in the sequence. + The primary sequence with which to merge. + The ordering that all sequences must already exhibit. + The comparer used to evaluate the relative order between + elements. + A variable argument array of zero or more other sequences + to merge with. + + A merged, order-preserving sequence containing al of the elements of the original + sequences. + + + + Class used to assist in ensuring that groups of disposable iterators + are disposed - either when Excluded or when the DisposableGroup is disposed. + + + + + Class used to assist in ensuring that groups of disposable iterators + are disposed - either when Excluded or when the DisposableGroup is disposed. + + + + + Splits the source sequence by a separator. + + Type of element in the source sequence. + The source sequence. + Separator element. + A sequence of splits of elements. + + + + Splits the source sequence by a separator given a maximum count of splits. + + Type of element in the source sequence. + The source sequence. + Separator element. + Maximum number of splits. + A sequence of splits of elements. + + + + Splits the source sequence by a separator and then transforms + the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by a separator, given a maximum count + of splits, and then transforms the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Maximum number of splits. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by a separator and then transforms the + splits into results. + + Type of element in the source sequence. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + A sequence of splits of elements. + + + + Splits the source sequence by a separator, given a maximum count + of splits. A parameter specifies how the separator is compared + for equality. + + Type of element in the source sequence. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + Maximum number of splits. + A sequence of splits of elements. + + + + Splits the source sequence by a separator and then transforms the + splits into results. A parameter specifies how the separator is + compared for equality. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by a separator, given a maximum count + of splits, and then transforms the splits into results. A + parameter specifies how the separator is compared for equality. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + Maximum number of splits. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by separator elements identified by a + function. + + Type of element in the source sequence. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + A sequence of splits of elements. + + + + Splits the source sequence by separator elements identified by a + function, given a maximum count of splits. + + Type of element in the source sequence. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + Maximum number of splits. + A sequence of splits of elements. + + + + Splits the source sequence by separator elements identified by + a function and then transforms the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by separator elements identified by + a function, given a maximum count of splits, and then transforms + the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + Maximum number of splits. + Function used to project a split + group of source elements into an element of the resulting sequence. + + A sequence of values typed as . + + + + + Determines whether the beginning of the first sequence is + equivalent to the second sequence, using the default equality + comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + + true if begins with elements + equivalent to . + + + This is the equivalent of + and it calls + using + on pairs of elements at + the same index. + + + + + Determines whether the beginning of the first sequence is + equivalent to the second sequence, using the specified element + equality comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + Equality comparer to use. + + true if begins with elements + equivalent to . + + + This is the equivalent of + and + it calls on pairs + of elements at the same index. + + + + + Returns a sequence of representing all of the subsets of any size + that are part of the original sequence. In mathematics, it is equivalent to the + power set of a set. + + Sequence for which to produce subsets. + The type of the elements in the sequence. + + A sequence of lists that represent the all subsets of the original sequence. + Thrown if is . + + + This operator produces all of the subsets of a given sequence. Subsets are returned in + increasing cardinality, starting with the empty set and terminating with the entire + original sequence. + + Subsets are produced in a deferred, streaming manner; however, each subset is returned + as a materialized list. + + There are 2N subsets of a given sequence, where N ⇒ + sequence.Count(). + + + + + Returns a sequence of representing all subsets of a given size + that are part of the original sequence. In mathematics, it is equivalent to the + combinations or k-subsets of a set. + + Sequence for which to produce subsets. + The size of the subsets to produce. + The type of the elements in the sequence. + + A sequence of lists that represents of K-sized subsets of the original + sequence. + + Thrown if is . + + + Thrown if is less than zero. + + + + + Produces lexographically ordered k-subsets. + + + It uses a snapshot of the original sequence, and an iterative, + reductive swap algorithm to produce all subsets of a predetermined + size less than or equal to the original set size. + + + + + Returns a sequence resulting from applying a function to each + element in the source sequence with additional parameters + indicating whether the element is the first and/or last of the + sequence. + + The type of the elements of . + The type of the element of the returned sequence. + The source sequence. + A function that determines how to + project the each element along with its first or last tag. + + Returns the resulting sequence. + + + This operator uses deferred execution and streams its results. + + + new + { + Number = num, + IsFirst = fst, IsLast = lst + }); + ]]> + The result variable, when iterated over, will yield + { Number = 123, IsFirst = True, IsLast = False }, + { Number = 456, IsFirst = False, IsLast = False } and + { Number = 789, IsFirst = False, IsLast = True } in turn. + + + + + Returns every N-th element of a sequence. + + Type of the source sequence + Source sequence + Number of elements to bypass before returning the next element. + + A sequence with every N-th element of the input sequence. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield 1, 3 and 5, in turn. + + + + + Returns a specified number of contiguous elements from the end of + a sequence. + + The type of the elements of . + The sequence to return the last element of. + The number of elements to return. + + An that contains the specified number of + elements from the end of the input sequence. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield + 56 and 78 in turn. + + + + + Returns items from the input sequence until the given predicate returns true + when applied to the current source item; that item will be the last returned. + + + + TakeUntil differs from Enumerable.TakeWhile in two respects. Firstly, the sense + of the predicate is reversed: it is expected that the predicate will return false + to start with, and then return true - for example, when trying to find a matching + item in a sequence. + + + Secondly, TakeUntil yields the element which causes the predicate to return true. For + example, in a sequence and with a predicate of + x == 3]]>, the result would be . + + + TakeUntil is as lazy as possible: it will not iterate over the source sequence + until it has to, it won't iterate further than it has to, and it won't evaluate + the predicate until it has to. (This means that an item may be returned which would + actually cause the predicate to throw an exception if it were evaluated, so long as + no more items of data are requested.) + + + Type of the source sequence + Source sequence + Predicate used to determine when to stop yielding results from the source. + Items from the source sequence, until the predicate returns true when applied to the item. + or is null + + + + Creates an array from an where a + function is used to determine the index at which an element will + be placed in the array. + + The source sequence for the array. + + A function that maps an element to its index. + + The type of the element in . + + An array that contains the elements from the input sequence. The + size of the array will be as large as the highest index returned + by the plus 1. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array from an where a + function is used to determine the index at which an element will + be placed in the array. The elements are projected into the array + via an additional function. + + The source sequence for the array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array that contains the projected elements from the input + sequence. The size of the array will be as large as the highest + index returned by the plus 1. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array from an where a + function is used to determine the index at which an element will + be placed in the array. The elements are projected into the array + via an additional function. + + The source sequence for the array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array that contains the projected elements from the input + sequence. The size of the array will be as large as the highest + index returned by the plus 1. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array of user-specified length from an + where a function is used to determine + the index at which an element will be placed in the array. + + The source sequence for the array. + The (non-negative) length of the resulting array. + + A function that maps an element to its index. + + The type of the element in . + + An array of size that contains the + elements from the input sequence. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array of user-specified length from an + where a function is used to determine + the index at which an element will be placed in the array. The + elements are projected into the array via an additional function. + + The source sequence for the array. + The (non-negative) length of the resulting array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array of size that contains the + projected elements from the input sequence. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array of user-specified length from an + where a function is used to determine + the index at which an element will be placed in the array. The + elements are projected into the array via an additional function. + + The source sequence for the array. + The (non-negative) length of the resulting array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array of size that contains the + projected elements from the input sequence. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Converts a sequence to a object. + + The type of the elements of . + The source. + + A representing the source. + + This operator uses immediate execution. + + + + Appends elements in the sequence as rows of a given object. + + The type of the elements of . + + The source. + + + A or subclass representing the source. + + This operator uses immediate execution. + + + + Appends elements in the sequence as rows of a given + object with a set of lambda expressions specifying which members (property + or field) of each element in the sequence will supply the column values. + + The type of the elements of . + The source. + Expressions providing access to element members. + + A representing the source. + + This operator uses immediate execution. + + + + Appends elements in the sequence as rows of a given + object with a set of lambda expressions specifying which members (property + or field) of each element in the sequence will supply the column values. + + The type of the elements of . + The type of the input and resulting object. + The source. + The type of object where to add rows + Expressions providing access to element members. + + A or subclass representing the source. + + This operator uses immediate execution. + + + + The resulting array may contain null entries and those represent + columns for which there is no source member supplying a value. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + Type of element in the source sequence + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a from a sequence of + elements. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + elements. An additional + parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + The comparer for keys. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. + + The type of the key. + The type of the value. + The source sequence of couples (tuple of 2). + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. An additional parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of couples (tuple of 2). + The comparer for keys. + + A containing the values + mapped to their keys. + + + + + Returns a of the source items using the default equality + comparer for the type. + + Type of elements in source sequence. + Source sequence + A hash set of the items in the sequence, using the default equality comparer. + is null + + This evaluates the input sequence completely. + + + + + Returns a of the source items using the specified equality + comparer for the type. + + Type of elements in source sequence. + Source sequence + Equality comparer to use; a value of null will cause the type's default equality comparer to be used + A hash set of the items in the sequence, using the default equality comparer. + is null + + This evaluates the input sequence completely. + + + + + Creates a from a sequence of + elements. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + elements. An additional + parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + The comparer for keys. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. + + The type of the key. + The type of the value. + The source sequence of tuples of 2. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. An additional parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of tuples of 2. + The comparer for keys. + + A containing the values + mapped to their keys. + + + + + Traces the elements of a source sequence for diagnostics. + + Type of element in the source sequence + Source sequence whose elements to trace. + + Return the source sequence unmodified. + + + This a pass-through operator that uses deferred execution and + streams the results. + + + + + Traces the elements of a source sequence for diagnostics using + custom formatting. + + Type of element in the source sequence + Source sequence whose elements to trace. + + String to use to format the trace message. If null then the + element value becomes the traced message. + + + Return the source sequence unmodified. + + + This a pass-through operator that uses deferred execution and + streams the results. + + + + + Traces the elements of a source sequence for diagnostics using + a custom formatter. + + Type of element in the source sequence + Source sequence whose elements to trace. + Function used to format each source element into a string. + + Return the source sequence unmodified. + + + This a pass-through operator that uses deferred execution and + streams the results. + + + + + Transposes a sequence of rows into a sequence of columns. + + Type of source sequence elements. + Source sequence to transpose. + + Returns a sequence of columns in the source swapped into rows. + + + If a rows is shorter than a follow it then the shorter row's + elements are skipped in the corresponding column sequences. + This operator uses deferred execution and streams its results. + Source sequence is consumed greedily when an iteration begins. + The inner sequences representing rows are consumed lazily and + resulting sequences of columns are streamed. + + + + The result variable will contain [[10, 20, 30], [11, 31], [32]]. + + + + + Traverses a tree in a breadth-first fashion, starting at a root + node and using a user-defined function to get the children at each + node of the tree. + + The tree node type + The root of the tree to traverse. + + The function that produces the children of each element. + A sequence containing the traversed values. + + + The tree is not checked for loops. If the resulting sequence needs + to be finite then it is the responsibility of + to ensure that loops are not + produced. + + This function defers traversal until needed and streams the + results. + + + + + Traverses a tree in a depth-first fashion, starting at a root node + and using a user-defined function to get the children at each node + of the tree. + + The tree node type. + The root of the tree to traverse. + + The function that produces the children of each element. + A sequence containing the traversed values. + + + The tree is not checked for loops. If the resulting sequence needs + to be finite then it is the responsibility of + to ensure that loops are not + produced. + + This function defers traversal until needed and streams the + results. + + + + + Returns a sequence generated by applying a state to the generator function, + and from its result, determines if the sequence should have a next element, its value, + and the next state in the recursive call. + + Type of state elements. + Type of the elements generated by the generator function. + The type of the elements of the result sequence. + The initial state. + + Function that takes a state and computes the next state and the next element of the sequence. + + + Function to determine if the unfolding should continue based the + result of the function. + + + Function to select the state from the output of the function. + + + Function to select the result from the output of the function. + + A sequence containing the results generated by the function. + + This operator uses deferred execution and streams its results. + + + + + Processes a sequence into a series of sub-sequences representing a windowed subset of + the original. + + The type of the elements of the source sequence. + The sequence to evaluate a sliding window over. + The size (number of elements) in each window. + + A series of sequences representing each sliding window subsequence. + + + The number of sequences returned is: Max(0, sequence.Count() - windowSize) + + 1 + + Returned sub-sequences are buffered, but the overall operation is streamed. + + + + + Creates a left-aligned sliding window of a given size over the + source sequence. + + + The type of the elements of . + + The sequence over which to create the sliding window. + Size of the sliding window. + A sequence representing each sliding window. + + + A window can contain fewer elements than , + especially as it slides over the end of the sequence. + + This operator uses deferred execution and streams its results. + + + "AVG(" + w.ToDelimitedString(",") + ") = " + w.Average()) + .ToDelimitedString(Environment.NewLine)); + + // Output: + // AVG(1,2,3) = 2 + // AVG(2,3,4) = 3 + // AVG(3,4,5) = 4 + // AVG(4,5) = 4.5 + // AVG(5) = 5 + ]]> + + + + + Creates a right-aligned sliding window over the source sequence + of a given size. + + + The type of the elements of . + + The sequence over which to create the sliding window. + Size of the sliding window. + A sequence representing each sliding window. + + + A window can contain fewer elements than , + especially as it slides over the start of the sequence. + + This operator uses deferred execution and streams its results. + + + "AVG(" + w.ToDelimitedString(",") + ") = " + w.Average()) + .ToDelimitedString(Environment.NewLine)); + + // Output: + // AVG(1) = 1 + // AVG(1,2) = 1.5 + // AVG(1,2,3) = 2 + // AVG(2,3,4) = 3 + // AVG(3,4,5) = 4 + ]]> + + + + + Creates a right-aligned sliding window over the source sequence + with a predicate function determining the window range. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + will always be as long as the longest of input sequences where the + default value of each of the shorter sequence element types is used + for padding. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + + Function to apply to each pair of elements. + + A sequence that contains elements of the two input sequences, + combined by . + + + , , or is . + + + n + l); + ]]> + The zipped variable, when iterated over, will yield "1A", + "2B", "3C", "0D" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + will always be as long as the longest of input sequences where the + default value of each of the shorter sequence element types is used + for padding. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + The third sequence. + + Function to apply to each triplet of elements. + + A sequence that contains elements of the three input sequences, + combined by . + + + , , , or is . + + + n + l + c); + ]]> + The zipped variable, when iterated over, will yield "1Aa", + "2Bb", "3Cc", "0Dd", "0e" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + will always be as long as the longest of input sequences where the + default value of each of the shorter sequence element types is used + for padding. + + Type of elements in first sequence + Type of elements in second sequence + Type of elements in third sequence + Type of elements in fourth sequence + Type of elements in result sequence + The first sequence. + The second sequence. + The third sequence. + The fourth sequence. + + Function to apply to each quadruplet of elements. + + A sequence that contains elements of the four input sequences, + combined by . + + + , , , , or is . + + + n + l + c + f); + ]]> + The zipped variable, when iterated over, will yield "1AaTrue", + "2BbFalse", "3CcTrue", "0DdFalse", "0eTrue", "0\0False" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + is as short as the shortest input sequence. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + + Function to apply to each pair of elements. + + A projection of tuples, where each tuple contains the N-th element + from each of the argument sequences. + + + , , or is . + + n + l); + ]]> + The zipped variable, when iterated over, will yield "1A", "2B", "3C", in turn. + + + + If the input sequences are of different lengths, the result sequence + is terminated as soon as the shortest input sequence is exhausted + and remainder elements from the longer sequences are never consumed. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + is as short as the shortest input sequence. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in result sequence. + First sequence + Second sequence + Third sequence + + Function to apply to each triplet of elements. + + A projection of tuples, where each tuple contains the N-th element + from each of the argument sequences. + + , , , or is . + + + c + n + l); + ]]> + The zipped variable, when iterated over, will yield + "98A", "100B", "102C", in turn. + + + + If the input sequences are of different lengths, the result sequence + is terminated as soon as the shortest input sequence is exhausted + and remainder elements from the longer sequences are never consumed. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + is as short as the shortest input sequence. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in fourth sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + The third sequence. + The fourth sequence. + + Function to apply to each quadruplet of elements. + + A projection of tuples, where each tuple contains the N-th element + from each of the argument sequences. + + , , , , or is . + + + n + l + c + f); + ]]> + The zipped variable, when iterated over, will yield + "1AaTrue", "2BbFalse" in turn. + + + + If the input sequences are of different lengths, the result sequence + is terminated as soon as the shortest input sequence is exhausted + and remainder elements from the longer sequences are never consumed. + + + This operator uses deferred execution and streams its results. + + + + + + Provides a set of static methods for querying objects that + implement . + + THE METHODS ARE EXPERIMENTAL. THEY MAY BE UNSTABLE AND + UNTESTED. THEY MAY BE REMOVED FROM A FUTURE MAJOR OR MINOR RELEASE AND + POSSIBLY WITHOUT NOTICE. USE THEM AT YOUR OWN RISK. THE METHODS ARE + PUBLISHED FOR FIELD EXPERIMENTATION TO SOLICIT FEEDBACK ON THEIR + UTILITY AND DESIGN/IMPLEMENTATION DEFECTS. + + + + + Applies two accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Applies three accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the result of the third accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + The third accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Applies four accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the result of the third accumulator. + The type of the result of the fourth accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + The third accumulator. + The fourth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Applies five accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the result of the third accumulator. + The type of the result of the fourth accumulator. + The type of the result of the fifth accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + The third accumulator. + The fourth accumulator. + The fifth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Applies six accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the result of the third accumulator. + The type of the result of the fourth accumulator. + The type of the result of the fifth accumulator. + The type of the result of the sixth accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + The third accumulator. + The fourth accumulator. + The fifth accumulator. + The sixth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Applies seven accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the result of the third accumulator. + The type of the result of the fourth accumulator. + The type of the result of the fifth accumulator. + The type of the result of the sixth accumulator. + The type of the result of the seventh accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + The third accumulator. + The fourth accumulator. + The fifth accumulator. + The sixth accumulator. + The seventh accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Applies eight accumulator queries sequentially in a single + pass over a sequence. + + The type of elements in . + The type of the result of the first accumulator. + The type of the result of the second accumulator. + The type of the result of the third accumulator. + The type of the result of the fourth accumulator. + The type of the result of the fifth accumulator. + The type of the result of the sixth accumulator. + The type of the result of the seventh accumulator. + The type of the result of the eighth accumulator. + The type of the accumulated result. + The source sequence + The first accumulator. + The second accumulator. + The third accumulator. + The fourth accumulator. + The fifth accumulator. + The sixth accumulator. + The seventh accumulator. + The eighth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + An returned by an accumulator function + produced zero or more than a single aggregate result. + + + This operator executes immediately. + + Each accumulator argument is a function that receives an + , which when subscribed to, produces the + items in the sequence and in original + order; the function must then return an + that produces a single aggregate on completion (when + is called. An error is raised + at run-time if the returned by an + accumulator function produces no result or produces more than a + single result. + + + + + + Converts a query whose results evaluate asynchronously to use + sequential instead of concurrent evaluation. + + The type of the source elements. + The source sequence. + The converted sequence. + + + + Returns a query whose results evaluate asynchronously to use a + concurrency limit. + + The type of the source elements. + The source sequence. + + + A query whose results evaluate asynchronously using the given + concurrency limit. + + + + Returns a query whose results evaluate asynchronously and + concurrently with no defined limitation on concurrency. + + The type of the source elements. + The source sequence. + + A query whose results evaluate asynchronously using no defined + limitation on concurrency. + + + + Returns a query whose results evaluate asynchronously and uses the + given scheduler for the workhorse task. + + The type of the source elements. + The source sequence. + The scheduler to use. + + A query whose results evaluate asynchronously and uses the + given scheduler for the workhorse task. + + + + Returns a query whose results evaluate asynchronously but which + are returned in the order of the source. + + The type of the source elements. + The source sequence. + + A query whose results evaluate asynchronously but which + are returned in the order of the source. + + Internally, the asynchronous operations will be done concurrently + but the results will be yielded in order. + + + + + Returns a query whose results evaluate asynchronously but which + are returned without guarantee of the source order. + + The type of the source elements. + The source sequence. + + A query whose results evaluate asynchronously but which + are returned without guarantee of the source order. + + + + Returns a query whose results evaluate asynchronously and a Boolean + argument indicating whether the source order of the results is + preserved. + + The type of the source elements. + The source sequence. + + A Boolean where true means results are in source order and + false means that results can be delivered in order of + efficiency. + + A query whose results evaluate asynchronously and returns the + results ordered or unordered based on . + + + + + Creates a sequence query that streams the result of each task in + the source sequence as it completes asynchronously. + + + The type of each task's result as well as the type of the elements + of the resulting sequence. + The source sequence of tasks. + + A sequence query that streams the result of each task in + as it completes asynchronously. + + + + This method uses deferred execution semantics. The results are + yielded as each asynchronous task completes and, by default, + not guaranteed to be based on the source sequence order. If order + is important, compose further with + . + + This method starts a new task where the tasks are awaited. If the + resulting sequence is partially consumed then there's a good chance + that some tasks will be wasted, those that are in flight. + + The tasks in are already assumed to be in + flight therefore changing concurrency options via + , or + will only change how many + tasks are awaited at any given moment, not how many will be + kept in flight. For the latter effect, use the other overload. + + + + + + Creates a sequence query that streams the result of each task in + the source sequence as it completes asynchronously. A + is passed for each asynchronous + evaluation to abort any asynchronous operations in flight if the + sequence is not fully iterated. + + The type of the source elements. + The type of the result elements. + The source sequence. + A function to begin the asynchronous + evaluation of each element, the second parameter of which is a + that can be used to abort + asynchronous operations. + + A sequence query that stream its results as they are + evaluated asynchronously. + + + + This method uses deferred execution semantics. The results are + yielded as each asynchronous evaluation completes and, by default, + not guaranteed to be based on the source sequence order. If order + is important, compose further with + . + + This method starts a new task where the asynchronous evaluations + take place and awaited. If the resulting sequence is partially + consumed then there's a good chance that some projection work will + be wasted and a cooperative effort is done that depends on the + function (via a + as its second argument) to cancel + those in flight. + + The function should be designed to be + thread-agnostic. + + The task returned by should be started + when the function is called (and not just a mere projection) + otherwise changing concurrency options via + , or + will only change how many + tasks are awaited at any given moment, not how many will be + kept in flight. + + + + + + Awaits completion of all asynchronous evaluations irrespective of + whether they succeed or fail. An additional argument specifies a + function that projects the final result given the source item and + completed task. + + The type of the source elements. + The type of the task's result. + The type of the result elements. + The source sequence. + A function to begin the asynchronous + evaluation of each element, the second parameter of which is a + that can be used to abort + asynchronous operations. + A function that projects the final + result given the source item and its asynchronous completion + result. + + A sequence query that stream its results as they are + evaluated asynchronously. + + + + This method uses deferred execution semantics. The results are + yielded as each asynchronous evaluation completes and, by default, + not guaranteed to be based on the source sequence order. If order + is important, compose further with + . + + This method starts a new task where the asynchronous evaluations + take place and awaited. If the resulting sequence is partially + consumed then there's a good chance that some projection work will + be wasted and a cooperative effort is done that depends on the + function (via a + as its second argument) to cancel + those in flight. + + The function should be designed to be + thread-agnostic. + + The task returned by should be started + when the function is called (and not just a mere projection) + otherwise changing concurrency options via + , or + will only change how many + tasks are awaited at any given moment, not how many will be + kept in flight. + + + + + + Creates a sequence that lazily caches the source as it is iterated + for the first time, reusing the cache thereafter for future + re-iterations. If the source is already cached or buffered then it + is returned verbatim. + + + Type of elements in . + The source sequence. + + Returns a sequence that corresponds to a cached version of the input + sequence. + + + is . + + + The returned will cache items from + in a thread-safe manner. Each thread can + call its to acquire an + iterator but the same iterator should not be used simultaneously + from multiple threads. The sequence supplied in is not expected to be thread-safe but it is required + to be thread-agnostic because different threads (though never + simultaneously) may iterate over the sequence. + + + + + Returns a tuple with the cardinality of the sequence and the + single element in the sequence if it contains exactly one element. + similar to . + + The source sequence. + + The value that is returned in the tuple if the sequence has zero + elements. + + The value that is returned in the tuple if the sequence has a + single element only. + + The value that is returned in the tuple if the sequence has two or + more elements. + + The type of the elements of . + + The type that expresses cardinality. + + A tuple containing the identified + and either the single value of in the sequence + or its default value. + + This operator uses immediate execution, but never consumes more + than two elements from the sequence. + + + + + Returns a result projected from the the cardinality of the sequence + and the single element in the sequence if it contains exactly one + element. + + The source sequence. + + The value that is passed as the first argument to + if the sequence has zero + elements. + + The value that is passed as the first argument to + if the sequence has a + single element only. + + The value that is passed as the first argument to + if the sequence has two or + more elements. + + A function that receives the cardinality and, if the + sequence has just one element, the value of that element as + argument and projects a resulting value of type + . + + The type of the elements of . + + The type that expresses cardinality. + + The type of the result value returned by the + function. + + The value returned by . + + + This operator uses immediate execution, but never consumes more + than two elements from the sequence. + + + + + Represents options for a query whose results evaluate asynchronously. + + + + + The default options used for a query whose results evaluate + asynchronously. + + + + + Gets a positive (non-zero) integer that specifies the maximum + number of asynchronous operations to have in-flight concurrently + or null to mean unlimited concurrency. + + + + + Get the scheduler to be used for any workhorse task. + + + + + Get a Boolean that determines whether results should be ordered + the same as the source. + + + + + Returns new options with the given concurrency limit. + + + The maximum concurrent asynchronous operation to keep in flight. + Use null to mean unbounded concurrency. + Options with the new setting. + + + + Returns new options with the given scheduler. + + + The scheduler to use to for the workhorse task. + Options with the new setting. + + + + Returns new options with the given Boolean indicating whether or + not the results should be returned in the order of the source. + + + A Boolean where true means results are in source order and + false means that results can be delivered in order of + efficiency. + Options with the new setting. + + + + Represents a sequence whose elements or results evaluate asynchronously. + + + The type of the source elements. + + + + The options that determine how the sequence evaluation behaves when + it is iterated. + + + + + Returns a new query that will use the given options. + + The new options to use. + + Returns a new query using the supplied options. + + + + + Represents a union over list types implementing either or , + allowing both to be treated the same. + + + + + A minimal wrapper that + allows a null key. + + + + Acquire extension. + + + + Ensures that a source sequence of + objects are all acquired successfully. If the acquisition of any + one fails then those successfully + acquired till that point are disposed. + + Type of elements in sequence. + Source sequence of objects. + + Returns an array of all the acquired + objects in source order. + + + This operator executes immediately. + + + + Aggregate extension. + + + + Applies two accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies three accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies four accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies five accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies six accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of sixth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + The seed value for the sixth accumulator. + The sixth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies seven accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of sixth accumulator value. + The type of seventh accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + The seed value for the sixth accumulator. + The sixth accumulator. + The seed value for the seventh accumulator. + The seventh accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + + Applies eight accumulators sequentially in a single pass over a + sequence. + + The type of elements in . + The type of first accumulator value. + The type of second accumulator value. + The type of third accumulator value. + The type of fourth accumulator value. + The type of fifth accumulator value. + The type of sixth accumulator value. + The type of seventh accumulator value. + The type of eighth accumulator value. + The type of the accumulated result. + The source sequence + The seed value for the first accumulator. + The first accumulator. + The seed value for the second accumulator. + The second accumulator. + The seed value for the third accumulator. + The third accumulator. + The seed value for the fourth accumulator. + The fourth accumulator. + The seed value for the fifth accumulator. + The fifth accumulator. + The seed value for the sixth accumulator. + The sixth accumulator. + The seed value for the seventh accumulator. + The seventh accumulator. + The seed value for the eighth accumulator. + The eighth accumulator. + + A function that projects a single result given the result of each + accumulator. + The value returned by . + + This operator executes immediately. + + + + AggregateRight extension. + + + + Applies a right-associative accumulator function over a sequence. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + Source sequence. + A right-associative accumulator function to be invoked on each element. + The final accumulator value. + + i.ToString()).AggregateRight((a, b) => $"({a}/{b})"); + ]]> + The result variable will contain "(1/(2/(3/(4/5))))". + + + This operator executes immediately. + + + + + Applies a right-associative accumulator function over a sequence. + The specified seed value is used as the initial accumulator value. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + The type of the accumulator value. + Source sequence. + The initial accumulator value. + A right-associative accumulator function to be invoked on each element. + The final accumulator value. + + $"({a}/{b})"); + ]]> + The result variable will contain "(1/(2/(3/(4/(5/6)))))". + + + This operator executes immediately. + + + + + Applies a right-associative accumulator function over a sequence. + The specified seed value is used as the initial accumulator value, + and the specified function is used to select the result value. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + The type of the accumulator value. + The type of the resulting value. + Source sequence. + The initial accumulator value. + A right-associative accumulator function to be invoked on each element. + A function to transform the final accumulator value into the result value. + The transformed final accumulator value. + + $"({a}/{b})", str => str.Length); + ]]> + The result variable will contain 21. + + + This operator executes immediately. + + + + Append extension. + + + + Returns a sequence consisting of the head elements and the given tail element. + + Type of sequence + All elements of the head. Must not be null. + Tail element of the new sequence. + A sequence consisting of the head elements and the given tail element. + This operator uses deferred execution and streams its results. + + + Assert extension. + + + + Asserts that all elements of a sequence meet a given condition + otherwise throws an object. + + Type of elements in sequence. + Source sequence. + Function that asserts an element of the sequence for a condition. + + Returns the original sequence. + + The input sequence + contains an element that does not meet the condition being + asserted. + + This operator uses deferred execution and streams its results. + + + + + Asserts that all elements of a sequence meet a given condition + otherwise throws an object. + + Type of elements in sequence. + Source sequence. + Function that asserts an element of the input sequence for a condition. + Function that returns the object to throw. + + Returns the original sequence. + + + This operator uses deferred execution and streams its results. + + + + AssertCount extension. + + + + Asserts that a source sequence contains a given count of elements. + + Type of elements in sequence. + Source sequence. + Count to assert. + + Returns the original sequence as long it is contains the + number of elements specified by . + Otherwise it throws . + + + This operator uses deferred execution and streams its results. + + + + + Asserts that a source sequence contains a given count of elements. + A parameter specifies the exception to be thrown. + + Type of elements in sequence. + Source sequence. + Count to assert. + + Function that receives a comparison (a negative integer if actual + count is less than and a positive integer + if actual count is greater than ) and + as arguments and which returns the + object to throw. + + Returns the original sequence as long it is contains the + number of elements specified by . + Otherwise it throws the object + returned by calling . + + + This operator uses deferred execution and streams its results. + + + + AtLeast extension. + + + + Determines whether or not the number of elements in the sequence is greater than + or equal to the given integer. + + Element type of sequence + The source sequence + The minimum number of items a sequence must have for this + function to return true + is null + is negative + true if the number of elements in the sequence is greater than + or equal to the given integer or false otherwise. + + + The result variable will contain true. + + + + AtMost extension. + + + + Determines whether or not the number of elements in the sequence is lesser than + or equal to the given integer. + + Element type of sequence + The source sequence + The maximum number of items a sequence must have for this + function to return true + is null + is negative + true if the number of elements in the sequence is lesser than + or equal to the given integer or false otherwise. + + + The result variable will contain false. + + + + Backsert extension. + + + + Inserts the elements of a sequence into another sequence at a + specified index from the tail of the sequence, where zero always + represents the last position, one represents the second-last + element, two represents the third-last element and so on. + + + Type of elements in all sequences. + The source sequence. + The sequence that will be inserted. + + The zero-based index from the end of where + elements from should be inserted. + . + + A sequence that contains the elements of + plus the elements of inserted at + the given index from the end of . + + is null. + is null. + + Thrown if is negative. + + + Thrown lazily if is greater than the + length of . The validation occurs when + the resulting sequence is iterated. + + + This method uses deferred execution and streams its results. + + + + Batch extension. + + + + Batches the source sequence into sized buckets. + + Type of elements in sequence. + The source sequence. + Size of buckets. + A sequence of equally sized buckets containing elements of the source collection. + + + This operator uses deferred execution and streams its results + (buckets are streamed but their content buffered). + + When more than one bucket is streamed, all buckets except the last + is guaranteed to have elements. The last + bucket may be smaller depending on the remaining elements in the + sequence. + + Each bucket is pre-allocated to elements. + If is set to a very large value, e.g. + to effectively disable batching by just + hoping for a single bucket, then it can lead to memory exhaustion + (). + + + + + + Batches the source sequence into sized buckets and applies a projection to each bucket. + + Type of elements in sequence. + Type of result returned by . + The source sequence. + Size of buckets. + The projection to apply to each bucket. + A sequence of projections on equally sized buckets containing elements of the source collection. + + + This operator uses deferred execution and streams its results + (buckets are streamed but their content buffered). + + + When more than one bucket is streamed, all buckets except the last + is guaranteed to have elements. The last + bucket may be smaller depending on the remaining elements in the + sequence. + Each bucket is pre-allocated to elements. + If is set to a very large value, e.g. + to effectively disable batching by just + hoping for a single bucket, then it can lead to memory exhaustion + (). + + + + + Cartesian extension. + + + + Returns the Cartesian product of two sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of three sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of four sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of five sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of six sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + The sixth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of seven sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + The sixth sequence of elements. + The seventh sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + + Returns the Cartesian product of eight sequences by enumerating all + possible combinations of one item from each sequence, and applying + a user-defined projection to the items in a given combination. + + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of . + + The type of the elements of the result sequence. + The first sequence of elements. + The second sequence of elements. + The third sequence of elements. + The fourth sequence of elements. + The fifth sequence of elements. + The sixth sequence of elements. + The seventh sequence of elements. + The eighth sequence of elements. + A projection function that combines + elements from all of the sequences. + A sequence of elements returned by + . + + + The method returns items in the same order as a nested foreach + loop, but all sequences except for are + cached when iterated over. The cache is then re-used for any + subsequent iterations. + + This method uses deferred execution and stream its results. + + + + Choose extension. + + + + Applies a function to each element of the source sequence and + returns a new sequence of result elements for source elements + where the function returns a couple (2-tuple) having a true + as its first element and result as the second. + + + The type of the elements in . + + The type of the elements in the returned sequence. + The source sequence. + The function that is applied to each source + element. + A sequence elements. + + This method uses deferred execution semantics and streams its + results. + + + (int.TryParse(s, out var n), n)); + ]]> + The xs variable will be a sequence of the integers 2, 3, 4, + 6, 7 and 9. + + + + CompareCount extension. + + + + Compares two sequences and returns an integer that indicates whether the first sequence + has fewer, the same or more elements than the second sequence. + + Element type of the first sequence + Element type of the second sequence + The first sequence + The second sequence + is null + is null + -1 if the first sequence has the fewest elements, 0 if the two sequences have the same number of elements + or 1 if the first sequence has the most elements. + + + The result variable will contain 1. + + + + Consume extension. + + + + Completely consumes the given sequence. This method uses immediate execution, + and doesn't store any data during execution. + + Element type of the sequence + Source to consume + + + CountBetween extension. + + + + Determines whether or not the number of elements in the sequence is between + an inclusive range of minimum and maximum integers. + + Element type of sequence + The source sequence + The minimum number of items a sequence must have for this + function to return true + The maximum number of items a sequence must have for this + function to return true + is null + is negative or is less than min + true if the number of elements in the sequence is between (inclusive) + the min and max given integers or false otherwise. + + + The result variable will contain false. + + + + CountBy extension. + + + + Applies a key-generating function to each element of a sequence and returns a sequence of + unique keys and their number of occurrences in the original sequence. + + Type of the elements of the source sequence. + Type of the projected element. + Source sequence. + Function that transforms each item of source sequence into a key to be compared against the others. + A sequence of unique keys and their number of occurrences in the original sequence. + + + + Applies a key-generating function to each element of a sequence and returns a sequence of + unique keys and their number of occurrences in the original sequence. + An additional argument specifies a comparer to use for testing equivalence of keys. + + Type of the elements of the source sequence. + Type of the projected element. + Source sequence. + Function that transforms each item of source sequence into a key to be compared against the others. + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for is used. + A sequence of unique keys and their number of occurrences in the original sequence. + + + CountDown extension. + + + + Provides a countdown counter for a given count of elements at the + tail of the sequence where zero always represents the last element, + one represents the second-last element, two represents the + third-last element and so on. + + + The type of elements of + + The type of elements of the resulting sequence. + The source sequence. + Count of tail elements of + to count down. + + A function that receives the element and the current countdown + value for the element and which returns those mapped to a + result returned in the resulting sequence. For elements before + the last , the countdown value is + null. + + A sequence of results returned by + . + + This method uses deferred execution semantics and streams its + results. At most, elements of the source + sequence may be buffered at any one time unless + is a collection or a list. + + + + DistinctBy extension. + + + + Returns all distinct elements of the given source, where "distinctness" + is determined via a projection and the default equality comparer for the projected type. + + + This operator uses deferred execution and streams the results, although + a set of already-seen keys is retained. If a key is seen multiple times, + only the first element with that key is returned. + + Type of the source sequence + Type of the projected element + Source sequence + Projection for determining "distinctness" + A sequence consisting of distinct elements from the source sequence, + comparing them by the specified key projection. + + + + Returns all distinct elements of the given source, where "distinctness" + is determined via a projection and the specified comparer for the projected type. + + + This operator uses deferred execution and streams the results, although + a set of already-seen keys is retained. If a key is seen multiple times, + only the first element with that key is returned. + + Type of the source sequence + Type of the projected element + Source sequence + Projection for determining "distinctness" + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TSource is used. + A sequence consisting of distinct elements from the source sequence, + comparing them by the specified key projection. + + + Duplicates extension. + + + + Returns all duplicate elements of the given source. + + The source sequence. + The type of the elements in the source sequence. + is . + All elements that are duplicated. + This operator uses deferred execution and streams its results. + + + + Returns all duplicate elements of the given source, using the specified equality + comparer. + + The source sequence. + + The equality comparer to use to determine whether one + equals another. If , the default equality comparer for + is used. + The type of the elements in the source sequence. + is . + All elements that are duplicated. + This operator uses deferred execution and streams its results. + + + EndsWith extension. + + + + Determines whether the end of the first sequence is equivalent to + the second sequence, using the default equality comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + + true if ends with elements + equivalent to . + + + This is the equivalent of + and + it calls using + on pairs of elements at + the same index. + + + + + Determines whether the end of the first sequence is equivalent to + the second sequence, using the specified element equality comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + Equality comparer to use. + + true if ends with elements + equivalent to . + + + This is the equivalent of + and it calls + on pairs of + elements at the same index. + + + + EquiZip extension. + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. An exception is thrown + if the input sequences are of different lengths. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + + Function to apply to each pair of elements. + + A sequence that contains elements of the two input sequences, + combined by . + + + The input sequences are of different lengths. + + + , , or is . + + + n + l); + ]]> + The zipped variable, when iterated over, will yield "1A", + "2B", "3C", "4D" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. An exception is thrown + if the input sequences are of different lengths. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + The third sequence. + + Function to apply to each triplet of elements. + + A sequence that contains elements of the three input sequences, + combined by . + + + The input sequences are of different lengths. + + + , , , or is . + + + n + l + c); + ]]> + The zipped variable, when iterated over, will yield "1Aa", + "2Bb", "3Cc", "4Dd" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. An exception is thrown + if the input sequences are of different lengths. + + Type of elements in first sequence + Type of elements in second sequence + Type of elements in third sequence + Type of elements in fourth sequence + Type of elements in result sequence + The first sequence. + The second sequence. + The third sequence. + The fourth sequence. + + Function to apply to each quadruplet of elements. + + A sequence that contains elements of the four input sequences, + combined by . + + + The input sequences are of different lengths. + + + , , , , or is . + + + n + l + c + f); + ]]> + The zipped variable, when iterated over, will yield "1AaTrue", + "2BbFalse", "3CcTrue", "4DdFalse" in turn. + + + This operator uses deferred execution and streams its results. + + + + Evaluate extension. + + + + Returns a sequence containing the values resulting from invoking (in order) each function in the source sequence of functions. + + + This operator uses deferred execution and streams the results. + If the resulting sequence is enumerated multiple times, the functions will be + evaluated multiple times too. + + The type of the object returned by the functions. + The functions to evaluate. + A sequence with results from invoking . + When is null. + + + Exactly extension. + + + + Determines whether or not the number of elements in the sequence is equals to the given integer. + + Element type of sequence + The source sequence + The exactly number of items a sequence must have for this + function to return true + is null + is negative + true if the number of elements in the sequence is equals + to the given integer or false otherwise. + + + The result variable will contain true. + + + + ExceptBy extension. + + + + Returns the set of elements in the first sequence which aren't + in the second sequence, according to a given key selector. + + + This is a set operation; if multiple elements in have + equal keys, only the first such element is returned. + This operator uses deferred execution and streams the results, although + a set of keys from is immediately selected and retained. + + The type of the elements in the input sequences. + The type of the key returned by . + The sequence of potentially included elements. + The sequence of elements whose keys may prevent elements in + from being returned. + The mapping from source element to key. + A sequence of elements from whose key was not also a key for + any element in . + + + + Returns the set of elements in the first sequence which aren't + in the second sequence, according to a given key selector. + + + This is a set operation; if multiple elements in have + equal keys, only the first such element is returned. + This operator uses deferred execution and streams the results, although + a set of keys from is immediately selected and retained. + + The type of the elements in the input sequences. + The type of the key returned by . + The sequence of potentially included elements. + The sequence of elements whose keys may prevent elements in + from being returned. + The mapping from source element to key. + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TSource is used. + A sequence of elements from whose key was not also a key for + any element in . + + + Exclude extension. + + + + Excludes a contiguous number of elements from a sequence starting + at a given index. + + The type of the elements of the sequence + The sequence to exclude elements from + The zero-based index at which to begin excluding elements + The number of elements to exclude + A sequence that excludes the specified portion of elements + + + FallbackIfEmpty extension. + + + + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + + The type of the elements in the sequences. + The source sequence. + The value to return in a singleton + collection if is empty. + + An that contains + if is empty; otherwise, . + + + x == 100).FallbackIfEmpty(-1).Single(); + ]]> + The result variable will contain -1. + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + The alternate sequence that is returned + if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence from an array of values. + + The type of the elements in the sequences. + The source sequence. + The array that is returned as the alternate + sequence if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + First value of the alternate sequence that + is returned if is empty. + Second value of the alternate sequence that + is returned if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + First value of the alternate sequence that + is returned if is empty. + Second value of the alternate sequence that + is returned if is empty. + Third value of the alternate sequence that + is returned if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + + Returns the elements of a sequence, but if it is empty then + returns an alternate sequence of values. + + The type of the elements in the sequences. + The source sequence. + First value of the alternate sequence that + is returned if is empty. + Second value of the alternate sequence that + is returned if is empty. + Third value of the alternate sequence that + is returned if is empty. + Fourth value of the alternate sequence that + is returned if is empty. + + An that containing fallback values + if is empty; otherwise, . + + + + FillBackward extension. + + + + Returns a sequence with each null reference or value in the source + replaced with the following non-null reference or value in + that sequence. + + The source sequence. + Type of the elements in the source sequence. + + An with null references or values + replaced. + + + This method uses deferred execution semantics and streams its + results. If references or values are null at the end of the + sequence then they remain null. + + + + + Returns a sequence with each missing element in the source replaced + with the following non-missing element in that sequence. An + additional parameter specifies a function used to determine if an + element is considered missing or not. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + Type of the elements in the source sequence. + + An with missing values replaced. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the end of the sequence then + they remain missing. + + + + + Returns a sequence with each missing element in the source replaced + with the following non-missing element in that sequence. Additional + parameters specify two functions, one used to determine if an + element is considered missing or not and another to provide the + replacement for the missing element. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + The function used to produce the element + that will replace the missing one. Its first argument receives the + current element considered missing while the second argument + receives the next non-missing element. + Type of the elements in the source sequence. + An with missing values replaced. + + An with missing elements filled. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the end of the sequence then + they remain missing. + + + + FillForward extension. + + + + Returns a sequence with each null reference or value in the source + replaced with the previous non-null reference or value seen in + that sequence. + + The source sequence. + Type of the elements in the source sequence. + + An with null references or values + replaced. + + + This method uses deferred execution semantics and streams its + results. If references or values are null at the start of the + sequence then they remain null. + + + + + Returns a sequence with each missing element in the source replaced + with the previous non-missing element seen in that sequence. An + additional parameter specifies a function used to determine if an + element is considered missing or not. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + Type of the elements in the source sequence. + + An with missing values replaced. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the start of the sequence then + they remain missing. + + + + + Returns a sequence with each missing element in the source replaced + with one based on the previous non-missing element seen in that + sequence. Additional parameters specify two functions, one used to + determine if an element is considered missing or not and another + to provide the replacement for the missing element. + + The source sequence. + The function used to determine if + an element in the sequence is considered missing. + The function used to produce the element + that will replace the missing one. Its first argument receives the + current element considered missing while the second argument + receives the previous non-missing element. + Type of the elements in the source sequence. + + An with missing values replaced. + + + This method uses deferred execution semantics and streams its + results. If elements are missing at the start of the sequence then + they remain missing. + + + + First extension. + + + + Returns the first element of a sequence. + + + The type of the elements of . + The input sequence. + + The input sequence is empty. + + The first element of the input sequence. + + + + FirstOrDefault extension. + + + + Returns the first element of a sequence, or a default value if the + sequence contains no elements. + + + The type of the elements of . + The input sequence. + + Default value of type if source is empty; + otherwise, the first element in source. + + + + Flatten extension. + + + + Flattens a sequence containing arbitrarily-nested sequences. + + The sequence that will be flattened. + + A sequence that contains the elements of + and all nested sequences (except strings). + + is null. + + + + Flattens a sequence containing arbitrarily-nested sequences. An + additional parameter specifies a predicate function used to + determine whether a nested should be + flattened or not. + + The sequence that will be flattened. + + A function that receives each element that implements + and indicates if its elements should be + recursively flattened into the resulting sequence. + + + A sequence that contains the elements of + and all nested sequences for which the predicate function + returned true. + + + is null. + + is null. + + + + Flattens a sequence containing arbitrarily-nested sequences. An + additional parameter specifies a function that projects an inner + sequence via a property of an object. + + The sequence that will be flattened. + + A function that receives each element of the sequence as an object + and projects an inner sequence to be flattened. If the function + returns null then the object argument is considered a leaf + of the flattening process. + + + A sequence that contains the elements of + and all nested sequences projected via the + function. + + + is null. + + is null. + + + Fold extension. + + + + Returns the result of applying a function to a sequence of + 1 element. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 1 element. + + + + Returns the result of applying a function to a sequence of + 2 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 2 elements. + + + + Returns the result of applying a function to a sequence of + 3 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 3 elements. + + + + Returns the result of applying a function to a sequence of + 4 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 4 elements. + + + + Returns the result of applying a function to a sequence of + 5 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 5 elements. + + + + Returns the result of applying a function to a sequence of + 6 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 6 elements. + + + + Returns the result of applying a function to a sequence of + 7 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 7 elements. + + + + Returns the result of applying a function to a sequence of + 8 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 8 elements. + + + + Returns the result of applying a function to a sequence of + 9 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 9 elements. + + + + Returns the result of applying a function to a sequence of + 10 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 10 elements. + + + + Returns the result of applying a function to a sequence of + 11 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 11 elements. + + + + Returns the result of applying a function to a sequence of + 12 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 12 elements. + + + + Returns the result of applying a function to a sequence of + 13 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 13 elements. + + + + Returns the result of applying a function to a sequence of + 14 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 14 elements. + + + + Returns the result of applying a function to a sequence of + 15 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 15 elements. + + + + Returns the result of applying a function to a sequence of + 16 elements. + + + This operator uses immediate execution and effectively buffers + as many items of the source sequence as necessary. + + Type of element in the source sequence. + Type of the result. + The sequence of items to fold. + Function to apply to the elements in the sequence. + The folded value returned by . + + Either or is . + + does not contain exactly 16 elements. + + + ForEach extension. + + + + Immediately executes the given action on each element in the source sequence. + + The type of the elements in the sequence + The sequence of elements + The action to execute on each element + + + + Immediately executes the given action on each element in the source sequence. + Each element's index is used in the logic of the action. + + The type of the elements in the sequence + The sequence of elements + The action to execute on each element; the second parameter + of the action represents the index of the source element. + + + FullGroupJoin extension. + + + + Performs a Full Group Join between the and sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + A sequence of elements joined from and . + + + + + Performs a Full Group Join between the and sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TKey is used. + A sequence of elements joined from and . + + + + + Performs a full group-join between two sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + The type of the elements of the resulting sequence + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + Function to apply to each pair of elements plus the key + A sequence of elements joined from and . + + + + + Performs a full group-join between two sequences. + + + This operator uses deferred execution and streams the results. + The results are yielded in the order of the elements found in the first sequence + followed by those found only in the second. In addition, the callback responsible + for projecting the results is supplied with sequences which preserve their source order. + + The type of the elements in the first input sequence + The type of the elements in the second input sequence + The type of the key to use to join + The type of the elements of the resulting sequence + First sequence + Second sequence + The mapping from first sequence to key + The mapping from second sequence to key + Function to apply to each pair of elements plus the key + The equality comparer to use to determine whether or not keys are equal. + If null, the default equality comparer for TKey is used. + A sequence of elements joined from and . + + + + FullJoin extension. + + + + Performs a full outer join on two homogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Performs a full outer join on two homogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Performs a full outer join on two heterogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a full + outer join of the two input sequences. + + + + Performs a full outer join on two heterogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence to join fully. + + The second sequence to join fully. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a full + outer join of the two input sequences. + + + GroupAdjacent extension. + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. + + The type of the elements of + . + The type of the key returned by + . + A sequence whose elements to group. + A function to extract the key for each + element. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements in the same order as found in the + source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function and compares the keys by using a + specified comparer. + + The type of the elements of + . + The type of the key returned by + . + A sequence whose elements to group. + A function to extract the key for each + element. + An to + compare keys. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements in the same order as found in the + source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function and projects the elements for + each group by using a specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting groupings. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each source + element to an element in the resulting grouping. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements (of type ) + in the same order as found in the source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. The keys are compared by using + a comparer and each group's elements are projected by using a + specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting sequence. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each key and + associated source elements to a result object. + A collection of elements of type + where each element represents + a projection over a group and its key. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. The keys are compared by using + a comparer and each group's elements are projected by using a + specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting groupings. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each source + element to an element in the resulting grouping. + An to + compare keys. + A sequence of groupings where each grouping + () contains the key + and the adjacent elements (of type ) + in the same order as found in the source sequence. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + + Groups the adjacent elements of a sequence according to a + specified key selector function. The keys are compared by using + a comparer and each group's elements are projected by using a + specified function. + + The type of the elements of + . + The type of the key returned by + . + The type of the elements in the + resulting sequence. + A sequence whose elements to group. + A function to extract the key for each + element. + A function to map each key and + associated source elements to a result object. + An to + compare keys. + A collection of elements of type + where each element represents + a projection over a group and its key. + + This method is implemented by using deferred execution and + streams the groupings. The grouping elements, however, are + buffered. Each grouping is therefore yielded as soon as it + is complete and before the next grouping occurs. + + + + Index extension. + + + + Returns a sequence of + where the key is the zero-based index of the value in the source + sequence. + + Type of elements in sequence. + The source sequence. + A sequence of . + This operator uses deferred execution and streams its + results. + + + + Returns a sequence of + where the key is the index of the value in the source sequence. + An additional parameter specifies the starting index. + + Type of elements in sequence. + The source sequence. + + A sequence of . + This operator uses deferred execution and streams its + results. + + + IndexBy extension. + + + + Applies a key-generating function to each element of a sequence and + returns a sequence that contains the elements of the original + sequence as well its key and index inside the group of its key. + + Type of the source sequence elements. + Type of the projected key. + Source sequence. + + Function that projects the key given an element in the source sequence. + + A sequence of elements paired with their index within the key-group. + The index is the key and the element is the value of the pair. + + + + + Applies a key-generating function to each element of a sequence and + returns a sequence that contains the elements of the original + sequence as well its key and index inside the group of its key. + An additional parameter specifies a comparer to use for testing the + equivalence of keys. + + Type of the source sequence elements. + Type of the projected key. + Source sequence. + + Function that projects the key given an element in the source sequence. + + The equality comparer to use to determine whether or not keys are + equal. If null, the default equality comparer for + is used. + + A sequence of elements paired with their index within the key-group. + The index is the key and the element is the value of the pair. + + + + Insert extension. + + + + Inserts the elements of a sequence into another sequence at a + specified index. + + Type of the elements of the source sequence. + The source sequence. + The sequence that will be inserted. + + The zero-based index at which to insert elements from + . + + A sequence that contains the elements of + plus the elements of inserted at + the given index. + + is null. + is null. + + Thrown if is negative. + + + Thrown lazily if is greater than the + length of . The validation occurs when + yielding the next element after having iterated + entirely. + + + + Interleave extension. + + + + Interleaves the elements of two or more sequences into a single sequence, skipping + sequences as they are consumed. + + The type of the elements of the source sequences. + The first sequence in the interleave group. + The other sequences in the interleave group. + A sequence of interleaved elements from all of the source sequences. + + + Interleave combines sequences by visiting each in turn, and returning the first element + of each, followed by the second, then the third, and so on. So, for example: + + + This operator behaves in a deferred and streaming manner. + + When sequences are of unequal length, this method will skip those sequences that have + been fully consumed and continue interleaving the remaining sequences. + + The sequences are interleaved in the order that they appear in the collection, with as the first + sequence. + + + + Lag extension. + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + negative offset. + + The type of the elements of the source sequence. + The type of the elements of the result sequence. + The sequence over which to evaluate lag. + The offset (expressed as a positive number) by which to lag each + value of the sequence. + A projection function which accepts the current and lagged + items (in that order) and returns a result. + + A sequence produced by projecting each element of the sequence with its lagged + pairing. + + + This operator evaluates in a deferred and streaming manner. + + For elements prior to the lag offset, default(T) is used as the lagged + value. + + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + negative offset. + + The type of the elements of the source sequence. + The type of the elements of the result sequence. + The sequence over which to evaluate lag. + The offset (expressed as a positive number) by which to lag each + value of the sequence. + A default value supplied for the lagged value prior to the + lag offset. + A projection function which accepts the current and lagged + items (in that order) and returns a result. + + A sequence produced by projecting each element of the sequence with its lagged + pairing. + + This operator evaluates in a deferred and streaming manner. + + + + Last extension. + + + + Returns the last element of a sequence. + + + The type of the elements of . + The input sequence. + + The input sequence is empty. + + The last element of the input sequence. + + + + LastOrDefault extension. + + + + Returns the last element of a sequence, or a default value if the + sequence contains no elements. + + + The type of the elements of . + The input sequence. + + Default value of type if source is empty; + otherwise, the last element in source. + + + + Lead extension. + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + positive offset. + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + The sequence over which to evaluate lead. + The offset (expressed as a positive number) by which to lead each + element of the sequence. + A projection function which accepts the current and + subsequent (lead) element (in that order) and produces a result. + + A sequence produced by projecting each element of the sequence with its lead + pairing. + + + This operator evaluates in a deferred and streaming manner. + + For elements of the sequence that are less than items from the + end, default(T) is used as the lead value. + + + + + Produces a projection of a sequence by evaluating pairs of elements separated by a + positive offset. + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + The sequence over which to evaluate Lead. + The offset (expressed as a positive number) by which to lead each + element of the sequence. + A default value supplied for the leading element when + none is available. + A projection function which accepts the current and + subsequent (lead) element (in that order) and produces a result. + + A sequence produced by projecting each element of the sequence with its lead + pairing. + + This operator evaluates in a deferred and streaming manner. + + + + LeftJoin extension. + + + + Performs a left outer join on two homogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Performs a left outer join on two homogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Performs a left outer join on two heterogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a left + outer join of the two input sequences. + + + + Performs a left outer join on two heterogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a left + outer join of the two input sequences. + + + MaxBy extension. + + + + Returns the maximal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of maximal elements, according to the projection. + or is null + + + + Returns the maximal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of maximal elements, according to the projection. + , + or is null + + + Maxima extension. + + + + Returns the maximal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of maximal elements, according to the projection. + or is null + + + + Returns the maximal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of maximal elements, according to the projection. + , + or is null + + + MinBy extension. + + + + Returns the minimal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of minimal elements, according to the projection. + or is null + + + + Returns the minimal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of minimal elements, according to the projection. + , + or is null + + + Minima extension. + + + + Returns the minimal elements of the given sequence, based on + the given projection. + + + This overload uses the default comparer for the projected type. + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + The sequence of minimal elements, according to the projection. + or is null + + + + Returns the minimal elements of the given sequence, based on + the given projection and the specified comparer for projected values. + + + This operator uses deferred execution. The results are evaluated + and cached on first use to returned sequence. + + Type of the source sequence + Type of the projected element + Source sequence + Selector to use to pick the results to compare + Comparer to use to compare projected values + The sequence of minimal elements, according to the projection. + , + or is null + + + Move extension. + + + + Returns a sequence with a range of elements in the source sequence + moved to a new offset. + + Type of the source sequence. + The source sequence. + + The zero-based index identifying the first element in the range of + elements to move. + The count of items to move. + + The index where the specified range will be moved. + + A sequence with the specified range moved to the new position. + + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { 3, 4, 0, 1, 2, 5 }. + + + + OrderBy extension. + + + + Sorts the elements of a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + An ordered copy of the source sequence + + + + Sorts the elements of a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + A comparer used to define the semantics of element comparison + An ordered copy of the source sequence + + + OrderedMerge extension. + + + + Merges two ordered sequences into one. Where the elements equal + in both sequences, the element from the first sequence is + returned in the resulting sequence. + + Type of elements in input and output sequences. + The first input sequence. + The second input sequence. + + A sequence with elements from the two input sequences merged, as + in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered as inputs. + + + + + Merges two ordered sequences into one with an additional + parameter specifying how to compare the elements of the + sequences. Where the elements equal in both sequences, the + element from the first sequence is returned in the resulting + sequence. + + Type of elements in input and output sequences. + The first input sequence. + The second input sequence. + An to compare elements. + + A sequence with elements from the two input sequences merged, as + in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered as inputs. + + + + + Merges two ordered sequences into one with an additional + parameter specifying the element key by which the sequences are + ordered. Where the keys equal in both sequences, the + element from the first sequence is returned in the resulting + sequence. + + Type of elements in input and output sequences. + Type of keys used for merging. + The first input sequence. + The second input sequence. + Function to extract a key given an element. + + A sequence with elements from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two ordered sequences into one. Additional parameters + specify the element key by which the sequences are ordered, + the result when element is found in first sequence but not in + the second, the result when element is found in second sequence + but not in the first and the result when elements are found in + both sequences. + + Type of elements in source sequences. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an element. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two ordered sequences into one. Additional parameters + specify the element key by which the sequences are ordered, + the result when element is found in first sequence but not in + the second, the result when element is found in second sequence + but not in the first, the result when elements are found in + both sequences and a method for comparing keys. + + Type of elements in source sequences. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an element. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + An to compare keys. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two heterogeneous sequences ordered by a common key type + into a homogeneous one. Additional parameters specify the + element key by which the sequences are ordered, the result when + element is found in first sequence but not in the second and + the result when element is found in second sequence but not in + the first, the result when elements are found in both sequences. + + Type of elements in the first sequence. + Type of elements in the second sequence. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an + element from the first sequence. + Function to extract a key given an + element from the second sequence. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + + Merges two heterogeneous sequences ordered by a common key type + into a homogeneous one. Additional parameters specify the + element key by which the sequences are ordered, the result when + element is found in first sequence but not in the second, + the result when element is found in second sequence but not in + the first, the result when elements are found in both sequences + and a method for comparing keys. + + Type of elements in the first sequence. + Type of elements in the second sequence. + Type of keys used for merging. + Type of elements in the returned sequence. + The first input sequence. + The second input sequence. + Function to extract a key given an + element from the first sequence. + Function to extract a key given an + element from the second sequence. + Function to project the result element + when only the first sequence yields a source element. + Function to project the result element + when only the second sequence yields a source element. + Function to project the result element + when only both sequences yield a source element whose keys are + equal. + An to compare keys. + + A sequence with projections from the two input sequences merged + according to a key, as in a full outer join. + + This method uses deferred execution. The behavior is undefined + if the sequences are unordered (by key) as inputs. + + + + Pad extension. + + + + Pads a sequence with default values if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield + 123, 456, 789 and two zeroes, in turn. + + + + + Pads a sequence with a given filler value if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + The value to use for padding. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield + 123, 456, and 789 followed by two occurrences of -1, in turn. + + + + + Pads a sequence with a dynamic filler value if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + Function to calculate padding. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + -i); + ]]> + The result variable, when iterated over, will yield + 0, 1, 2, -3 and -4, in turn. + + + + PadStart extension. + + + + Pads a sequence with default values in the beginning if it is narrower (shorter + in length) than a given width. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { 0, 0, 123, 456, 789 }. + + + + + Pads a sequence with a given filler value in the beginning if it is narrower (shorter + in length) than a given width. + An additional parameter specifies the value to use for padding. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + The value to use for padding. + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + + The result variable will contain { -1, -1, 123, 456, 789 }. + + + + + Pads a sequence with a dynamic filler value in the beginning if it is narrower (shorter + in length) than a given width. + An additional parameter specifies the function to calculate padding. + + The type of the elements of . + The sequence to pad. + The width/length below which to pad. + + Function to calculate padding given the index of the missing element. + + + Returns a sequence that is at least as wide/long as the width/length + specified by the parameter. + + + This operator uses deferred execution and streams its results. + + + -i); + ]]> + The result variable will contain { 0, -1, -2, 123, 456, 789 }. + + + + Pairwise extension. + + + + Returns a sequence resulting from applying a function to each + element in the source sequence and its + predecessor, with the exception of the first element which is + only returned as the predecessor of the second element. + + The type of the elements of . + The type of the element of the returned sequence. + The source sequence. + A transform function to apply to + each pair of sequence. + + Returns the resulting sequence. + + + This operator uses deferred execution and streams its results. + + + a + b); + ]]> + The result variable, when iterated over, will yield + "ab", "bc" and "cd", in turn. + + + + PartialSort extension. + + + + Combines , + where each element is its key, and + in a single operation. + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + A sequence containing at most top + elements from source, in their ascending order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + where each element is its key, and + in a single operation. + An additional parameter specifies the direction of the sort + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + where each element is its key, and + in a single operation. An additional parameter specifies how the + elements compare to each other. + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + A to compare elements. + A sequence containing at most top + elements from source, in their ascending order. + + This operator uses deferred execution and streams it results. + + + + + Combines , + where each element is its key, and + in a single operation. + Additional parameters specify how the elements compare to each other and + the direction of the sort. + + Type of elements in the sequence. + The source sequence. + Number of (maximum) elements to return. + A to compare elements. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order. + + This operator uses deferred execution and streams it results. + + + + PartialSortBy extension. + + + + Combines , + and in a single operation. + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + A sequence containing at most top + elements from source, in ascending order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + An additional parameter specifies the direction of the sort + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + An additional parameter specifies how the keys compare to each other. + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + A to compare elements. + A sequence containing at most top + elements from source, in ascending order of their keys. + + This operator uses deferred execution and streams it results. + + + + + Combines , + and in a single operation. + Additional parameters specify how the elements compare to each other and + the direction of the sort. + + Type of elements in the sequence. + Type of keys. + The source sequence. + A function to extract a key from an element. + Number of (maximum) elements to return. + A to compare elements. + The direction in which to sort the elements + A sequence containing at most top + elements from source, in the specified order of their keys. + + This operator uses deferred execution and streams it results. + + + + Partition extension. + + + + Partitions or splits a sequence in two using a predicate. + + The source sequence. + The predicate function. + Type of source elements. + + A tuple of elements satisfying the predicate and those that do not, + respectively. + + is + . + + x % 2 == 0); + ]]> + The evens variable, when iterated over, will yield 0, 2, 4, 6 + and then 8. The odds variable, when iterated over, will yield + 1, 3, 5, 7 and then 9. + + + + + Partitions a grouping by Boolean keys into a projection of true + elements and false elements, respectively. + + Type of elements in source groupings. + Type of the result. + The source sequence. + + Function that projects the result from sequences of true elements + and false elements, respectively, passed as arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping by nullable Boolean keys into a projection of + true elements, false elements and null elements, respectively. + + Type of elements in source groupings. + Type of the result. + The source sequence. + + Function that projects the result from sequences of true elements, + false elements and null elements, respectively, passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions or splits a sequence in two using a predicate and then + projects a result from the two. + + The source sequence. + The predicate function. + + Function that projects the result from sequences of elements that + satisfy the predicate and those that do not, respectively, passed as + arguments. + + Type of source elements. + Type of the result. + + The return value from . + + + , , or + is . + + + x % 2 == 0, ValueTuple.Create); + ]]> + The evens variable, when iterated over, will yield 0, 2, 4, 6 + and then 8. The odds variable, when iterated over, will yield + 1, 3, 5, 7 and then 9. + + + + + Partitions a grouping and projects a result from group elements + matching a key and those groups that do not. + + Type of keys in source groupings. + Type of elements in source + groupings. + Type of the result. + The source sequence. + The key to partition. + + Function that projects the result from sequences of elements + matching and those groups that do not (in the + order in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements of + groups matching a set of two keys and those groups that do not. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + + Function that projects the result from elements of the group + matching , elements of the group matching + and those groups that do not (in the order + in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from group elements + matching a key and those groups that do not. An additional parameter + specifies how to compare keys for equality. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The key to partition on. + The comparer for keys. + + Function that projects the result from elements of the group + matching and those groups that do not (in + the order in which they appear in ), + passed as arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements groups + matching a set of three keys and those groups that do not. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + The third key to partition on. + + Function that projects the result from elements of groups + matching , and + and those groups that do not (in the order + in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements of + groups matching a set of two keys and those groups that do not. + An additional parameter specifies how to compare keys for equality. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + The comparer for keys. + + Function that projects the result from elements of the group + matching , elements of the group matching + and those groups that do not (in the order + in which they appear in ), passed as + arguments. + + + The return value from . + + + or is + . + + + + + Partitions a grouping and projects a result from elements groups + matching a set of three keys and those groups that do not. An + additional parameter specifies how to compare keys for equality. + + Type of keys in source groupings. + Type of elements in source groupings. + Type of the result. + The source sequence. + The first key to partition on. + The second key to partition on. + The third key to partition on. + The comparer for keys. + + Function that projects the result from elements of groups + matching , and + and those groups that do not (in + the order in which they appear in ), + passed as arguments. + + + The return value from . + + + or is + . + + + + Permutations extension. + + + + Generates a sequence of lists that represent the permutations of the original sequence. + + The type of the elements in the sequence. + The original sequence to permute. + + A sequence of lists representing permutations of the original sequence. + + Too many permutations (limited by ); thrown during iteration + of the resulting sequence. + + + A permutation is a unique re-ordering of the elements of the sequence. + + This operator returns permutations in a deferred, streaming fashion; however, each + permutation is materialized into a new list. There are N! permutations of a sequence, + where N ⇒ sequence.Count(). + + Be aware that the original sequence is considered one of the permutations and will be + returned as one of the results. + + + + Pipe extension. + + + + Executes the given action on each element in the source sequence + and yields it. + + The type of the elements in the sequence + The sequence of elements + The action to execute on each element + A sequence with source elements in their original order. + + The returned sequence is essentially a duplicate of + the original, but with the extra action being executed while the + sequence is evaluated. The action is always taken before the element + is yielded, so any changes made by the action will be visible in the + returned sequence. This operator uses deferred execution and streams it results. + + + + Prepend extension. + + + + Prepends a single value to a sequence. + + The type of the elements of . + The sequence to prepend to. + The value to prepend. + + Returns a sequence where a value is prepended to it. + + + This operator uses deferred execution and streams its results. + + + The result variable, when iterated over, will yield + 0, 1, 2 and 3, in turn. + + + PreScan extension. + + + + Performs a pre-scan (exclusive prefix sum) on a sequence of elements. + + + An exclusive prefix sum returns an equal-length sequence where the + N-th element is the sum of the first N-1 input elements (the first + element is a special case, it is set to the identity). More + generally, the pre-scan allows any commutative binary operation, + not just a sum. + The inclusive version of PreScan is . + This operator uses deferred execution and streams its result. + + + a + b, 0); + var scan = values.Scan((a, b) => a + b); + var result = values.EquiZip(prescan, ValueTuple.Create); + ]]> + prescan will yield { 0, 1, 3, 6 }, while scan + and result will both yield { 1, 3, 6, 10 }. This + shows the relationship between the inclusive and exclusive prefix sum. + + Type of elements in source sequence + Source sequence + Transformation operation + Identity element (see remarks) + The scanned sequence + + + RandomSubset extension. + + + + Returns a sequence of a specified size of random elements from the + original sequence. + + The type of source sequence elements. + + The sequence from which to return random elements. + The size of the random subset to return. + + A random sequence of elements in random order from the original + sequence. + + + + Returns a sequence of a specified size of random elements from the + original sequence. An additional parameter specifies a random + generator to be used for the random selection algorithm. + + The type of source sequence elements. + + The sequence from which to return random elements. + The size of the random subset to return. + + A random generator used as part of the selection algorithm. + + A random sequence of elements in random order from the original + sequence. + + + Rank extension. + + + + Ranks each item in the sequence in descending ordering using a default comparer. + + Type of item in the sequence + The sequence whose items will be ranked + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + + Rank each item in the sequence using a caller-supplied comparer. + + The type of the elements in the source sequence + The sequence of items to rank + A object that defines comparison semantics for the elements in the sequence + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + RankBy extension. + + + + Ranks each item in the sequence in descending ordering by a specified key using a default comparer + + The type of the elements in the source sequence + The type of the key used to rank items in the sequence + The sequence of items to rank + A key selector function which returns the value by which to rank items in the sequence + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + + Ranks each item in a sequence using a specified key and a caller-supplied comparer + + The type of the elements in the source sequence + The type of the key used to rank items in the sequence + The sequence of items to rank + A key selector function which returns the value by which to rank items in the sequence + An object that defines the comparison semantics for keys used to rank items + A sequence of position integers representing the ranks of the corresponding items in the sequence + + + Repeat extension. + + + + Repeats the sequence forever. + + Type of elements in sequence + The sequence to repeat + A sequence produced from the infinite repetition of the original source sequence + + + + Repeats the sequence the specified number of times. + + Type of elements in sequence + The sequence to repeat + Number of times to repeat the sequence + A sequence produced from the repetition of the original source sequence + + + RightJoin extension. + + + + Performs a right outer join on two homogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Performs a right outer join on two homogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the source sequence. + + The type of the key returned by the key selector function. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element of one of the + sequences to join. + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Performs a right outer join on two heterogeneous sequences. + Additional arguments specify key selection functions and result + projection functions. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + A sequence containing results projected from a right + outer join of the two input sequences. + + + + Performs a right outer join on two heterogeneous sequences. + Additional arguments specify key selection functions, result + projection functions and a key comparer. + + + The type of elements in the first sequence. + + The type of elements in the second sequence. + + The type of the key returned by the key selector functions. + + The type of the result elements. + + The first sequence of the join operation. + + The second sequence of the join operation. + + Function that projects the key given an element from . + + Function that projects the key given an element from . + + Function that projects the result given just an element from + where there is no corresponding element + in . + + Function that projects the result given an element from + and an element from + that match on a common key. + + The instance used to compare + keys for equality. + A sequence containing results projected from a right + outer join of the two input sequences. + + + RunLengthEncode extension. + + + + Run-length encodes a sequence by converting consecutive instances of the same element into + a KeyValuePair{T,int} representing the item and its occurrence count. + + The type of the elements in the sequence + The sequence to run length encode + A sequence of KeyValuePair{T,int} where the key is the element and the value is the occurrence count + + + + Run-length encodes a sequence by converting consecutive instances of the same element into + a KeyValuePair{T,int} representing the item and its occurrence count. This overload + uses a custom equality comparer to identify equivalent items. + + The type of the elements in the sequence + The sequence to run length encode + The comparer used to identify equivalent items + A sequence of KeyValuePair{T,int} where they key is the element and the value is the occurrence count + + + Scan extension. + + + + Performs a scan (inclusive prefix sum) on a sequence of elements. + + + An inclusive prefix sum returns an equal-length sequence where the + N-th element is the sum of the first N input elements. More + generally, the scan allows any commutative binary operation, not + just a sum. + The exclusive version of Scan is . + This operator uses deferred execution and streams its result. + + + a + b, 0); + var scan = values.Scan((a, b) => a + b); + var result = values.EquiZip(scan, ValueTuple.Create); + ]]> + prescan will yield { 0, 1, 3, 6 }, while scan + and result will both yield { 1, 3, 6, 10 }. This + shows the relationship between the inclusive and exclusive prefix sum. + + Type of elements in source sequence + Source sequence + Transformation operation + The scanned sequence + + + + Like except returns + the sequence of intermediate results as well as the final one. + An additional parameter specifies a seed. + + + This operator uses deferred execution and streams its result. + + + a + b); + ]]> + When iterated, result will yield { 0, 1, 3, 6, 10, 15 }. + + Type of elements in source sequence + Type of state + Source sequence + Initial state to seed + Transformation operation + The scanned sequence + + + ScanBy extension. + + + + Applies an accumulator function over sequence element keys, + returning the keys along with intermediate accumulator states. + + Type of the elements of the source sequence. + The type of the key. + Type of the state. + The source sequence. + + A function that returns the key given an element. + + A function to determine the initial value for the accumulator that is + invoked once per key encountered. + + An accumulator function invoked for each element. + + A sequence of keys paired with intermediate accumulator states. + + + + + Applies an accumulator function over sequence element keys, + returning the keys along with intermediate accumulator states. An + additional parameter specifies the comparer to use to compare keys. + + Type of the elements of the source sequence. + The type of the key. + Type of the state. + The source sequence. + + A function that returns the key given an element. + + A function to determine the initial value for the accumulator that is + invoked once per key encountered. + + An accumulator function invoked for each element. + The equality comparer to use to determine + whether or not keys are equal. If null, the default equality + comparer for is used. + + A sequence of keys paired with intermediate accumulator states. + + + + ScanRight extension. + + + + Performs a right-associative scan (inclusive prefix) on a sequence of elements. + This operator is the right-associative version of the + LINQ operator. + + Type of elements in source sequence. + Source sequence. + + A right-associative accumulator function to be invoked on each element. + Its first argument is the current value in the sequence; second argument is the previous accumulator value. + + The scanned sequence. + + i.ToString()).ScanRight((a, b) => $"({a}+{b})"); + ]]> + The result variable will contain [ "(1+(2+(3+(4+5))))", "(2+(3+(4+5)))", "(3+(4+5))", "(4+5)", "5" ]. + + + This operator uses deferred execution and streams its results. + Source sequence is consumed greedily when an iteration of the resulting sequence begins. + + + + + Performs a right-associative scan (inclusive prefix) on a sequence of elements. + The specified seed value is used as the initial accumulator value. + This operator is the right-associative version of the + LINQ operator. + + The type of the elements of source. + The type of the accumulator value. + Source sequence. + The initial accumulator value. + A right-associative accumulator function to be invoked on each element. + The scanned sequence. + + $"({a}+{b})"); + ]]> + The result variable will contain [ "(1+(2+(3+(4+5))))", "(2+(3+(4+5)))", "(3+(4+5))", "(4+5)", "5" ]. + + + This operator uses deferred execution and streams its results. + Source sequence is consumed greedily when an iteration of the resulting sequence begins. + + + + Segment extension. + + + + Divides a sequence into multiple sequences by using a segment detector based on the original sequence + + The type of the elements in the sequence + The sequence to segment + A function, which returns true if the given element begins a new segment, and false otherwise + A sequence of segment, each of which is a portion of the original sequence + + Thrown if either or are . + + + + + Divides a sequence into multiple sequences by using a segment detector based on the original sequence + + The type of the elements in the sequence + The sequence to segment + A function, which returns true if the given element or index indicate a new segment, and false otherwise + A sequence of segment, each of which is a portion of the original sequence + + Thrown if either or are . + + + + + Divides a sequence into multiple sequences by using a segment detector based on the original sequence + + The type of the elements in the sequence + The sequence to segment + A function, which returns true if the given current element, previous element or index indicate a new segment, and false otherwise + A sequence of segment, each of which is a portion of the original sequence + + Thrown if either or are . + + + + Shuffle extension. + + + + Returns a sequence of elements in random order from the original + sequence. + + The type of source sequence elements. + + The sequence from which to return random elements. + + A sequence of elements randomized in + their order. + + + This method uses deferred execution and streams its results. The + source sequence is entirely buffered before the results are + streamed. + + + + + Returns a sequence of elements in random order from the original + sequence. An additional parameter specifies a random generator to be + used for the random selection algorithm. + + The type of source sequence elements. + + The sequence from which to return random elements. + + A random generator used as part of the selection algorithm. + + A sequence of elements randomized in + their order. + + + This method uses deferred execution and streams its results. The + source sequence is entirely buffered before the results are + streamed. + + + + Single extension. + + + + Returns the only element of a sequence, and throws an exception if + there is not exactly one element in the sequence. + + + The type of the elements of . + The input sequence. + + The input sequence contains more than one element. + + The single element of the input sequence. + + + + SingleOrDefault extension. + + + + Returns the only element of a sequence, or a default value if the + sequence is empty; this method throws an exception if there is more + than one element in the sequence. + + + The type of the elements of . + The input sequence. + + The single element of the input sequence, or default value of type + if the sequence contains no elements. + + + + SkipLast extension. + + + + Bypasses a specified number of elements at the end of the sequence. + + Type of the source sequence + The source sequence. + The number of elements to bypass at the end of the source sequence. + + An containing the source sequence elements except for the bypassed ones at the end. + + + + SkipUntil extension. + + + + Skips items from the input sequence until the given predicate returns true + when applied to the current source item; that item will be the last skipped. + + + + SkipUntil differs from Enumerable.SkipWhile in two respects. Firstly, the sense + of the predicate is reversed: it is expected that the predicate will return false + to start with, and then return true - for example, when trying to find a matching + item in a sequence. + + + Secondly, SkipUntil skips the element which causes the predicate to return true. For + example, in a sequence and with a predicate of + x == 3]]>, the result would be . + + + SkipUntil is as lazy as possible: it will not iterate over the source sequence + until it has to, it won't iterate further than it has to, and it won't evaluate + the predicate until it has to. (This means that an item may be returned which would + actually cause the predicate to throw an exception if it were evaluated, so long as + it comes after the first item causing the predicate to return true.) + + + Type of the source sequence + Source sequence + Predicate used to determine when to stop yielding results from the source. + Items from the source sequence after the predicate first returns true when applied to the item. + or is null + + + Slice extension. + + + + Extracts a contiguous count of elements from a sequence at a particular zero-based + starting index. + + The type of the elements in the source sequence. + The sequence from which to extract elements. + The zero-based index at which to begin slicing. + The number of items to slice out of the index. + + A new sequence containing any elements sliced out from the source sequence. + + + If the starting position or count specified result in slice extending past the end of + the sequence, it will return all elements up to that point. There is no guarantee that + the resulting sequence will contain the number of elements requested - it may have + anywhere from 0 to . + + This method is implemented in an optimized manner for any sequence implementing . + + The result of is identical to: + sequence.Skip(startIndex).Take(count) + + + + SortedMerge extension. + + + + Merges two or more sequences that are in a common order (either ascending or descending) + into a single sequence that preserves that order. + + The type of the elements of the sequence. + The primary sequence with which to merge. + The ordering that all sequences must already exhibit. + A variable argument array of zero or more other sequences + to merge with. + + A merged, order-preserving sequence containing all of the elements of the original + sequences. + + + Using + on sequences that are not ordered or are not in the same order produces undefined + results. + + + uses performs the merge in a deferred, streaming manner. + + Here is an example of a merge, as well as the produced result: + + + + + + Merges two or more sequences that are in a common order (either ascending or descending) + into a single sequence that preserves that order. + + The type of the elements in the sequence. + The primary sequence with which to merge. + The ordering that all sequences must already exhibit. + The comparer used to evaluate the relative order between + elements. + A variable argument array of zero or more other sequences + to merge with. + + A merged, order-preserving sequence containing al of the elements of the original + sequences. + + + Split extension. + + + + Splits the source sequence by a separator. + + Type of element in the source sequence. + The source sequence. + Separator element. + A sequence of splits of elements. + + + + Splits the source sequence by separator elements identified by a + function. + + Type of element in the source sequence. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + A sequence of splits of elements. + + + + Splits the source sequence by a separator given a maximum count of splits. + + Type of element in the source sequence. + The source sequence. + Separator element. + Maximum number of splits. + A sequence of splits of elements. + + + + Splits the source sequence by a separator and then transforms the + splits into results. + + Type of element in the source sequence. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + A sequence of splits of elements. + + + + Splits the source sequence by separator elements identified by a + function, given a maximum count of splits. + + Type of element in the source sequence. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + Maximum number of splits. + A sequence of splits of elements. + + + + Splits the source sequence by a separator, given a maximum count + of splits. A parameter specifies how the separator is compared + for equality. + + Type of element in the source sequence. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + Maximum number of splits. + A sequence of splits of elements. + + + + Splits the source sequence by a separator and then transforms + the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by separator elements identified by + a function and then transforms the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by a separator, given a maximum count + of splits, and then transforms the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Maximum number of splits. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by a separator and then transforms the + splits into results. A parameter specifies how the separator is + compared for equality. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by separator elements identified by + a function, given a maximum count of splits, and then transforms + the splits into results. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Predicate function used to determine + the splitter elements in the source sequence. + Maximum number of splits. + Function used to project a split + group of source elements into an element of the resulting sequence. + + A sequence of values typed as . + + + + + Splits the source sequence by a separator, given a maximum count + of splits, and then transforms the splits into results. A + parameter specifies how the separator is compared for equality. + + Type of element in the source sequence. + Type of the result sequence elements. + The source sequence. + Separator element. + Comparer used to determine separator + element equality. + Maximum number of splits. + Function used to project splits + of source elements into elements of the resulting sequence. + + A sequence of values typed as . + + + + StartsWith extension. + + + + Determines whether the beginning of the first sequence is + equivalent to the second sequence, using the default equality + comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + + true if begins with elements + equivalent to . + + + This is the equivalent of + and it calls + using + on pairs of elements at + the same index. + + + + + Determines whether the beginning of the first sequence is + equivalent to the second sequence, using the specified element + equality comparer. + + Type of elements. + The sequence to check. + The sequence to compare to. + Equality comparer to use. + + true if begins with elements + equivalent to . + + + This is the equivalent of + and + it calls on pairs + of elements at the same index. + + + + Subsets extension. + + + + Returns a sequence of representing all of the subsets of any size + that are part of the original sequence. In mathematics, it is equivalent to the + power set of a set. + + Sequence for which to produce subsets. + The type of the elements in the sequence. + + A sequence of lists that represent the all subsets of the original sequence. + Thrown if is . + + + This operator produces all of the subsets of a given sequence. Subsets are returned in + increasing cardinality, starting with the empty set and terminating with the entire + original sequence. + + Subsets are produced in a deferred, streaming manner; however, each subset is returned + as a materialized list. + + There are 2N subsets of a given sequence, where N ⇒ + sequence.Count(). + + + + + Returns a sequence of representing all subsets of a given size + that are part of the original sequence. In mathematics, it is equivalent to the + combinations or k-subsets of a set. + + Sequence for which to produce subsets. + The size of the subsets to produce. + The type of the elements in the sequence. + + A sequence of lists that represents of K-sized subsets of the original + sequence. + + Thrown if is . + + + Thrown if is less than zero. + + + + TagFirstLast extension. + + + + Returns a sequence resulting from applying a function to each + element in the source sequence with additional parameters + indicating whether the element is the first and/or last of the + sequence. + + The type of the elements of . + The type of the element of the returned sequence. + The source sequence. + A function that determines how to + project the each element along with its first or last tag. + + Returns the resulting sequence. + + + This operator uses deferred execution and streams its results. + + + new + { + Number = num, + IsFirst = fst, IsLast = lst + }); + ]]> + The result variable, when iterated over, will yield + { Number = 123, IsFirst = True, IsLast = False }, + { Number = 456, IsFirst = False, IsLast = False } and + { Number = 789, IsFirst = False, IsLast = True } in turn. + + + + TakeEvery extension. + + + + Returns every N-th element of a sequence. + + Type of the source sequence + Source sequence + Number of elements to bypass before returning the next element. + + A sequence with every N-th element of the input sequence. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield 1, 3 and 5, in turn. + + + + TakeLast extension. + + + + Returns a specified number of contiguous elements from the end of + a sequence. + + The type of the elements of . + The sequence to return the last element of. + The number of elements to return. + + An that contains the specified number of + elements from the end of the input sequence. + + + This operator uses deferred execution and streams its results. + + + + The result variable, when iterated over, will yield + 56 and 78 in turn. + + + + TakeUntil extension. + + + + Returns items from the input sequence until the given predicate returns true + when applied to the current source item; that item will be the last returned. + + + + TakeUntil differs from Enumerable.TakeWhile in two respects. Firstly, the sense + of the predicate is reversed: it is expected that the predicate will return false + to start with, and then return true - for example, when trying to find a matching + item in a sequence. + + + Secondly, TakeUntil yields the element which causes the predicate to return true. For + example, in a sequence and with a predicate of + x == 3]]>, the result would be . + + + TakeUntil is as lazy as possible: it will not iterate over the source sequence + until it has to, it won't iterate further than it has to, and it won't evaluate + the predicate until it has to. (This means that an item may be returned which would + actually cause the predicate to throw an exception if it were evaluated, so long as + no more items of data are requested.) + + + Type of the source sequence + Source sequence + Predicate used to determine when to stop yielding results from the source. + Items from the source sequence, until the predicate returns true when applied to the item. + or is null + + + ThenBy extension. + + + + Performs a subsequent ordering of elements in a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + An ordered copy of the source sequence + + + + Performs a subsequent ordering of elements in a sequence in a particular direction (ascending, descending) according to a key + + The type of the elements in the source sequence + The type of the key used to order elements + The sequence to order + A key selector function + A direction in which to order the elements (ascending, descending) + A comparer used to define the semantics of element comparison + An ordered copy of the source sequence + + + ToArrayByIndex extension. + + + + Creates an array from an where a + function is used to determine the index at which an element will + be placed in the array. + + The source sequence for the array. + + A function that maps an element to its index. + + The type of the element in . + + An array that contains the elements from the input sequence. The + size of the array will be as large as the highest index returned + by the plus 1. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array of user-specified length from an + where a function is used to determine + the index at which an element will be placed in the array. + + The source sequence for the array. + The (non-negative) length of the resulting array. + + A function that maps an element to its index. + + The type of the element in . + + An array of size that contains the + elements from the input sequence. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array from an where a + function is used to determine the index at which an element will + be placed in the array. The elements are projected into the array + via an additional function. + + The source sequence for the array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array that contains the projected elements from the input + sequence. The size of the array will be as large as the highest + index returned by the plus 1. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array from an where a + function is used to determine the index at which an element will + be placed in the array. The elements are projected into the array + via an additional function. + + The source sequence for the array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array that contains the projected elements from the input + sequence. The size of the array will be as large as the highest + index returned by the plus 1. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array of user-specified length from an + where a function is used to determine + the index at which an element will be placed in the array. The + elements are projected into the array via an additional function. + + The source sequence for the array. + The (non-negative) length of the resulting array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array of size that contains the + projected elements from the input sequence. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + + Creates an array of user-specified length from an + where a function is used to determine + the index at which an element will be placed in the array. The + elements are projected into the array via an additional function. + + The source sequence for the array. + The (non-negative) length of the resulting array. + + A function that maps an element to its index. + + A function to project a source element into an element of the + resulting array. + + The type of the element in . + + The type of the element in the resulting array. + + An array of size that contains the + projected elements from the input sequence. + + + This method forces immediate query evaluation. It should not be + used on infinite sequences. If more than one element maps to the + same index then the latter element overwrites the former in the + resulting array. + + + + ToDelimitedString extension. + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + + Creates a delimited string from a sequence of values and + a given delimiter. + + Type of element in the source sequence + The sequence of items to delimit. Each is converted to a string using the + simple ToString() conversion. + The delimiter to inject between elements. + + A string that consists of the elements in + delimited by . If the source sequence + is empty, the method returns an empty string. + + + or is null. + + + This operator uses immediate execution and effectively buffers the sequence. + + + + ToDictionary extension. + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. + + The type of the key. + The type of the value. + The source sequence of couples (tuple of 2). + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + elements. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. An additional parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of couples (tuple of 2). + The comparer for keys. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + elements. An additional + parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + The comparer for keys. + + A containing the values + mapped to their keys. + + + + ToHashSet extension. + + + + Returns a of the source items using the default equality + comparer for the type. + + Type of elements in source sequence. + Source sequence + A hash set of the items in the sequence, using the default equality comparer. + is null + + This evaluates the input sequence completely. + + + + + Returns a of the source items using the specified equality + comparer for the type. + + Type of elements in source sequence. + Source sequence + Equality comparer to use; a value of null will cause the type's default equality comparer to be used + A hash set of the items in the sequence, using the default equality comparer. + is null + + This evaluates the input sequence completely. + + + + ToLookup extension. + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. + + The type of the key. + The type of the value. + The source sequence of tuples of 2. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + elements. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + tuples of 2 where the first item is the key and the second the + value. An additional parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of tuples of 2. + The comparer for keys. + + A containing the values + mapped to their keys. + + + + + Creates a from a sequence of + elements. An additional + parameter specifies a comparer for keys. + + The type of the key. + The type of the value. + The source sequence of key-value pairs. + The comparer for keys. + + A containing the values + mapped to their keys. + + + + Trace extension. + + + + Traces the elements of a source sequence for diagnostics. + + Type of element in the source sequence + Source sequence whose elements to trace. + + Return the source sequence unmodified. + + + This a pass-through operator that uses deferred execution and + streams the results. + + + + + Traces the elements of a source sequence for diagnostics using + custom formatting. + + Type of element in the source sequence + Source sequence whose elements to trace. + + String to use to format the trace message. If null then the + element value becomes the traced message. + + + Return the source sequence unmodified. + + + This a pass-through operator that uses deferred execution and + streams the results. + + + + + Traces the elements of a source sequence for diagnostics using + a custom formatter. + + Type of element in the source sequence + Source sequence whose elements to trace. + Function used to format each source element into a string. + + Return the source sequence unmodified. + + + This a pass-through operator that uses deferred execution and + streams the results. + + + + Transpose extension. + + + + Transposes a sequence of rows into a sequence of columns. + + Type of source sequence elements. + Source sequence to transpose. + + Returns a sequence of columns in the source swapped into rows. + + + If a rows is shorter than a follow it then the shorter row's + elements are skipped in the corresponding column sequences. + This operator uses deferred execution and streams its results. + Source sequence is consumed greedily when an iteration begins. + The inner sequences representing rows are consumed lazily and + resulting sequences of columns are streamed. + + + + The result variable will contain [[10, 20, 30], [11, 31], [32]]. + + + + Window extension. + + + + Processes a sequence into a series of sub-sequences representing a windowed subset of + the original. + + The type of the elements of the source sequence. + The sequence to evaluate a sliding window over. + The size (number of elements) in each window. + + A series of sequences representing each sliding window subsequence. + + + The number of sequences returned is: Max(0, sequence.Count() - windowSize) + + 1 + + Returned sub-sequences are buffered, but the overall operation is streamed. + + + + WindowLeft extension. + + + + Creates a left-aligned sliding window of a given size over the + source sequence. + + + The type of the elements of . + + The sequence over which to create the sliding window. + Size of the sliding window. + A sequence representing each sliding window. + + + A window can contain fewer elements than , + especially as it slides over the end of the sequence. + + This operator uses deferred execution and streams its results. + + + "AVG(" + w.ToDelimitedString(",") + ") = " + w.Average()) + .ToDelimitedString(Environment.NewLine)); + + // Output: + // AVG(1,2,3) = 2 + // AVG(2,3,4) = 3 + // AVG(3,4,5) = 4 + // AVG(4,5) = 4.5 + // AVG(5) = 5 + ]]> + + + + WindowRight extension. + + + + Creates a right-aligned sliding window over the source sequence + of a given size. + + + The type of the elements of . + + The sequence over which to create the sliding window. + Size of the sliding window. + A sequence representing each sliding window. + + + A window can contain fewer elements than , + especially as it slides over the start of the sequence. + + This operator uses deferred execution and streams its results. + + + "AVG(" + w.ToDelimitedString(",") + ") = " + w.Average()) + .ToDelimitedString(Environment.NewLine)); + + // Output: + // AVG(1) = 1 + // AVG(1,2) = 1.5 + // AVG(1,2,3) = 2 + // AVG(2,3,4) = 3 + // AVG(3,4,5) = 4 + ]]> + + + + ZipLongest extension. + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + will always be as long as the longest of input sequences where the + default value of each of the shorter sequence element types is used + for padding. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + + Function to apply to each pair of elements. + + A sequence that contains elements of the two input sequences, + combined by . + + + , , or is . + + + n + l); + ]]> + The zipped variable, when iterated over, will yield "1A", + "2B", "3C", "0D" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + will always be as long as the longest of input sequences where the + default value of each of the shorter sequence element types is used + for padding. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + The third sequence. + + Function to apply to each triplet of elements. + + A sequence that contains elements of the three input sequences, + combined by . + + + , , , or is . + + + n + l + c); + ]]> + The zipped variable, when iterated over, will yield "1Aa", + "2Bb", "3Cc", "0Dd", "0e" in turn. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + will always be as long as the longest of input sequences where the + default value of each of the shorter sequence element types is used + for padding. + + Type of elements in first sequence + Type of elements in second sequence + Type of elements in third sequence + Type of elements in fourth sequence + Type of elements in result sequence + The first sequence. + The second sequence. + The third sequence. + The fourth sequence. + + Function to apply to each quadruplet of elements. + + A sequence that contains elements of the four input sequences, + combined by . + + + , , , , or is . + + + n + l + c + f); + ]]> + The zipped variable, when iterated over, will yield "1AaTrue", + "2BbFalse", "3CcTrue", "0DdFalse", "0eTrue", "0\0False" in turn. + + + This operator uses deferred execution and streams its results. + + + + ZipShortest extension. + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + is as short as the shortest input sequence. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + + Function to apply to each pair of elements. + + A projection of tuples, where each tuple contains the N-th element + from each of the argument sequences. + + + , , or is . + + n + l); + ]]> + The zipped variable, when iterated over, will yield "1A", "2B", "3C", in turn. + + + + If the input sequences are of different lengths, the result sequence + is terminated as soon as the shortest input sequence is exhausted + and remainder elements from the longer sequences are never consumed. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + is as short as the shortest input sequence. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in result sequence. + First sequence + Second sequence + Third sequence + + Function to apply to each triplet of elements. + + A projection of tuples, where each tuple contains the N-th element + from each of the argument sequences. + + , , , or is . + + + c + n + l); + ]]> + The zipped variable, when iterated over, will yield + "98A", "100B", "102C", in turn. + + + + If the input sequences are of different lengths, the result sequence + is terminated as soon as the shortest input sequence is exhausted + and remainder elements from the longer sequences are never consumed. + + + This operator uses deferred execution and streams its results. + + + + + Returns a projection of tuples, where each tuple contains the N-th + element from each of the argument sequences. The resulting sequence + is as short as the shortest input sequence. + + Type of elements in first sequence. + Type of elements in second sequence. + Type of elements in third sequence. + Type of elements in fourth sequence. + Type of elements in result sequence. + The first sequence. + The second sequence. + The third sequence. + The fourth sequence. + + Function to apply to each quadruplet of elements. + + A projection of tuples, where each tuple contains the N-th element + from each of the argument sequences. + + , , , , or is . + + + n + l + c + f); + ]]> + The zipped variable, when iterated over, will yield + "1AaTrue", "2BbFalse" in turn. + + + + If the input sequences are of different lengths, the result sequence + is terminated as soon as the shortest input sequence is exhausted + and remainder elements from the longer sequences are never consumed. + + + This operator uses deferred execution and streams its results. + + + + ToDataTable extension. + + + + Converts a sequence to a object. + + The type of the elements of . + The source. + + A representing the source. + + This operator uses immediate execution. + + + + Appends elements in the sequence as rows of a given + object with a set of lambda expressions specifying which members (property + or field) of each element in the sequence will supply the column values. + + The type of the elements of . + The source. + Expressions providing access to element members. + + A representing the source. + + This operator uses immediate execution. + + + + Appends elements in the sequence as rows of a given object. + + The type of the elements of . + + The source. + + + A or subclass representing the source. + + This operator uses immediate execution. + + + + Appends elements in the sequence as rows of a given + object with a set of lambda expressions specifying which members (property + or field) of each element in the sequence will supply the column values. + + The type of the elements of . + The type of the input and resulting object. + The source. + The type of object where to add rows + Expressions providing access to element members. + + A or subclass representing the source. + + This operator uses immediate execution. + + + + Represents a union over list types implementing either + or , allowing + both to be treated the same. + + + + + A implementation that preserves insertion order + + + This implementation preserves insertion order of keys and elements within each . Copied and modified from + Lookup.cs + + + + + Exposes the enumerator, which supports iteration over a sequence of + some extremum property (maximum or minimum) of a specified type. + + The type of objects to enumerate. + + + + Returns a specified number of contiguous elements from the start of + the sequence. + + The number of elements to return. + + An that contains the specified number + of elements from the start of the input sequence. + + + + + Returns a specified number of contiguous elements at the end of the + sequence. + + The number of elements to return. + + An that contains the specified number + of elements at the end of the input sequence. + + + + + Enumeration that defines values representing valid ordering directions for a sequence. + + + + + Elements are ordered by increasing value + + + + + Elements are ordered by decreasing value + + + + + Prepend-Append node is a single linked-list of the discriminated union + of an item to prepend, an item to append and the source. + + + + + Provides a set of static methods for writing in-memory queries over observable sequences. + + + + + Subscribes an element handler and a completion handler to an + observable sequence. + + Type of elements in . + Observable sequence to subscribe to. + + Action to invoke for each element in . + + Action to invoke upon exceptional termination of the + . + + Action to invoke upon graceful termination of . + The subscription, which when disposed, will unsubscribe + from . + + + + The exception that is thrown for a sequence that fails a condition. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a given error message. + + A message that describes the error. + + + + Initializes a new instance of the class + with a given error message and a reference to the inner exception + that is the cause of the exception. + + A message that describes the error. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with serialized data. + + The object that holds the serialized object data. + The contextual information about the source or destination. + + + + Exception thrown when the program executes an instruction that was thought to be unreachable. + + + + + Applied to a method that will never return under any circumstance. + + + + + Specifies that the method will not return if the associated Boolean parameter is passed the specified value. + + + + + Initializes the attribute with the specified parameter value. + + + The condition parameter value. Code after the method will be considered unreachable + by diagnostics if the argument to the associated parameter matches this value. + + + + + Gets the condition parameter value. + + + + + Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it. + + + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter may be null. + + + + Gets the return value condition. + + + + + Specifies that the method or property will ensure that the listed field and property members have not-null values. + + + + + Initializes the attribute with a field or property member. + + The field or property member that is promised to be not-null. + + + + Initializes the attribute with the list of field and property members. + + The list of field and property members that are promised to be not-null. + + + + Gets field or property member names. + + + + + Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. + + + + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + Gets the return value condition. + + + + Indicates that certain members on a specified are accessed dynamically, + for example through . + + + This allows tools to understand which members are being accessed during the execution + of a program. + + This attribute is valid on members whose type is or . + + When this attribute is applied to a location of type , the assumption is + that the string represents a fully qualified type name. + + When this attribute is applied to a class, interface, or struct, the members specified + can be accessed dynamically on instances returned from calling + on instances of that class, interface, or struct. + + If the attribute is applied to a method it's treated as a special case and it implies + the attribute should be applied to the "this" parameter of the method. As such the attribute + should only be used on instance methods of types assignable to System.Type (or string, but no methods + will use it there). + + + + + Initializes a new instance of the class + with the specified member types. + + The types of members dynamically accessed. + + + + Gets the which specifies the type + of members dynamically accessed. + + + + + Specifies the types of members that are dynamically accessed. + + This enumeration has a attribute that allows a + bitwise combination of its member values. + + + + + Specifies no members. + + + + + Specifies the default, parameterless public constructor. + + + + + Specifies all public constructors. + + + + + Specifies all non-public constructors. + + + + + Specifies all public methods. + + + + + Specifies all non-public methods. + + + + + Specifies all public fields. + + + + + Specifies all non-public fields. + + + + + Specifies all public nested types. + + + + + Specifies all non-public nested types. + + + + + Specifies all public properties. + + + + + Specifies all non-public properties. + + + + + Specifies all public events. + + + + + Specifies all non-public events. + + + + + Specifies all interfaces implemented by the type. + + + + + Specifies all members. + + + + + Indicates that the specified method requires dynamic access to code that is not referenced + statically, for example through . + + + This allows tools to understand which methods are unsafe to call when removing unreferenced + code from an application. + + + + + Initializes a new instance of the class + with the specified message. + + + A message that contains information about the usage of unreferenced code. + + + + + Gets a message that contains information about the usage of unreferenced code. + + + + + Gets or sets an optional URL that contains more information about the method, + why it requires unreferenced code, and what options a consumer has to deal with it. + + + + + Suppresses reporting of a specific rule violation, allowing multiple suppressions on a + single code artifact. + + + is different than + in that it doesn't have a + . So it is always preserved in the compiled assembly. + + + + + Initializes a new instance of the + class, specifying the category of the tool and the identifier for an analysis rule. + + The category for the attribute. + The identifier of the analysis rule the attribute applies to. + + + + Gets the category identifying the classification of the attribute. + + + The property describes the tool or tool analysis category + for which a message suppression attribute applies. + + + + + Gets the identifier of the analysis tool rule to be suppressed. + + + Concatenated together, the and + properties form a unique check identifier. + + + + + Gets or sets the scope of the code that is relevant for the attribute. + + + The Scope property is an optional argument that specifies the metadata scope for which + the attribute is relevant. + + + + + Gets or sets a fully qualified path that represents the target of the attribute. + + + The property is an optional argument identifying the analysis target + of the attribute. An example value is "System.IO.Stream.ctor():System.Void". + Because it is fully qualified, it can be long, particularly for targets such as parameters. + The analysis tool user interface should be capable of automatically formatting the parameter. + + + + + Gets or sets an optional argument expanding on exclusion criteria. + + + The property is an optional argument that specifies additional + exclusion where the literal metadata target is not sufficiently precise. For example, + the cannot be applied within a method, + and it may be desirable to suppress a violation against a statement in the method that will + give a rule violation, but not against all statements in the method. + + + + + Gets or sets the justification for suppressing the code analysis message. + + + + Represent a type can be used to index a collection either from the start or the end. + + Index is used by the C# compiler to support the new index syntax + + int[] someArray = new int[5] { 1, 2, 3, 4, 5 } ; + int lastElement = someArray[^1]; // lastElement = 5 + + + + + Construct an Index using a value and indicating if the index is from the start or from the end. + The index value. it has to be zero or positive number. + Indicating if the index is from the start or from the end. + + If the Index constructed from the end, index value 1 means pointing at the last element and index value 0 means pointing at beyond last element. + + + + Create an Index pointing at first element. + + + Create an Index pointing at beyond last element. + + + Create an Index from the start at the position indicated by the value. + The index value from the start. + + + Create an Index from the end at the position indicated by the value. + The index value from the end. + + + Returns the index value. + + + Indicates whether the index is from the start or the end. + + + Calculate the offset from the start using the giving collection length. + The length of the collection that the Index will be used with. length has to be a positive value + + For performance reason, we don't validate the input length parameter and the returned offset value against negative values. + we don't validate either the returned offset is greater than the input length. + It is expected Index will be used with collections which always have non negative length/count. If the returned offset is negative and + then used to index a collection will get out of range exception which will be same affect as the validation. + + + + Indicates whether the current Index object is equal to another object of the same type. + An object to compare with this object + + + Indicates whether the current Index object is equal to another Index object. + An object to compare with this object + + + Returns the hash code for this instance. + + + Converts integer number to an Index. + + + Converts the value of the current Index object to its equivalent string representation. + + + + An attribute that allows parameters to receive the expression of other parameters. + + + + + Initializes a new instance of the class. + + The condition parameter value. + + + + Gets the parameter name the expression is retrieved from. + + + + diff --git a/TS SE Tool/libs/OpenPainter.ColorPicker.dll b/TS SE Tool/libs/OpenPainter.ColorPicker.dll new file mode 100644 index 00000000..07663dd0 Binary files /dev/null and b/TS SE Tool/libs/OpenPainter.ColorPicker.dll differ diff --git a/TS SE Tool/libs/PeNet.Asn1.dll b/TS SE Tool/libs/PeNet.Asn1.dll new file mode 100644 index 00000000..065c9dd2 Binary files /dev/null and b/TS SE Tool/libs/PeNet.Asn1.dll differ diff --git a/TS SE Tool/libs/PeNet.dll b/TS SE Tool/libs/PeNet.dll new file mode 100644 index 00000000..a70a19a7 Binary files /dev/null and b/TS SE Tool/libs/PeNet.dll differ diff --git a/TS SE Tool/libs/ReadMe.txt b/TS SE Tool/libs/ReadMe.txt new file mode 100644 index 00000000..dd5e4970 --- /dev/null +++ b/TS SE Tool/libs/ReadMe.txt @@ -0,0 +1,4 @@ +Tested on + Windows 7, ..., Windows 10 +Install + .NET Framework 4.7.2 \ No newline at end of file diff --git a/TS SE Tool/libs/SII_Decrypt.dll b/TS SE Tool/libs/SII_Decrypt.dll new file mode 100644 index 00000000..2bd30497 Binary files /dev/null and b/TS SE Tool/libs/SII_Decrypt.dll differ diff --git a/TS SE Tool/libs/Salient.Data.dll b/TS SE Tool/libs/Salient.Data.dll new file mode 100644 index 00000000..091b601b Binary files /dev/null and b/TS SE Tool/libs/Salient.Data.dll differ diff --git a/TS SE Tool/libs/SteamGameFinder.dll b/TS SE Tool/libs/SteamGameFinder.dll new file mode 100644 index 00000000..5d61df13 Binary files /dev/null and b/TS SE Tool/libs/SteamGameFinder.dll differ diff --git a/TS SE Tool/libs/SupportedGames.json b/TS SE Tool/libs/SupportedGames.json new file mode 100644 index 00000000..6b33f9e6 --- /dev/null +++ b/TS SE Tool/libs/SupportedGames.json @@ -0,0 +1,251 @@ +{ + "ETS2": { + "SteamAppId": 227300, + "Type": "ETS2", + "Name": "Euro Truck Simulator 2", + "ExecutableName": "eurotrucks2.exe", + "MinSupportedGameVersion": "1.43", + "MaxSupportedGameVersion": "1.49", + "SupportedSaveFileVersions": [ + 61, + 74 + ], + "Installed": true, + "SteamUserDataDir": "C:\\Program Files (x86)\\Steam\\userdata\\62180933\\227300", + "SteamRemoteDir": "C:\\Program Files (x86)\\Steam\\userdata\\62180933\\227300\\remote", + "GameDir": "G:\\SteamLibrary\\steamapps\\common\\Euro Truck Simulator 2", + "Executable": "G:\\SteamLibrary\\steamapps\\common\\Euro Truck Simulator 2\\bin\\win_x64\\eurotrucks2.exe", + "LastUpdated": "2024-07-24T16:47:49.75146+02:00", + "Version": "1.50.4.1", + "IsSupported": false, + "PluginDirs": [ + "G:\\SteamLibrary\\steamapps\\common\\Euro Truck Simulator 2\\bin\\win_x64\\plugins", + "G:\\SteamLibrary\\steamapps\\common\\Euro Truck Simulator 2\\bin\\win_x86\\plugins" + ], + "DocumentsDir": "D:\\Documents\\Euro Truck Simulator 2", + "ModsDir": "D:\\Documents\\Euro Truck Simulator 2\\mod", + "Processes": [], + "IsRunning": false, + "LicensePlateWidth": 128, + "PlayerLevelUps": [ + 200, + 500, + 700, + 900, + 1000, + 1100, + 1300, + 1600, + 1700, + 2100, + 2300, + 2600, + 2700, + 2900, + 3000, + 3100, + 3400, + 3700, + 4000, + 4300, + 4600, + 4700, + 4900, + 5200, + 5700, + 5900, + 6000, + 6200, + 6600, + 6800 + ], + "Currencies": { + "EUR": { + "Name": "EUR", + "ConversionRate": 1, + "FormatSymbols": [ + "", + "\u20AC", + "" + ] + }, + "CHF": { + "Name": "CHF", + "ConversionRate": 1.1419999999999999, + "FormatSymbols": [ + "", + "", + " CHF" + ] + }, + "CZK": { + "Name": "CZK", + "ConversionRate": 25.879999999999999, + "FormatSymbols": [ + "", + "", + " K\u010D" + ] + }, + "GBP": { + "Name": "GBP", + "ConversionRate": 0.875, + "FormatSymbols": [ + "", + "\u00A3", + "" + ] + }, + "PLN": { + "Name": "PLN", + "ConversionRate": 4.3170000000000002, + "FormatSymbols": [ + "", + "", + " z\u0142" + ] + }, + "HUF": { + "Name": "HUF", + "ConversionRate": 325.30000000000001, + "FormatSymbols": [ + "", + "", + " Ft" + ] + }, + "DKK": { + "Name": "DKK", + "ConversionRate": 7.46, + "FormatSymbols": [ + "", + "", + " kr" + ] + }, + "SEK": { + "Name": "SEK", + "ConversionRate": 10.52, + "FormatSymbols": [ + "", + "", + " kr" + ] + }, + "NOK": { + "Name": "NOK", + "ConversionRate": 9.5099999999999998, + "FormatSymbols": [ + "", + "", + " kr" + ] + }, + "RUB": { + "Name": "RUB", + "ConversionRate": 77.049999999999997, + "FormatSymbols": [ + "", + "\u20BD", + "" + ] + } + } + }, + "ATS": { + "SteamAppId": 270880, + "Type": "ATS", + "Name": "American Truck Simulator", + "ExecutableName": "amtrucks.exe", + "MinSupportedGameVersion": "1.43", + "MaxSupportedGameVersion": "1.49", + "SupportedSaveFileVersions": [], + "Installed": true, + "SteamUserDataDir": "C:\\Program Files (x86)\\Steam\\userdata\\62180933\\270880", + "SteamRemoteDir": "C:\\Program Files (x86)\\Steam\\userdata\\62180933\\270880\\remote", + "GameDir": "G:\\SteamLibrary\\steamapps\\common\\American Truck Simulator", + "Executable": "G:\\SteamLibrary\\steamapps\\common\\American Truck Simulator\\bin\\win_x64\\amtrucks.exe", + "LastUpdated": "2024-07-27T12:41:28.8622429+02:00", + "Version": "1.50.1.1029", + "IsSupported": false, + "PluginDirs": [ + "G:\\SteamLibrary\\steamapps\\common\\American Truck Simulator\\bin\\win_x64\\plugins", + "G:\\SteamLibrary\\steamapps\\common\\American Truck Simulator\\bin\\win_x86\\plugins" + ], + "DocumentsDir": "D:\\Documents\\American Truck Simulator", + "ModsDir": "D:\\Documents\\American Truck Simulator\\mod", + "Processes": [], + "IsRunning": false, + "LicensePlateWidth": 64, + "PlayerLevelUps": [ + 200, + 500, + 700, + 900, + 1100, + 1300, + 1500, + 1700, + 1900, + 2100, + 2300, + 2500, + 2700, + 2900, + 3100, + 3300, + 3500, + 3700, + 4000, + 4300, + 4600, + 4900, + 5200, + 5500, + 5800, + 6100, + 6400, + 6700, + 7000, + 7300 + ], + "Currencies": { + "USD": { + "Name": "USD", + "ConversionRate": 1, + "FormatSymbols": [ + "", + "$", + "" + ] + }, + "CAD": { + "Name": "CAD", + "ConversionRate": 1.3, + "FormatSymbols": [ + "", + "$", + "" + ] + }, + "MXN": { + "Name": "MXN", + "ConversionRate": 18.690000000000001, + "FormatSymbols": [ + "", + "$", + "" + ] + }, + "EUR": { + "Name": "EUR", + "ConversionRate": 0.85599999999999998, + "FormatSymbols": [ + "", + "\u20AC", + "" + ] + } + } + } +} \ No newline at end of file diff --git a/TS SE Tool/libs/System.Buffers.dll b/TS SE Tool/libs/System.Buffers.dll new file mode 100644 index 00000000..f2d83c51 Binary files /dev/null and b/TS SE Tool/libs/System.Buffers.dll differ diff --git a/TS SE Tool/libs/System.Buffers.xml b/TS SE Tool/libs/System.Buffers.xml new file mode 100644 index 00000000..e243dcef --- /dev/null +++ b/TS SE Tool/libs/System.Buffers.xml @@ -0,0 +1,38 @@ + + + System.Buffers + + + + Provides a resource pool that enables reusing instances of type . + The type of the objects that are in the resource pool. + + + Initializes a new instance of the class. + + + Creates a new instance of the class. + A new instance of the class. + + + Creates a new instance of the class using the specifed configuration. + The maximum length of an array instance that may be stored in the pool. + The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access. + A new instance of the class with the specified configuration. + + + Retrieves a buffer that is at least the requested length. + The minimum length of the array. + An array of type that is at least minimumLength in length. + + + Returns an array to the pool that was previously obtained using the method on the same instance. + A buffer to return to the pool that was previously obtained using the method. + Indicates whether the contents of the buffer should be cleared before reuse. If clearArray is set to true, and if the pool will store the buffer to enable subsequent reuse, the method will clear the array of its contents so that a subsequent caller using the method will not see the content of the previous caller. If clearArray is set to false or if the pool will release the buffer, the array&#39;s contents are left unchanged. + + + Gets a shared instance. + A shared instance. + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Data.SqlServerCe.dll b/TS SE Tool/libs/System.Data.SqlServerCe.dll new file mode 100644 index 00000000..8d16c2a6 Binary files /dev/null and b/TS SE Tool/libs/System.Data.SqlServerCe.dll differ diff --git a/TS SE Tool/libs/System.IO.Pipelines.dll b/TS SE Tool/libs/System.IO.Pipelines.dll new file mode 100644 index 00000000..1a610389 Binary files /dev/null and b/TS SE Tool/libs/System.IO.Pipelines.dll differ diff --git a/TS SE Tool/libs/System.IO.Pipelines.xml b/TS SE Tool/libs/System.IO.Pipelines.xml new file mode 100644 index 00000000..cf978763 --- /dev/null +++ b/TS SE Tool/libs/System.IO.Pipelines.xml @@ -0,0 +1,382 @@ + + + + System.IO.Pipelines + + + + Result returned by call. + + + Initializes a new instance of struct setting the and flags. + + to indicate the current operation that produced this was canceled by ; otherwise, . + + to indicate the reader is no longer reading data written to the . + + + Gets a value that indicates whether the current operation was canceled by . + + if the current operation was canceled by ; otherwise, . + + + Gets a value that indicates the reader is no longer reading data written to the . + + if the reader is no longer reading data written to the ; otherwise, . + + + Defines a class that provides a duplex pipe from which data can be read from and written to. + + + Gets the half of the duplex pipe. + + + Gets the half of the duplex pipe. + + + The default and implementation. + + + Initializes a new instance of the class using as options. + + + Initializes a new instance of the class with the specified options. + The set of options for this pipe. + + + Resets the pipe. + + + Gets the for this pipe. + A instance for this pipe. + + + Gets the for this pipe. + A instance for this pipe. + + + Represents a set of options. + + + Initializes a new instance of the class with the specified parameters. + The pool of memory blocks to be used for buffer management. + The to be used to execute callbacks and async continuations. + The used to execute callbacks and async continuations. + The number of bytes in the before starts blocking. A value of zero prevents from ever blocking, effectively making the number of bytes in the unlimited. + The number of bytes in the when stops blocking. + The minimum size of the segment requested from . + + if asynchronous continuations should be executed on the they were captured on; otherwise. This takes precedence over the schedulers specified in and . + + + Gets the default instance of . + A object initialized with default parameters. + + + Gets the minimum size of the segment requested from the . + The minimum size of the segment requested from the . + + + Gets the number of bytes in the when starts blocking. A value of zero prevents from ever blocking, effectively making the number of bytes in the unlimited. + The number of bytes in the when starts blocking. + + + Gets the object used for buffer management. + A pool of memory blocks used for buffer management. + + + Gets the used to execute callbacks and async continuations. + A that is used to execute callbacks and async continuations. + + + Gets the number of bytes in the when stops blocking. + The number of bytes in the when stops blocking. + + + Gets a value that determines if asynchronous callbacks and continuations should be executed on the they were captured on. This takes precedence over the schedulers specified in and . + + if asynchronous callbacks and continuations should be executed on the they were captured on; otherwise, . + + + Gets the used to execute callbacks and async continuations. + A object used to execute callbacks and async continuations. + + + Defines a class that provides access to a read side of pipe. + + + Initializes a new instance of the class. + + + Moves forward the pipeline's read cursor to after the consumed data, marking the data as processed. + Marks the extent of the data that has been successfully processed. + + + Moves forward the pipeline's read cursor to after the consumed data, marking the data as processed, read and examined. + Marks the extent of the data that has been successfully processed. + Marks the extent of the data that has been read and examined. + + + Returns a representation of the . + An optional flag that indicates whether disposing the returned leaves open () or completes (). + A stream that represents the . + + + Cancels the pending operation without causing it to throw and without completing the . If there is no pending operation, this cancels the next operation. + + + Signals to the producer that the consumer is done reading. + Optional indicating a failure that's causing the pipeline to complete. + + + Marks the current pipe reader instance as being complete, meaning no more data will be read from it. + An optional exception that indicates the failure that caused the reader to complete. + A value task that represents the asynchronous complete operation. + + + Asynchronously reads the bytes from the and writes them to the specified , using a specified buffer size and cancellation token. + The pipe writer to which the contents of the current stream will be copied. + The token to monitor for cancellation requests. The default value is . + A task that represents the asynchronous copy operation. + + + Asynchronously reads the bytes from the and writes them to the specified stream, using a specified cancellation token. + The stream to which the contents of the current stream will be copied. + The token to monitor for cancellation requests. The default value is . + A task that represents the asynchronous copy operation. + + + Creates a wrapping the specified . + The sequence to wrap. + A that wraps the . + + + Creates a wrapping the specified . + The stream that the pipe reader will wrap. + The options to configure the pipe reader. + A that wraps the . + + + Registers a callback that executes when the side of the pipe is completed. + The callback to register. + The state object to pass to when it's invoked. + + + Asynchronously reads a sequence of bytes from the current . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous read operation. + + + Asynchronously reads a sequence of bytes from the current . + The minimum length that needs to be buffered in order for the call to return. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous read operation. + + + Asynchronously reads a sequence of bytes from the current . + The minimum length that needs to be buffered in order for the call to return. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous read operation. + + + Attempts to synchronously read data the . + When this method returns , this value is set to a instance that represents the result of the read call; otherwise, this value is set to . + + if data was available, or if the call was canceled or the writer was completed; otherwise, . + + + Abstraction for running and callbacks and continuations. + + + Initializes new a instance. + + + Requests to be run on scheduler with being passed in. + The single-parameter action delegate to schedule. + The parameter to pass to the delegate. + + + The implementation that runs callbacks inline. + A instance that runs callbacks inline. + + + The implementation that queues callbacks to the thread pool. + A instance that queues callbacks to the thread pool. + + + Defines a class that provides a pipeline to which data can be written. + + + Initializes a new instance of the class. + + + Notifies the that bytes were written to the output or . You must request a new buffer after calling to continue writing more data; you cannot write to a previously acquired buffer. + The number of bytes written to the or . + + + Returns a representation of the . + An optional flag that indicates whether disposing the returned leaves open () or completes (). + A stream that represents the . + + + Cancels the pending or operation without causing the operation to throw and without completing the . If there is no pending operation, this cancels the next operation. + + + Marks the as being complete, meaning no more items will be written to it. + Optional indicating a failure that's causing the pipeline to complete. + + + Marks the current pipe writer instance as being complete, meaning no more data will be written to it. + An optional exception that indicates the failure that caused the pipeline to complete. + A value task that represents the asynchronous complete operation. + + + Asynchronously reads the bytes from the specified stream and writes them to the . + The stream from which the contents will be copied. + The token to monitor for cancellation requests. The default value is . + A task that represents the asynchronous copy operation. + + + Creates a wrapping the specified . + The stream that the pipe writer will wrap. + The options to configure the pipe writer. + A that wraps the . + + + Makes bytes written available to and runs continuation. + The token to monitor for cancellation requests. The default value is . + A task that represents and wraps the asynchronous flush operation. + + + Returns a to write to that is at least the requested size, as specified by the parameter. + The minimum length of the returned . If 0, a non-empty memory buffer of arbitrary size is returned. + The requested buffer size is not available. + A memory buffer of at least bytes. If is 0, returns a non-empty buffer of arbitrary size. + + + Returns a to write to that is at least the requested size, as specified by the parameter. + The minimum length of the returned . If 0, a non-empty buffer of arbitrary size is returned. + The requested buffer size is not available. + A buffer of at least bytes. If is 0, returns a non-empty buffer of arbitrary size. + + + Registers a callback that executes when the side of the pipe is completed. + The callback to register. + The state object to pass to when it's invoked. + + + Writes the specified byte memory range to the pipe and makes data accessible to the . + The read-only byte memory region to write. + The token to monitor for cancellation requests. The default value is . + A task that represents the asynchronous write operation, and wraps the flush asynchronous operation. + + + Gets a value that indicates whether the current supports reporting the count of unflushed bytes. + + If a class derived from does not support getting the unflushed bytes, calls to throw . + + + When overridden in a derived class, gets the count of unflushed bytes within the current writer. + The does not support getting the unflushed byte count. + + + Represents the result of a call. + + + Creates a new instance of setting and flags. + The read-only sequence containing the bytes of data that were read in the call. + A flag that indicates if the operation that produced this was canceled by . + A flag that indicates whether the end of the data stream has been reached. + + + Gets the that was read. + A read-only sequence containing the bytes of data that were read in the call. + + + Gets a value that indicates whether the current operation was canceled by . + + if the operation that produced this was canceled by ; otherwise, . + + + Gets a value that indicates whether the end of the data stream has been reached. + + if the end of the data stream has been reached; otherwise, . + + + Provides extension methods for that support read and write operations directly into pipes. + + + Asynchronously reads the bytes from the and writes them to the specified , using a cancellation token. + The stream from which the contents of the current stream will be copied. + The writer to which the contents of the source stream will be copied. + The token to monitor for cancellation requests. The default value is . + A task that represents the asynchronous copy operation. + + + Represents a set of options for controlling the creation of the . + + + Initializes a instance, optionally specifying a memory pool, a minimum buffer size, a minimum read size, and whether the underlying stream should be left open after the completes. + The memory pool to use when allocating memory. The default value is . + The minimum buffer size to use when renting memory from the . The default value is 4096. + The threshold of remaining bytes in the buffer before a new buffer is allocated. The default value is 1024. + + to leave the underlying stream open after the completes; to close it. The default is . + + + Initializes a instance, optionally specifying a memory pool, a minimum buffer size, a minimum read size, and whether the underlying stream should be left open after the completes. + The memory pool to use when allocating memory. The default value is . + The minimum buffer size to use when renting memory from the . The default value is 4096. + The threshold of remaining bytes in the buffer before a new buffer is allocated. The default value is 1024. + + to leave the underlying stream open after the completes; to close it. The default is . + + if reads with an empty buffer should be issued to the underlying stream before allocating memory; otherwise, . + + + Gets the minimum buffer size to use when renting memory from the . + The buffer size. + + + Gets the value that indicates if the underlying stream should be left open after the completes. + + if the underlying stream should be left open after the completes; otherwise, . + + + Gets the threshold of remaining bytes in the buffer before a new buffer is allocated. + The minimum read size. + + + Gets the to use when allocating memory. + A memory pool instance. + + + Gets the value that indicates if reads with an empty buffer should be issued to the underlying stream, in order to wait for data to arrive before allocating memory. + + if reads with an empty buffer should be issued to the underlying stream before allocating memory; otherwise, . + + + Represents a set of options for controlling the creation of the . + + + Initializes a instance, optionally specifying a memory pool, a minimum buffer size, and whether the underlying stream should be left open after the completes. + The memory pool to use when allocating memory. The default value is . + The minimum buffer size to use when renting memory from the . The default value is 4096. + + to leave the underlying stream open after the completes; to close it. The default is . + + + Gets the value that indicates if the underlying stream should be left open after the completes. + + if the underlying stream should be left open after the completes; otherwise, . + + + Gets the minimum buffer size to use when renting memory from the . + An integer representing the minimum buffer size. + + + Gets the to use when allocating memory. + A memory pool instance. + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Memory.dll b/TS SE Tool/libs/System.Memory.dll new file mode 100644 index 00000000..46171997 Binary files /dev/null and b/TS SE Tool/libs/System.Memory.dll differ diff --git a/TS SE Tool/libs/System.Memory.xml b/TS SE Tool/libs/System.Memory.xml new file mode 100644 index 00000000..4d12fd71 --- /dev/null +++ b/TS SE Tool/libs/System.Memory.xml @@ -0,0 +1,355 @@ + + + System.Memory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Numerics.Vectors.dll b/TS SE Tool/libs/System.Numerics.Vectors.dll new file mode 100644 index 00000000..08659724 Binary files /dev/null and b/TS SE Tool/libs/System.Numerics.Vectors.dll differ diff --git a/TS SE Tool/libs/System.Numerics.Vectors.xml b/TS SE Tool/libs/System.Numerics.Vectors.xml new file mode 100644 index 00000000..da34d390 --- /dev/null +++ b/TS SE Tool/libs/System.Numerics.Vectors.xml @@ -0,0 +1,2621 @@ + + + System.Numerics.Vectors + + + + Represents a 3x2 matrix. + + + Creates a 3x2 matrix from the specified components. + The value to assign to the first element in the first row. + The value to assign to the second element in the first row. + The value to assign to the first element in the second row. + The value to assign to the second element in the second row. + The value to assign to the first element in the third row. + The value to assign to the second element in the third row. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values of value1 and value2. + + + Creates a rotation matrix using the given rotation in radians. + The amount of rotation, in radians. + The rotation matrix. + + + Creates a rotation matrix using the specified rotation in radians and a center point. + The amount of rotation, in radians. + The center point. + The rotation matrix. + + + Creates a scaling matrix from the specified X and Y components. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The scaling matrix. + + + Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. + The uniform scale to use. + The center offset. + The scaling matrix. + + + Creates a scaling matrix that is offset by a given center point. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The center point. + The scaling matrix. + + + Creates a scaling matrix that scales uniformly with the given scale. + The uniform scale to use. + The scaling matrix. + + + Creates a scaling matrix from the specified vector scale. + The scale to use. + The scaling matrix. + + + Creates a scaling matrix from the specified vector scale with an offset from the specified center point. + The scale to use. + The center offset. + The scaling matrix. + + + Creates a skew matrix from the specified angles in radians. + The X angle, in radians. + The Y angle, in radians. + The skew matrix. + + + Creates a skew matrix from the specified angles in radians and a center point. + The X angle, in radians. + The Y angle, in radians. + The center point. + The skew matrix. + + + Creates a translation matrix from the specified 2-dimensional vector. + The translation position. + The translation matrix. + + + Creates a translation matrix from the specified X and Y components. + The X position. + The Y position. + The translation matrix. + + + Returns a value that indicates whether this instance and another 3x2 matrix are equal. + The other matrix. + true if the two matrices are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Calculates the determinant for this matrix. + The determinant. + + + Returns the hash code for this instance. + The hash code. + + + Gets the multiplicative identity matrix. + The multiplicative identify matrix. + + + Inverts the specified matrix. The return value indicates whether the operation succeeded. + The matrix to invert. + When this method returns, contains the inverted matrix if the operation succeeded. + true if matrix was converted successfully; otherwise, false. + + + Indicates whether the current matrix is the identity matrix. + true if the current matrix is the identity matrix; otherwise, false. + + + Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. + The first matrix. + The second matrix. + The relative weighting of matrix2. + The interpolated matrix. + + + The first element of the first row. + + + + The second element of the first row. + + + + The first element of the second row. + + + + The second element of the second row. + + + + The first element of the third row. + + + + The second element of the third row. + + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values. + + + Returns a value that indicates whether the specified matrices are equal. + The first matrix to compare. + The second matrix to compare. + true if value1 and value2 are equal; otherwise, false. + + + Returns a value that indicates whether the specified matrices are not equal. + The first matrix to compare. + The second matrix to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Returns a string that represents this matrix. + The string representation of this matrix. + + + Gets or sets the translation component of this matrix. + The translation component of the current instance. + + + Represents a 4x4 matrix. + + + Creates a object from a specified object. + A 3x2 matrix. + + + Creates a 4x4 matrix from the specified components. + The value to assign to the first element in the first row. + The value to assign to the second element in the first row. + The value to assign to the third element in the first row. + The value to assign to the fourth element in the first row. + The value to assign to the first element in the second row. + The value to assign to the second element in the second row. + The value to assign to the third element in the second row. + The value to assign to the third element in the second row. + The value to assign to the first element in the third row. + The value to assign to the second element in the third row. + The value to assign to the third element in the third row. + The value to assign to the fourth element in the third row. + The value to assign to the first element in the fourth row. + The value to assign to the second element in the fourth row. + The value to assign to the third element in the fourth row. + The value to assign to the fourth element in the fourth row. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values of value1 and value2. + + + Creates a spherical billboard that rotates around a specified object position. + The position of the object that the billboard will rotate around. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard. + + + Creates a cylindrical billboard that rotates around a specified axis. + The position of the object that the billboard will rotate around. + The position of the camera. + The axis to rotate the billboard around. + The forward vector of the camera. + The forward vector of the object. + The billboard matrix. + + + Creates a matrix that rotates around an arbitrary vector. + The axis to rotate around. + The angle to rotate around axis, in radians. + The rotation matrix. + + + Creates a rotation matrix from the specified Quaternion rotation value. + The source Quaternion. + The rotation matrix. + + + Creates a rotation matrix from the specified yaw, pitch, and roll. + The angle of rotation, in radians, around the Y axis. + The angle of rotation, in radians, around the X axis. + The angle of rotation, in radians, around the Z axis. + The rotation matrix. + + + Creates a view matrix. + The position of the camera. + The target towards which the camera is pointing. + The direction that is &quot;up&quot; from the camera&#39;s point of view. + The view matrix. + + + Creates an orthographic perspective matrix from the given view volume dimensions. + The width of the view volume. + The height of the view volume. + The minimum Z-value of the view volume. + The maximum Z-value of the view volume. + The orthographic projection matrix. + + + Creates a customized orthographic projection matrix. + The minimum X-value of the view volume. + The maximum X-value of the view volume. + The minimum Y-value of the view volume. + The maximum Y-value of the view volume. + The minimum Z-value of the view volume. + The maximum Z-value of the view volume. + The orthographic projection matrix. + + + Creates a perspective projection matrix from the given view volume dimensions. + The width of the view volume at the near view plane. + The height of the view volume at the near view plane. + The distance to the near view plane. + The distance to the far view plane. + The perspective projection matrix. + nearPlaneDistance is less than or equal to zero. + -or- + farPlaneDistance is less than or equal to zero. + -or- + nearPlaneDistance is greater than or equal to farPlaneDistance. + + + Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. + The field of view in the y direction, in radians. + The aspect ratio, defined as view space width divided by height. + The distance to the near view plane. + The distance to the far view plane. + The perspective projection matrix. + fieldOfView is less than or equal to zero. + -or- + fieldOfView is greater than or equal to . + nearPlaneDistance is less than or equal to zero. + -or- + farPlaneDistance is less than or equal to zero. + -or- + nearPlaneDistance is greater than or equal to farPlaneDistance. + + + Creates a customized perspective projection matrix. + The minimum x-value of the view volume at the near view plane. + The maximum x-value of the view volume at the near view plane. + The minimum y-value of the view volume at the near view plane. + The maximum y-value of the view volume at the near view plane. + The distance to the near view plane. + The distance to the far view plane. + The perspective projection matrix. + nearPlaneDistance is less than or equal to zero. + -or- + farPlaneDistance is less than or equal to zero. + -or- + nearPlaneDistance is greater than or equal to farPlaneDistance. + + + Creates a matrix that reflects the coordinate system about a specified plane. + The plane about which to create a reflection. + A new matrix expressing the reflection. + + + Creates a matrix for rotating points around the X axis. + The amount, in radians, by which to rotate around the X axis. + The rotation matrix. + + + Creates a matrix for rotating points around the X axis from a center point. + The amount, in radians, by which to rotate around the X axis. + The center point. + The rotation matrix. + + + The amount, in radians, by which to rotate around the Y axis from a center point. + The amount, in radians, by which to rotate around the Y-axis. + The center point. + The rotation matrix. + + + Creates a matrix for rotating points around the Y axis. + The amount, in radians, by which to rotate around the Y-axis. + The rotation matrix. + + + Creates a matrix for rotating points around the Z axis. + The amount, in radians, by which to rotate around the Z-axis. + The rotation matrix. + + + Creates a matrix for rotating points around the Z axis from a center point. + The amount, in radians, by which to rotate around the Z-axis. + The center point. + The rotation matrix. + + + Creates a scaling matrix from the specified vector scale. + The scale to use. + The scaling matrix. + + + Creates a uniform scaling matrix that scale equally on each axis. + The uniform scaling factor. + The scaling matrix. + + + Creates a scaling matrix with a center point. + The vector that contains the amount to scale on each axis. + The center point. + The scaling matrix. + + + Creates a uniform scaling matrix that scales equally on each axis with a center point. + The uniform scaling factor. + The center point. + The scaling matrix. + + + Creates a scaling matrix from the specified X, Y, and Z components. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The value to scale by on the Z axis. + The scaling matrix. + + + Creates a scaling matrix that is offset by a given center point. + The value to scale by on the X axis. + The value to scale by on the Y axis. + The value to scale by on the Z axis. + The center point. + The scaling matrix. + + + Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. + The direction from which the light that will cast the shadow is coming. + The plane onto which the new matrix should flatten geometry so as to cast a shadow. + A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. + + + Creates a translation matrix from the specified 3-dimensional vector. + The amount to translate in each axis. + The translation matrix. + + + Creates a translation matrix from the specified X, Y, and Z components. + The amount to translate on the X axis. + The amount to translate on the Y axis. + The amount to translate on the Z axis. + The translation matrix. + + + Creates a world matrix with the specified parameters. + The position of the object. + The forward direction of the object. + The upward direction of the object. Its value is usually [0, 1, 0]. + The world matrix. + + + Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. + The source matrix. + When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. + When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. + When the method returns, contains the translation component of the transformation matrix if the operation succeeded. + true if matrix was decomposed successfully; otherwise, false. + + + Returns a value that indicates whether this instance and another 4x4 matrix are equal. + The other matrix. + true if the two matrices are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Calculates the determinant of the current 4x4 matrix. + The determinant. + + + Returns the hash code for this instance. + The hash code. + + + Gets the multiplicative identity matrix. + Gets the multiplicative identity matrix. + + + Inverts the specified matrix. The return value indicates whether the operation succeeded. + The matrix to invert. + When this method returns, contains the inverted matrix if the operation succeeded. + true if matrix was converted successfully; otherwise, false. + + + Indicates whether the current matrix is the identity matrix. + true if the current matrix is the identity matrix; otherwise, false. + + + Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. + The first matrix. + The second matrix. + The relative weighting of matrix2. + The interpolated matrix. + + + The first element of the first row. + + + + The second element of the first row. + + + + The third element of the first row. + + + + The fourth element of the first row. + + + + The first element of the second row. + + + + The second element of the second row. + + + + The third element of the second row. + + + + The fourth element of the second row. + + + + The first element of the third row. + + + + The second element of the third row. + + + + The third element of the third row. + + + + The fourth element of the third row. + + + + The first element of the fourth row. + + + + The second element of the fourth row. + + + + The third element of the fourth row. + + + + The fourth element of the fourth row. + + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Adds each element in one matrix with its corresponding element in a second matrix. + The first matrix. + The second matrix. + The matrix that contains the summed values. + + + Returns a value that indicates whether the specified matrices are equal. + The first matrix to compare. + The second matrix to care + true if value1 and value2 are equal; otherwise, false. + + + Returns a value that indicates whether the specified matrices are not equal. + The first matrix to compare. + The second matrix to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. + The matrix to scale. + The scaling value to use. + The scaled matrix. + + + Returns the matrix that results from multiplying two matrices together. + The first matrix. + The second matrix. + The product matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Negates the specified matrix by multiplying all its values by -1. + The matrix to negate. + The negated matrix. + + + Subtracts each element in a second matrix from its corresponding element in a first matrix. + The first matrix. + The second matrix. + The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Returns a string that represents this matrix. + The string representation of this matrix. + + + Transforms the specified matrix by applying the specified Quaternion rotation. + The matrix to transform. + The rotation t apply. + The transformed matrix. + + + Gets or sets the translation component of this matrix. + The translation component of the current instance. + + + Transposes the rows and columns of a matrix. + The matrix to transpose. + The transposed matrix. + + + Represents a three-dimensional plane. + + + Creates a object from a specified four-dimensional vector. + A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. + + + Creates a object from a specified normal and the distance along the normal from the origin. + The plane&#39;s normal vector. + The plane&#39;s distance from the origin along its normal vector. + + + Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. + The X component of the normal. + The Y component of the normal. + The Z component of the normal. + The distance of the plane along its normal from the origin. + + + Creates a object that contains three specified points. + The first point defining the plane. + The second point defining the plane. + The third point defining the plane. + The plane containing the three points. + + + The distance of the plane along its normal from the origin. + + + + Calculates the dot product of a plane and a 4-dimensional vector. + The plane. + The four-dimensional vector. + The dot product. + + + Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. + The plane. + The 3-dimensional vector. + The dot product. + + + Returns the dot product of a specified three-dimensional vector and the vector of this plane. + The plane. + The three-dimensional vector. + The dot product. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Returns a value that indicates whether this instance and another plane object are equal. + The other plane. + true if the two planes are equal; otherwise, false. + + + Returns the hash code for this instance. + The hash code. + + + The normal vector of the plane. + + + + Creates a new object whose normal vector is the source plane&#39;s normal vector normalized. + The source plane. + The normalized plane. + + + Returns a value that indicates whether two planes are equal. + The first plane to compare. + The second plane to compare. + true if value1 and value2 are equal; otherwise, false. + + + Returns a value that indicates whether two planes are not equal. + The first plane to compare. + The second plane to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the string representation of this plane object. + A string that represents this object. + + + Transforms a normalized plane by a 4x4 matrix. + The normalized plane to transform. + The transformation matrix to apply to plane. + The transformed plane. + + + Transforms a normalized plane by a Quaternion rotation. + The normalized plane to transform. + The Quaternion rotation to apply to the plane. + A new plane that results from applying the Quaternion rotation. + + + Represents a vector that is used to encode three-dimensional physical rotations. + + + Creates a quaternion from the specified vector and rotation parts. + The vector part of the quaternion. + The rotation part of the quaternion. + + + Constructs a quaternion from the specified components. + The value to assign to the X component of the quaternion. + The value to assign to the Y component of the quaternion. + The value to assign to the Z component of the quaternion. + The value to assign to the W component of the quaternion. + + + Adds each element in one quaternion with its corresponding element in a second quaternion. + The first quaternion. + The second quaternion. + The quaternion that contains the summed values of value1 and value2. + + + Concatenates two quaternions. + The first quaternion rotation in the series. + The second quaternion rotation in the series. + A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. + + + Returns the conjugate of a specified quaternion. + The quaternion. + A new quaternion that is the conjugate of value. + + + Creates a quaternion from a vector and an angle to rotate about the vector. + The vector to rotate around. + The angle, in radians, to rotate around the vector. + The newly created quaternion. + + + Creates a quaternion from the specified rotation matrix. + The rotation matrix. + The newly created quaternion. + + + Creates a new quaternion from the given yaw, pitch, and roll. + The yaw angle, in radians, around the Y axis. + The pitch angle, in radians, around the X axis. + The roll angle, in radians, around the Z axis. + The resulting quaternion. + + + Divides one quaternion by a second quaternion. + The dividend. + The divisor. + The quaternion that results from dividing value1 by value2. + + + Calculates the dot product of two quaternions. + The first quaternion. + The second quaternion. + The dot product. + + + Returns a value that indicates whether this instance and another quaternion are equal. + The other quaternion. + true if the two quaternions are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Returns the hash code for this instance. + The hash code. + + + Gets a quaternion that represents no rotation. + A quaternion whose values are (0, 0, 0, 1). + + + Returns the inverse of a quaternion. + The quaternion. + The inverted quaternion. + + + Gets a value that indicates whether the current instance is the identity quaternion. + true if the current instance is the identity quaternion; otherwise, false. + + + Calculates the length of the quaternion. + The computed length of the quaternion. + + + Calculates the squared length of the quaternion. + The length squared of the quaternion. + + + Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. + The first quaternion. + The second quaternion. + The relative weight of quaternion2 in the interpolation. + The interpolated quaternion. + + + Returns the quaternion that results from multiplying two quaternions together. + The first quaternion. + The second quaternion. + The product quaternion. + + + Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. + The source quaternion. + The scalar value. + The scaled quaternion. + + + Reverses the sign of each component of the quaternion. + The quaternion to negate. + The negated quaternion. + + + Divides each component of a specified by its length. + The quaternion to normalize. + The normalized quaternion. + + + Adds each element in one quaternion with its corresponding element in a second quaternion. + The first quaternion. + The second quaternion. + The quaternion that contains the summed values of value1 and value2. + + + Divides one quaternion by a second quaternion. + The dividend. + The divisor. + The quaternion that results from dividing value1 by value2. + + + Returns a value that indicates whether two quaternions are equal. + The first quaternion to compare. + The second quaternion to compare. + true if the two quaternions are equal; otherwise, false. + + + Returns a value that indicates whether two quaternions are not equal. + The first quaternion to compare. + The second quaternion to compare. + true if value1 and value2 are not equal; otherwise, false. + + + Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. + The source quaternion. + The scalar value. + The scaled quaternion. + + + Returns the quaternion that results from multiplying two quaternions together. + The first quaternion. + The second quaternion. + The product quaternion. + + + Subtracts each element in a second quaternion from its corresponding element in a first quaternion. + The first quaternion. + The second quaternion. + The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Reverses the sign of each component of the quaternion. + The quaternion to negate. + The negated quaternion. + + + Interpolates between two quaternions, using spherical linear interpolation. + The first quaternion. + The second quaternion. + The relative weight of the second quaternion in the interpolation. + The interpolated quaternion. + + + Subtracts each element in a second quaternion from its corresponding element in a first quaternion. + The first quaternion. + The second quaternion. + The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. + + + Returns a string that represents this quaternion. + The string representation of this quaternion. + + + The rotation component of the quaternion. + + + + The X value of the vector component of the quaternion. + + + + The Y value of the vector component of the quaternion. + + + + The Z value of the vector component of the quaternion. + + + + Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. + The vector type. T can be any primitive numeric type. + + + Creates a vector whose components are of a specified type. + The numeric type that defines the type of the components in the vector. + + + Creates a vector from a specified array. + A numeric array. + values is null. + + + Creates a vector from a specified array starting at a specified index position. + A numeric array. + The starting index position from which to create the vector. + values is null. + index is less than zero. + -or- + The length of values minus index is less than . + + + Copies the vector instance to a specified destination array. + The array to receive a copy of the vector values. + destination is null. + The number of elements in the current vector is greater than the number of elements available in the destination array. + + + Copies the vector instance to a specified destination array starting at a specified index position. + The array to receive a copy of the vector values. + The starting index in destination at which to begin the copy operation. + destination is null. + The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. + index is less than zero or greater than the last index in destination. + + + Returns the number of elements stored in the vector. + The number of elements stored in the vector. + Access to the property getter via reflection is not supported. + + + Returns a value that indicates whether this instance is equal to a specified vector. + The vector to compare with this instance. + true if the current instance and other are equal; otherwise, false. + + + Returns a value that indicates whether this instance is equal to a specified object. + The object to compare with this instance. + true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. + + + Returns the hash code for this instance. + The hash code. + + + Gets the element at a specified index. + The index of the element to return. + The element at index index. + index is less than zero. + -or- + index is greater than or equal to . + + + Returns a vector containing all ones. + A vector containing all ones. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. + The first vector. + The second vector. + The vector that results from the bitwise And of left and right. + + + Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. + The first vector. + The second vector. + The vector that results from the bitwise Or of the elements in left and right. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Returns a value that indicates whether each pair of elements in two specified vectors are equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. + The first vector. + The second vector. + The vector that results from the bitwise XOr of the elements in left and right. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Reinterprets the bits of the specified vector into a vector of type . + The vector to reinterpret. + The reinterpreted vector. + + + Returns a value that indicates whether any single pair of elements in the specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if any element pairs in left and right are equal. false if no element pairs are equal. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar value. + The source vector. + A scalar value. + The scaled vector. + + + Multiplies a vector by the given scalar. + The scalar value. + The source vector. + The scaled vector. + + + Returns a new vector whose elements are obtained by taking the one&#39;s complement of a specified vector&#39;s elements. + The source vector. + The one&#39;s complement vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates a given vector. + The vector to negate. + The negated vector. + + + Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Returns the string representation of this vector using default formatting. + The string representation of this vector. + + + Returns the string representation of this vector using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns a vector containing all zeroes. + A vector containing all zeroes. + + + Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. + + + Returns a new vector whose elements are the absolute values of the given vector&#39;s elements. + The source vector. + The vector type. T can be any primitive numeric type. + The absolute value vector. + + + Returns a new vector whose values are the sum of each pair of elements from two given vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The summed vector. + + + Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of long integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of signed bytes. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. + The source vector. + The vector type. T can be any primitive numeric type. + The reinterpreted vector. + + + Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. + The integral mask vector used to drive selection. + The first source vector. + The second source vector. + The new vector with elements selected based on the mask. + + + Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. + The integral mask vector used to drive selection. + The first source vector. + The second source vector. + The new vector with elements selected based on the mask. + + + Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. + The integral mask vector used to drive selection. + The first source vector. + The second source vector. + The vector type. T can be any primitive numeric type. + The new vector with elements selected based on the mask. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns a new vector whose values are the result of dividing the first vector&#39;s elements by the corresponding elements in the second vector. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The divided vector. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The dot product. + + + Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether each pair of elements in the given vectors is equal. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all elements in left and right are equal; otherwise, false. + + + Returns a value that indicates whether any single pair of elements in the given vectors is equal. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element pair in left and right is equal; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all elements in left are greater than the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is greater than the corresponding element in right; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. + + + Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. + true if vector operations are subject to hardware acceleration; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all of the elements in left are less than the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is less than the corresponding element in right; otherwise, false. + + + Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. + The first vector to compare. + The second vector to compare. + The resulting long integer vector. + + + Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. + The first vector to compare. + The second vector to compare. + The resulting integral vector. + + + Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. + + + Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + true if any element in left is less than or equal to the corresponding element in right; otherwise, false. + + + Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The maximum vector. + + + Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. + The first vector to compare. + The second vector to compare. + The vector type. T can be any primitive numeric type. + The minimum vector. + + + Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. + The scalar value. + The vector. + The vector type. T can be any primitive numeric type. + The scaled vector. + + + Returns a new vector whose values are the product of each pair of elements in two specified vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The product vector. + + + Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. + The vector. + The scalar value. + The vector type. T can be any primitive numeric type. + The scaled vector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns a new vector whose elements are the negation of the corresponding element in the specified vector. + The source vector. + The vector type. T can be any primitive numeric type. + The negated vector. + + + Returns a new vector whose elements are obtained by taking the one&#39;s complement of a specified vector&#39;s elements. + The source vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Returns a new vector whose elements are the square roots of a specified vector&#39;s elements. + The source vector. + The vector type. T can be any primitive numeric type. + The square root vector. + + + Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The difference vector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. + The first vector. + The second vector. + The vector type. T can be any primitive numeric type. + The resulting vector. + + + Represents a vector with two single-precision floating-point values. + + + Creates a new object whose two elements have the same value. + The value to assign to both elements. + + + Creates a vector whose elements have the specified values. + The value to assign to the field. + The value to assign to the field. + + + Returns a vector whose elements are the absolute values of each of the specified vector&#39;s elements. + A vector. + The absolute value vector. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Restricts a vector between a minimum and a maximum value. + The vector to restrict. + The minimum value. + The maximum value. + The restricted vector. + + + Copies the elements of the vector to a specified array. + The destination array. + array is null. + The number of elements in the current instance is greater than in the array. + array is multidimensional. + + + Copies the elements of the vector to a specified array starting at a specified index position. + The destination array. + The index at which to copy the first element of the vector. + array is null. + The number of elements in the current instance is greater than in the array. + index is less than zero. + -or- + index is greater than or equal to the array length. + array is multidimensional. + + + Computes the Euclidean distance between the two given points. + The first point. + The second point. + The distance. + + + Returns the Euclidean distance squared between two specified points. + The first point. + The second point. + The distance squared. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector resulting from the division. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The vector that results from the division. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The dot product. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Returns a value that indicates whether this instance and another vector are equal. + The other vector. + true if the two vectors are equal; otherwise, false. + + + Returns the hash code for this instance. + The hash code. + + + Returns the length of the vector. + The vector&#39;s length. + + + Returns the length of the vector squared. + The vector&#39;s length squared. + + + Performs a linear interpolation between two vectors based on the given weighting. + The first vector. + The second vector. + A value between 0 and 1 that indicates the weight of value2. + The interpolated vector. + + + Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The maximized vector. + + + Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The minimized vector. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar. + The vector to multiply. + The scalar value. + The scaled vector. + + + Multiplies a scalar value by a specified vector. + The scaled value. + The vector. + The scaled vector. + + + Negates a specified vector. + The vector to negate. + The negated vector. + + + Returns a vector with the same direction as the specified vector, but with a length of one. + The vector to normalize. + The normalized vector. + + + Gets a vector whose 2 elements are equal to one. + A vector whose two elements are equal to one (that is, it returns the vector (1,1). + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The result of the division. + + + Returns a value that indicates whether each pair of elements in two specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a value that indicates whether two specified vectors are not equal. + The first vector to compare. + The second vector to compare. + true if left and right are not equal; otherwise, false. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiples the specified vector by the specified scalar value. + The vector. + The scalar value. + The scaled vector. + + + Multiples the scalar value by the specified vector. + The vector. + The scalar value. + The scaled vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates the specified vector. + The vector to negate. + The negated vector. + + + Returns the reflection of a vector off a surface that has the specified normal. + The source vector. + The normal of the surface being reflected off. + The reflected vector. + + + Returns a vector whose elements are the square root of each of a specified vector&#39;s elements. + A vector. + The square root vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The difference vector. + + + Returns the string representation of the current instance using default formatting. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Transforms a vector by a specified 3x2 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a vector normal by the given 3x2 matrix. + The source vector. + The matrix. + The transformed vector. + + + Transforms a vector normal by the given 4x4 matrix. + The source vector. + The matrix. + The transformed vector. + + + Gets the vector (1,0). + The vector (1,0). + + + Gets the vector (0,1). + The vector (0,1). + + + The X component of the vector. + + + + The Y component of the vector. + + + + Returns a vector whose 2 elements are equal to zero. + A vector whose two elements are equal to zero (that is, it returns the vector (0,0). + + + Represents a vector with three single-precision floating-point values. + + + Creates a new object whose three elements have the same value. + The value to assign to all three elements. + + + Creates a new object from the specified object and the specified value. + The vector with two elements. + The additional value to assign to the field. + + + Creates a vector whose elements have the specified values. + The value to assign to the field. + The value to assign to the field. + The value to assign to the field. + + + Returns a vector whose elements are the absolute values of each of the specified vector&#39;s elements. + A vector. + The absolute value vector. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Restricts a vector between a minimum and a maximum value. + The vector to restrict. + The minimum value. + The maximum value. + The restricted vector. + + + Copies the elements of the vector to a specified array. + The destination array. + array is null. + The number of elements in the current instance is greater than in the array. + array is multidimensional. + + + Copies the elements of the vector to a specified array starting at a specified index position. + The destination array. + The index at which to copy the first element of the vector. + array is null. + The number of elements in the current instance is greater than in the array. + index is less than zero. + -or- + index is greater than or equal to the array length. + array is multidimensional. + + + Computes the cross product of two vectors. + The first vector. + The second vector. + The cross product. + + + Computes the Euclidean distance between the two given points. + The first point. + The second point. + The distance. + + + Returns the Euclidean distance squared between two specified points. + The first point. + The second point. + The distance squared. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The vector that results from the division. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector resulting from the division. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The dot product. + + + Returns a value that indicates whether this instance and another vector are equal. + The other vector. + true if the two vectors are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Returns the hash code for this instance. + The hash code. + + + Returns the length of this vector object. + The vector&#39;s length. + + + Returns the length of the vector squared. + The vector&#39;s length squared. + + + Performs a linear interpolation between two vectors based on the given weighting. + The first vector. + The second vector. + A value between 0 and 1 that indicates the weight of value2. + The interpolated vector. + + + Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The maximized vector. + + + Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The minimized vector. + + + Multiplies a scalar value by a specified vector. + The scaled value. + The vector. + The scaled vector. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar. + The vector to multiply. + The scalar value. + The scaled vector. + + + Negates a specified vector. + The vector to negate. + The negated vector. + + + Returns a vector with the same direction as the specified vector, but with a length of one. + The vector to normalize. + The normalized vector. + + + Gets a vector whose 3 elements are equal to one. + A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The result of the division. + + + Returns a value that indicates whether each pair of elements in two specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a value that indicates whether two specified vectors are not equal. + The first vector to compare. + The second vector to compare. + true if left and right are not equal; otherwise, false. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiples the specified vector by the specified scalar value. + The vector. + The scalar value. + The scaled vector. + + + Multiples the scalar value by the specified vector. + The vector. + The scalar value. + The scaled vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates the specified vector. + The vector to negate. + The negated vector. + + + Returns the reflection of a vector off a surface that has the specified normal. + The source vector. + The normal of the surface being reflected off. + The reflected vector. + + + Returns a vector whose elements are the square root of each of a specified vector&#39;s elements. + A vector. + The square root vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The difference vector. + + + Returns the string representation of the current instance using default formatting. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Transforms a vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a vector normal by the given 4x4 matrix. + The source vector. + The matrix. + The transformed vector. + + + Gets the vector (1,0,0). + The vector (1,0,0). + + + Gets the vector (0,1,0). + The vector (0,1,0).. + + + Gets the vector (0,0,1). + The vector (0,0,1). + + + The X component of the vector. + + + + The Y component of the vector. + + + + The Z component of the vector. + + + + Gets a vector whose 3 elements are equal to zero. + A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). + + + Represents a vector with four single-precision floating-point values. + + + Creates a new object whose four elements have the same value. + The value to assign to all four elements. + + + Constructs a new object from the specified object and a W component. + The vector to use for the X, Y, and Z components. + The W component. + + + Creates a new object from the specified object and a Z and a W component. + The vector to use for the X and Y components. + The Z component. + The W component. + + + Creates a vector whose elements have the specified values. + The value to assign to the field. + The value to assign to the field. + The value to assign to the field. + The value to assign to the field. + + + Returns a vector whose elements are the absolute values of each of the specified vector&#39;s elements. + A vector. + The absolute value vector. + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Restricts a vector between a minimum and a maximum value. + The vector to restrict. + The minimum value. + The maximum value. + The restricted vector. + + + Copies the elements of the vector to a specified array. + The destination array. + array is null. + The number of elements in the current instance is greater than in the array. + array is multidimensional. + + + Copies the elements of the vector to a specified array starting at a specified index position. + The destination array. + The index at which to copy the first element of the vector. + array is null. + The number of elements in the current instance is greater than in the array. + index is less than zero. + -or- + index is greater than or equal to the array length. + array is multidimensional. + + + Computes the Euclidean distance between the two given points. + The first point. + The second point. + The distance. + + + Returns the Euclidean distance squared between two specified points. + The first point. + The second point. + The distance squared. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector resulting from the division. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The vector that results from the division. + + + Returns the dot product of two vectors. + The first vector. + The second vector. + The dot product. + + + Returns a value that indicates whether this instance and another vector are equal. + The other vector. + true if the two vectors are equal; otherwise, false. + + + Returns a value that indicates whether this instance and a specified object are equal. + The object to compare with the current instance. + true if the current instance and obj are equal; otherwise, false. If obj is null, the method returns false. + + + Returns the hash code for this instance. + The hash code. + + + Returns the length of this vector object. + The vector&#39;s length. + + + Returns the length of the vector squared. + The vector&#39;s length squared. + + + Performs a linear interpolation between two vectors based on the given weighting. + The first vector. + The second vector. + A value between 0 and 1 that indicates the weight of value2. + The interpolated vector. + + + Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The maximized vector. + + + Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. + The first vector. + The second vector. + The minimized vector. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiplies a vector by a specified scalar. + The vector to multiply. + The scalar value. + The scaled vector. + + + Multiplies a scalar value by a specified vector. + The scaled value. + The vector. + The scaled vector. + + + Negates a specified vector. + The vector to negate. + The negated vector. + + + Returns a vector with the same direction as the specified vector, but with a length of one. + The vector to normalize. + The normalized vector. + + + Gets a vector whose 4 elements are equal to one. + Returns . + + + Adds two vectors together. + The first vector to add. + The second vector to add. + The summed vector. + + + Divides the first vector by the second. + The first vector. + The second vector. + The vector that results from dividing left by right. + + + Divides the specified vector by a specified scalar value. + The vector. + The scalar value. + The result of the division. + + + Returns a value that indicates whether each pair of elements in two specified vectors is equal. + The first vector to compare. + The second vector to compare. + true if left and right are equal; otherwise, false. + + + Returns a value that indicates whether two specified vectors are not equal. + The first vector to compare. + The second vector to compare. + true if left and right are not equal; otherwise, false. + + + Multiplies two vectors together. + The first vector. + The second vector. + The product vector. + + + Multiples the specified vector by the specified scalar value. + The vector. + The scalar value. + The scaled vector. + + + Multiples the scalar value by the specified vector. + The vector. + The scalar value. + The scaled vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The vector that results from subtracting right from left. + + + Negates the specified vector. + The vector to negate. + The negated vector. + + + Returns a vector whose elements are the square root of each of a specified vector&#39;s elements. + A vector. + The square root vector. + + + Subtracts the second vector from the first. + The first vector. + The second vector. + The difference vector. + + + Returns the string representation of the current instance using default formatting. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements. + A or that defines the format of individual elements. + The string representation of the current instance. + + + Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. + A or that defines the format of individual elements. + A format provider that supplies culture-specific formatting information. + The string representation of the current instance. + + + Transforms a four-dimensional vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a four-dimensional vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a three-dimensional vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a two-dimensional vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Transforms a two-dimensional vector by the specified Quaternion rotation value. + The vector to rotate. + The rotation to apply. + The transformed vector. + + + Transforms a three-dimensional vector by a specified 4x4 matrix. + The vector to transform. + The transformation matrix. + The transformed vector. + + + Gets the vector (0,0,0,1). + The vector (0,0,0,1). + + + Gets the vector (1,0,0,0). + The vector (1,0,0,0). + + + Gets the vector (0,1,0,0). + The vector (0,1,0,0).. + + + Gets a vector whose 4 elements are equal to zero. + The vector (0,0,1,0). + + + The W component of the vector. + + + + The X component of the vector. + + + + The Y component of the vector. + + + + The Z component of the vector. + + + + Gets a vector whose 4 elements are equal to zero. + A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Runtime.CompilerServices.Unsafe.dll b/TS SE Tool/libs/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 00000000..c5ba4e40 Binary files /dev/null and b/TS SE Tool/libs/System.Runtime.CompilerServices.Unsafe.dll differ diff --git a/TS SE Tool/libs/System.Runtime.CompilerServices.Unsafe.xml b/TS SE Tool/libs/System.Runtime.CompilerServices.Unsafe.xml new file mode 100644 index 00000000..9d794922 --- /dev/null +++ b/TS SE Tool/libs/System.Runtime.CompilerServices.Unsafe.xml @@ -0,0 +1,291 @@ + + + + System.Runtime.CompilerServices.Unsafe + + + + Contains generic, low-level functionality for manipulating pointers. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of offset to pointer. + + + Adds an element offset to the given void pointer. + The void pointer to add the offset to. + The offset to add. + The type of void pointer. + A new void pointer that reflects the addition of offset to the specified pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Adds a byte offset to the given reference. + The reference to add the offset to. + The offset to add. + The type of reference. + A new reference that reflects the addition of byte offset to pointer. + + + Determines whether the specified references point to the same location. + The first reference to compare. + The second reference to compare. + The type of reference. + + if and point to the same location; otherwise, . + + + Casts the given object to the specified type. + The object to cast. + The type which the object will be cast to. + The original object, casted to the given type. + + + Reinterprets the given reference as a reference to a value of type . + The reference to reinterpret. + The type of reference to reinterpret. + The desired type of the reference. + A reference to a value of type . + + + Returns a pointer to the given by-ref parameter. + The object whose pointer is obtained. + The type of object. + A pointer to the given value. + + + Reinterprets the given read-only reference as a reference. + The read-only reference to reinterpret. + The type of reference. + A reference to a value of type . + + + Reinterprets the given location as a reference to a value of type . + The location of the value to reference. + The type of the interpreted location. + A reference to a value of type . + + + Determines the byte offset from origin to target from the given references. + The reference to origin. + The reference to target. + The type of reference. + Byte offset from origin to target i.e. - . + + + Copies a value of type to the given location. + The location to copy to. + A pointer to the value to copy. + The type of value to copy. + + + Copies a value of type to the given location. + The location to copy to. + A reference to the value to copy. + The type of value to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses. + The destination address to copy to. + The source address to copy from. + The number of bytes to copy. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address. + The address of the start of the memory block to initialize. + The value to initialize the block to. + The number of bytes to initialize. + + + Returns a value that indicates whether a specified reference is greater than another specified reference. + The first value to compare. + The second value to compare. + The type of the reference. + + if is greater than ; otherwise, . + + + Returns a value that indicates whether a specified reference is less than another specified reference. + The first value to compare. + The second value to compare. + The type of the reference. + + if is less than ; otherwise, . + + + Determines if a given reference to a value of type is a null reference. + The reference to check. + The type of the reference. + + if is a null reference; otherwise, . + + + Returns a reference to a value of type that is a null reference. + The type of the reference. + A reference to a value of type that is a null reference. + + + Reads a value of type from the given location. + The location to read from. + The type to read. + An object of type read from the given location. + + + Reads a value of type from the given location without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type read from the given location. + + + Reads a value of type from the given location without assuming architecture dependent alignment of the addresses. + The location to read from. + The type to read. + An object of type read from the given location. + + + Returns the size of an object of the given type parameter. + The type of object whose size is retrieved. + The size of an object of type . + + + Bypasses definite assignment rules for a given value. + The uninitialized object. + The type of the uninitialized object. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subtraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subtraction of offset from pointer. + + + Subtracts an element offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of offset from pointer. + + + Subtracts an element offset from the given void pointer. + The void pointer to subtract the offset from. + The offset to subtract. + The type of the void pointer. + A new void pointer that reflects the subtraction of offset from the specified pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subtraction of byte offset from pointer. + + + Subtracts a byte offset from the given reference. + The reference to subtract the offset from. + The offset to subtract. + The type of reference. + A new reference that reflects the subraction of byte offset from pointer. + + + Returns a to a boxed value. + The value to unbox. + The type to be unboxed. + + is , and is a non-nullable value type. + + is not a boxed value type. + +-or- + + is not a boxed . + + cannot be found. + A to the boxed value . + + + Writes a value of type to the given location. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type to the given location without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + Writes a value of type to the given location without assuming architecture dependent alignment of the addresses. + The location to write to. + The value to write. + The type of value to write. + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Security.Cryptography.Pkcs.dll b/TS SE Tool/libs/System.Security.Cryptography.Pkcs.dll new file mode 100644 index 00000000..4cc5a9a9 Binary files /dev/null and b/TS SE Tool/libs/System.Security.Cryptography.Pkcs.dll differ diff --git a/TS SE Tool/libs/System.Security.Cryptography.Pkcs.xml b/TS SE Tool/libs/System.Security.Cryptography.Pkcs.xml new file mode 100644 index 00000000..de231669 --- /dev/null +++ b/TS SE Tool/libs/System.Security.Cryptography.Pkcs.xml @@ -0,0 +1,2009 @@ + + + + System.Security.Cryptography.Pkcs + + + + Contains a type and a collection of values associated with that type. + + + Initializes a new instance of the class using an attribute represented by the specified object. + The attribute to store in this object. + + + Initializes a new instance of the class using an attribute represented by the specified object and the set of values associated with that attribute represented by the specified collection. + The attribute to store in this object. + The set of values associated with the attribute represented by the parameter. + The collection contains duplicate items. + + + Gets the object that specifies the object identifier for the attribute. + The object identifier for the attribute. + + + Gets the collection that contains the set of values that are associated with the attribute. + The set of values that is associated with the attribute. + + + Contains a set of objects. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, adding a specified to the collection. + A object that is added to the collection. + + + Adds the specified object to the collection. + The object to add to the collection. + + is . + A cryptographic operation could not be completed. + + if the method returns the zero-based index of the added item; otherwise, . + + + Adds the specified object to the collection. + The object to add to the collection. + + is . + A cryptographic operation could not be completed. + The specified item already exists in the collection. + + if the method returns the zero-based index of the added item; otherwise, . + + + Copies the collection to an array of objects. + An array of objects that the collection is copied to. + The zero-based index in to which the collection is to be copied. + One of the arguments provided to a method was not valid. + + was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + Gets a object for the collection. + + if the method returns a object that can be used to enumerate the collection; otherwise, . + + + Removes the specified object from the collection. + The object to remove from the collection. + + is . + + + Copies the elements of this collection to an array, starting at a particular index. + The one-dimensional array that is the destination of the elements copied from this . The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Returns an enumerator that iterates through the collection. + An object that can be used to iterate through the collection. + + + Gets the number of items in the collection. + The number of items in the collection. + + + Gets a value that indicates whether access to the collection is synchronized, or thread safe. + + if access to the collection is thread safe; otherwise . + + + Gets the object at the specified index in the collection. + An value that represents the zero-based index of the object to retrieve. + The object at the specified index. + + + Gets an object used to synchronize access to the collection. + An object used to synchronize access to the collection. + + + Provides enumeration functionality for the collection. This class cannot be inherited. + + + Advances the enumeration to the next object in the collection. + + if the enumeration successfully moved to the next object; if the enumerator is at the end of the enumeration. + + + Resets the enumeration to the first object in the collection. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + Gets the current object from the collection. + A object that represents the current cryptographic attribute in the collection. + + + The class defines the algorithm used for a cryptographic operation. + + + The constructor creates an instance of the class by using a set of default parameters. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier. + An object identifier for the algorithm. + A cryptographic operation could not be completed. + + + The constructor creates an instance of the class with the specified algorithm identifier and key length. + An object identifier for the algorithm. + The length, in bits, of the key. + A cryptographic operation could not be completed. + + + The property sets or retrieves the key length, in bits. This property is not used for algorithms that use a fixed key length. + An int value that represents the key length, in bits. + + + The property sets or retrieves the object that specifies the object identifier for the algorithm. + An object that represents the algorithm. + + + The property sets or retrieves any parameters required by the algorithm. + An array of byte values that specifies any parameters required by the algorithm. + + + The class defines the recipient of a CMS/PKCS #7 message. + + + Initializes a new instance of the class with a specified certificate and recipient identifier type, using the default encryption mode for the public key algorithm. + The scheme to use for identifying which recipient certificate was used. + The certificate to use when encrypting for this recipient. + The parameter is . + The value is not supported. + + + Initializes a new instance of the class with a specified RSA certificate, RSA encryption padding, and subject identifier. + The scheme to use for identifying which recipient certificate was used. + The certificate to use when encrypting for this recipient. + The RSA padding mode to use when encrypting for this recipient. + The or parameter is . + The parameter public key is not recognized as an RSA public key. + + + Initializes a new instance of the class with a specified certificate, using the default encryption mode for the public key algorithm and an subject identifier. + The certificate to use when encrypting for this recipient. + The parameter is . + + + Initializes a new instance of the class with a specified RSA certificate and RSA encryption padding, using an subject identifier. + The certificate to use when encrypting for this recipient. + The RSA padding mode to use when encrypting for this recipient. + The or parameter is . + The parameter public key is not recognized as an RSA public key. + +-or- + +The value is not supported. + + + Gets the certificate to use when encrypting for this recipient. + The certificate to use when encrypting for this recipient. + + + Gets the scheme to use for identifying which recipient certificate was used. + The scheme to use for identifying which recipient certificate was used. + + + Gets the RSA encryption padding to use when encrypting for this recipient. + The RSA encryption padding to use when encrypting for this recipient. + + + The class represents a set of objects. implements the interface. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class and adds the specified recipient. + An instance of the class that represents the specified CMS/PKCS #7 recipient. + + + The constructor creates an instance of the class and adds recipients based on the specified subject identifier and set of certificates that identify the recipients. + A member of the enumeration that specifies the type of subject identifier. + An collection that contains the certificates that identify the recipients. + + + The method adds a recipient to the collection. + A object that represents the recipient to add to the collection. + + is . + If the method succeeds, the method returns an value that represents the zero-based position where the recipient is to be inserted. + + If the method fails, it throws an exception. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in where the collection is copied. + + is not large enough to hold the specified elements. + +-or- + + does not contain the proper number of dimensions. + + is . + + is outside the range of elements in . + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index for the array of objects in to which the collection is copied. + + is not large enough to hold the specified elements. + +-or- + + does not contain the proper number of dimensions. + + is . + + is outside the range of elements in . + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The method removes a recipient from the collection. + A object that represents the recipient to remove from the collection. + + is . + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the number of items in the collection. + An value that represents the number of items in the collection. + + + The property retrieves whether access to the collection is synchronized, or thread safe. This property always returns , which means that the collection is not thread safe. + A value of , which means that the collection is not thread safe. + + + The property retrieves the object at the specified index in the collection. + An value that represents the index in the collection. The index is zero based. + The value of an argument was outside the allowable range of values as defined by the called method. + A object at the specified index. + + + The property retrieves an object used to synchronize access to the collection. + An object that is used to synchronize access to the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The method advances the enumeration to the next object in the collection. + + if the enumeration successfully moved to the next object; if the enumeration moved past the last item in the enumeration. + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient in the collection. + + + Represents a potential signer for a CMS/PKCS#7 signed message. + + + Initializes a new instance of the class with default values. + + + Initializes a new instance of the class from a persisted key. + The CSP parameters to describe which signing key to use. + .NET Core and .NET 5+ only: In all cases. + + + Initializes a new instance of the class with a specified subject identifier type. + The scheme to use for identifying which signing certificate was used. + + + Initializes a new instance of the class with a specified signer certificate and subject identifier type. + The scheme to use for identifying which signing certificate was used. + The certificate whose private key will be used to sign a message. + + + Initializes a new instance of the class with a specified signer certificate, subject identifier type, and private key object. + One of the enumeration values that specifies the scheme to use for identifying which signing certificate was used. + The certificate whose private key will be used to sign a message. + The private key object to use when signing the message. + + + Initializes a new instance of the CmsSigner class with a specified signer certificate, subject identifier type, private key object, and RSA signature padding. + One of the enumeration values that specifies the scheme to use for identifying which signing certificate was used. + The certificate whose private key will be used to sign a message. + The private key object to use when signing the message. + The RSA signature padding to use. + + + Initializes a new instance of the class with a specified signer certificate. + The certificate whose private key will be used to sign a message. + + + The property sets or retrieves the object that represents the signing certificate. + An object that represents the signing certificate. + + + Gets a collection of certificates which are considered with and . + A collection of certificates which are considered with and . + + + Gets or sets the algorithm identifier for the hash algorithm to use with the signature. + The algorithm identifier for the hash algorithm to use with the signature. + + + Gets or sets the option indicating how much of a the signer certificate's certificate chain should be embedded in the signed message. + One of the arguments provided to a method was not valid. + One of the enumeration values that indicates how much of a the signer certificate's certificate chain should be embedded in the signed message. + + + Gets or sets the private key object to use during signing. + The private key to use during signing, or to use the private key associated with the property. + + + Gets or sets the RSA signature padding to use. + The RSA signature padding to use. + + + Gets a collections of attributes to associate with this signature that are also protected by the signature. + A collections of attributes to associate with this signature that are also protected by the signature. + + + Gets the scheme to use for identifying which signing certificate was used. + One of the arguments provided to a method was not valid. + The scheme to use for identifying which recipient certificate was used. + + + Gets a collections of attributes to associate with this signature that are not protected by the signature. + A collections of attributes to associate with this signature that are not protected by the signature. + + + The class represents the CMS/PKCS #7 ContentInfo data structure as defined in the CMS/PKCS #7 standards document. This data structure is the basis for all CMS/PKCS #7 messages. + + + The constructor creates an instance of the class by using an array of byte values as the data and a default (OID) that represents the content type. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content type and an array of byte values as the data. + An object that contains an object identifier (OID) that specifies the content type of the content. This can be data, digestedData, encryptedData, envelopedData, hashedData, signedAndEnvelopedData, or signedData. For more information, see Remarks. + An array of byte values that represents the data from which to create the object. + A null reference was passed to a method that does not accept it as a valid argument. + + + Retrieves the outer content type of an encoded CMS ContentInfo message. + An array of byte values that represents the encoded CMS ContentInfo message from which to retrieve the outer content type. + + is . + + cannot be decoded as a valid CMS ContentInfo value. + The outer content type of the specified encoded CMS ContentInfo message. + + + Retrieves the outer content type of an encoded CMS ContentInfo message. + A read-only span of byte values that represents the encoded CMS ContentInfo message from which to retrieve the outer content type. + + cannot be decoded as a valid CMS ContentInfo value. + The outer content type of the specified encoded CMS ContentInfo message. + + + The property retrieves the content of the CMS/PKCS #7 message. + An array of byte values that represents the content data. + + + The property retrieves the object that contains the (OID) of the content type of the inner content of the CMS/PKCS #7 message. + An object that contains the OID value that represents the content type. + + + Represents a CMS/PKCS#7 structure for enveloped data. + + + Initializes a new instance of the class with default values. + + + Initializes a new instance of the class with specified content information. + The message content to encrypt. + The parameter is . + + + Initializes a new instance of the class with a specified symmetric encryption algorithm and content information. + The message content to encrypt. + The identifier for the symmetric encryption algorithm to use when encrypting the message content. + The or parameter is . + + + Decodes an array of bytes as a CMS/PKCS#7 EnvelopedData message. + The byte array containing the sequence of bytes to decode. + The parameter is . + The parameter was not successfully decoded. + + + Decodes the provided data as a CMS/PKCS#7 EnvelopedData message. + The data to decode. + The parameter was not successfully decoded. + + + Decrypts the contents of the decoded enveloped CMS/PKCS#7 message via any available recipient by searching certificate stores for a matching certificate and key. + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + Decrypts the contents of the decoded enveloped CMS/PKCS#7 message via a specified recipient info by searching certificate stores for a matching certificate and key. + The recipient info to use for decryption. + The parameter is . + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + Decrypts the contents of the decoded enveloped CMS/PKCS#7 message via a specified recipient info with a specified private key. + The recipient info to use for decryption. + The private key to use to decrypt the recipient-specific information. + The or parameter is . + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + Decrypts the contents of the decoded enveloped CMS/PKCS#7 message via a specified recipient info by searching certificate stores and a provided collection for a matching certificate and key. + The recipient info to use for decryption. + A collection of certificates to use in addition to the certificate stores for finding a recipient certificate and private key. + The or parameter is . + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + Decrypts the contents of the decoded enveloped CMS/PKCS#7 message via any available recipient info by searching certificate stores and a provided collection for a matching certificate and key. + A collection of certificates to use in addition to the certificate stores for finding a recipient certificate and private key. + The parameter was . + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + Encodes the contents of the enveloped CMS/PKCS#7 message and returns it as a byte array. + A method call was invalid for the object's current state. + A byte array representing the encoded form of the CMS/PKCS#7 message. + + + Encrypts the contents of the CMS/PKCS#7 message for a single specified recipient. + The recipient information describing the single recipient of this message. + The parameter is . + A cryptographic operation could not be completed. + + + Encrypts the contents of the CMS/PKCS#7 message for one or more recipients. + A collection describing the recipients for the message. + The parameter is . + A cryptographic operation could not be completed. + + + Gets the collection of certificates associated with the enveloped CMS/PKCS#7 message. + The collection of certificates associated with the enveloped CMS/PKCS#7 message. + + + Gets the identifier of the symmetric encryption algorithm associated with this message. + The identifier of the symmetric encryption algorithm associated with this message. + + + Gets the content information for the enveloped CMS/PKCS#7 message. + The content information for the enveloped CMS/PKCS#7 message. + + + Gets a collection that represents the recipients list for a decoded message. The default value is an empty collection. + A collection that represents the recipients list for a decoded message. The default value is an empty collection. + + + Gets the collection of unprotected (unencrypted) attributes associated with the enveloped CMS/PKCS#7 message. + The collection of unprotected (unencrypted) attributes associated with the enveloped CMS/PKCS#7 message. + + + Gets the version of the decoded enveloped CMS/PKCS#7 message. + The version of the decoded enveloped CMS/PKCS#7 message. + + + The class defines key agreement recipient information. Key agreement algorithms typically use the Diffie-Hellman key agreement algorithm, in which the two parties that establish a shared cryptographic key both take part in its generation and, by definition, agree on that key. This is in contrast to key transport algorithms, in which one party generates the key unilaterally and sends, or transports it, to the other party. + + + The property retrieves the date and time of the start of the key agreement protocol by the originator. + The recipient identifier type is not a subject key identifier. + The date and time of the start of the key agreement protocol by the originator. + + + The property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The property retrieves the algorithm used to perform the key agreement. + The value of the algorithm used to perform the key agreement. + + + The property retrieves information about the originator of the key agreement for key agreement algorithms that warrant it. + An object that contains information about the originator of the key agreement. + + + The property retrieves attributes of the keying material. + The recipient identifier type is not a subject key identifier. + The attributes of the keying material. + + + The property retrieves the identifier of the recipient. + The identifier of the recipient. + + + The property retrieves the version of the key agreement recipient. This is automatically set for objects in this class, and the value implies that the recipient is taking part in a key agreement algorithm. + The version of the object. + + + The class defines key transport recipient information. Key transport algorithms typically use the RSA algorithm, in which an originator establishes a shared cryptographic key with a recipient by generating that key and then transporting it to the recipient. This is in contrast to key agreement algorithms, in which the two parties that will be using a cryptographic key both take part in its generation, thereby mutually agreeing to that key. + + + The property retrieves the encrypted key for this key transport recipient. + An array of byte values that represents the encrypted key. + + + The property retrieves the key encryption algorithm used to encrypt the content encryption key. + An object that stores the key encryption algorithm identifier. + + + The property retrieves the subject identifier associated with the encrypted content. + A object that stores the identifier of the recipient taking part in the key transport. + + + The property retrieves the version of the key transport recipient. The version of the key transport recipient is automatically set for objects in this class, and the value implies that the recipient is taking part in a key transport algorithm. + An int value that represents the version of the key transport object. + + + Enables the creation of PKCS#12 PFX data values. This class cannot be inherited. + + + Initializes a new value of the class. + + + Add contents to the PFX in an bundle encrypted with a byte-based password from a byte array. + The contents to add to the PFX. + The byte array to use as a password when encrypting the contents. + The password-based encryption (PBE) parameters to use when encrypting the contents. + The or parameter is . + The parameter value is already encrypted. + The PFX is already sealed ( is ). + + indicates that should be used, which requires -based passwords. + + + Add contents to the PFX in an bundle encrypted with a byte-based password from a span. + The contents to add to the PFX. + The byte span to use as a password when encrypting the contents. + The password-based encryption (PBE) parameters to use when encrypting the contents. + The or parameter is . + The parameter value is already encrypted. + The PFX is already sealed ( is ). + + indicates that should be used, which requires -based passwords. + + + Add contents to the PFX in an bundle encrypted with a char-based password from a span. + The contents to add to the PFX. + The span to use as a password when encrypting the contents. + The password-based encryption (PBE) parameters to use when encrypting the contents. + The or parameter is . + The parameter value is already encrypted. + The PFX is already sealed ( is ). + + + Add contents to the PFX in an bundle encrypted with a char-based password from a string. + The contents to add to the PFX. + The string to use as a password when encrypting the contents. + The password-based encryption (PBE) parameters to use when encrypting the contents. + The or parameter is . + The parameter value is already encrypted. + The PFX is already sealed ( is ). + + + Add contents to the PFX without encrypting them. + The contents to add to the PFX. + The parameter is . + The PFX is already sealed ( is ). + + + Encodes the contents of a sealed PFX and returns it as a byte array. + The PFX is not sealed ( is ). + A byte array representing the encoded form of the PFX. + + + Seals the PFX against further changes by applying a password-based Message Authentication Code (MAC) over the contents with a password from a span. + The password to use as a key for computing the MAC. + The hash algorithm to use when computing the MAC. + The iteration count for the Key Derivation Function (KDF) used in computing the MAC. + The parameter is less than or equal to 0. + The PFX is already sealed ( is ). + + + Seals the PFX against further changes by applying a password-based Message Authentication Code (MAC) over the contents with a password from a string. + The password to use as a key for computing the MAC. + The hash algorithm to use when computing the MAC. + The iteration count for the Key Derivation Function (KDF) used in computing the MAC. + The parameter is less than or equal to 0. + The PFX is already sealed ( is ). + + + Seals the PFX from further changes without applying tamper-protection. + The PFX is already sealed ( is ). + + + Attempts to encode the contents of a sealed PFX into a provided buffer. + The byte span to receive the PKCS#12 PFX data. + When this method returns, contains a value that indicates the number of bytes written to . This parameter is treated as uninitialized. + The PFX is not sealed ( is ). + + if is big enough to receive the output; otherwise, . + + + Gets a value that indicates whether the PFX data has been sealed. + A value that indicates whether the PFX data has been sealed. + + + Represents the PKCS#12 CertBag. This class cannot be inherited. + + + Initializes a new instance of the class using the specified certificate type and encoding. + The Object Identifier (OID) for the certificate type. + The encoded certificate value. + The parameter is . + The parameter does not represent a single ASN.1 BER-encoded value. + + + Gets the contents of the CertBag interpreted as an X.509 public key certificate. + The content type is not the X.509 public key certificate content type. + The contents were not valid for the X.509 certificate content type. + A certificate decoded from the contents of the CertBag. + + + Gets the Object Identifier (OID) which identifies the content type of the encoded certificte value. + The Object Identifier (OID) which identifies the content type of the encoded certificate value. + + + Gets the uninterpreted certificate contents of the CertSafeBag. + The uninterpreted certificate contents of the CertSafeBag. + + + Gets a value indicating whether the content type of the encoded certificate value is the X.509 public key certificate content type. + + if the content type is the X.509 public key certificate content type (1.2.840.113549.1.9.22.1); otherwise, . + + + Represents the kind of encryption associated with a PKCS#12 SafeContents value. + + + The SafeContents value is not encrypted. + + + The SafeContents value is encrypted with a password. + + + The SafeContents value is encrypted using public key cryptography. + + + The kind of encryption applied to the SafeContents is unknown or could not be determined. + + + Represents the data from PKCS#12 PFX contents. This class cannot be inherited. + + + Reads the provided data as a PKCS#12 PFX and returns an object view of the contents. + The data to interpret as a PKCS#12 PFX. + When this method returns, contains a value that indicates the number of bytes from which were read by this method. This parameter is treated as uninitialized. + + to store without making a defensive copy; otherwise, . The default is . + The contents of the parameter were not successfully decoded as a PKCS#12 PFX. + An object view of the PKCS#12 PFX decoded from the input. + + + Attempts to verify the integrity of the contents with a password represented by a System.ReadOnlySpan{System.Char}. + The password to use to attempt to verify integrity. + The value is not . + The hash algorithm option specified by the PKCS#12 PFX contents could not be identified or is not supported by this platform. + + if the password successfully verifies the integrity of the contents; if the password is not correct or the contents have been altered. + + + Attempts to verify the integrity of the contents with a password represented by a . + The password to use to attempt to verify integrity. + The value is not . + The hash algorithm option specified by the PKCS#12 PFX contents could not be identified or is not supported by this platform. + + if the password successfully verifies the integrity of the contents; if the password is not correct or the contents have been altered. + + + Gets a read-only collection of the SafeContents values present in the PFX AuthenticatedSafe. + A read-only collection of the SafeContents values present in the PFX AuthenticatedSafe. + + + Gets a value that indicates the type of tamper protection provided for the contents. + One of the enumeration members that indicates the type of tamper protection provided for the contents. + + + Represents the type of anti-tampering applied to a PKCS#12 PFX value. + + + The PKCS#12 PFX value is not protected from tampering. + + + The PKCS#12 PFX value is protected from tampering with a Message Authentication Code (MAC) keyed with a password. + + + The PKCS#12 PFX value is protected from tampering with a digital signature using public key cryptography. + + + The type of anti-tampering applied to the PKCS#12 PFX is unknown or could not be determined. + + + Represents the KeyBag from PKCS#12, a container whose contents are a PKCS#8 PrivateKeyInfo. This class cannot be inherited. + + + Initializes a new instance of the from an existing encoded PKCS#8 PrivateKeyInfo value. + A BER-encoded PKCS#8 PrivateKeyInfo value. + + to store without making a defensive copy; otherwise, . The default is . + The parameter does not represent a single ASN.1 BER-encoded value. + + + Gets a memory value containing the PKCS#8 PrivateKeyInfo value transported by this bag. + A memory value containing the PKCS#8 PrivateKeyInfo value transported by this bag. + + + Defines the core behavior of a SafeBag value from the PKCS#12 specification and provides a base for derived classes. + + + Called from constructors in derived classes to initialize the class. + The Object Identifier (OID), in dotted decimal form, indicating the data type of this SafeBag. + The ASN.1 BER encoded value of the SafeBag contents. + + to store without making a defensive copy; otherwise, . The default is . + The parameter is or the empty string. + The parameter does not represent a single ASN.1 BER-encoded value. + + + Encodes the SafeBag value and returns it as a byte array. + The object identifier value passed to the constructor was invalid. + A byte array representing the encoded form of the SafeBag. + + + Gets the Object Identifier (OID) identifying the content type of this SafeBag. + The Object Identifier (OID) identifying the content type of this SafeBag. + + + Attempts to encode the SafeBag value into a provided buffer. + The byte span to receive the encoded SafeBag value. + When this method returns, contains a value that indicates the number of bytes written to . This parameter is treated as uninitialized. + The object identifier value passed to the constructor was invalid. + + if is big enough to receive the output; otherwise, . + + + Gets the modifiable collection of attributes to encode with the SafeBag value. + The modifiable collection of attributes to encode with the SafeBag value. + + + Gets the ASN.1 BER encoding of the contents of this SafeBag. + The ASN.1 BER encoding of the contents of this SafeBag. + + + Represents a PKCS#12 SafeContents value. This class cannot be inherited. + + + Initializes a new instance of the class. + + + Adds a certificate to the SafeContents via a new and returns the newly created bag instance. + The certificate to add. + The parameter is . + This instance is read-only. + The parameter is in an invalid state. + The bag instance which was added to the SafeContents. + + + Adds an asymmetric private key to the SafeContents via a new and returns the newly created bag instance. + The asymmetric private key to add. + The parameter is . + This instance is read-only. + The key export failed. + The bag instance which was added to the SafeContents. + + + Adds a nested SafeContents to the SafeContents via a new and returns the newly created bag instance. + The nested contents to add to the SafeContents. + The parameter is . + The parameter is encrypted. + This instance is read-only. + The bag instance which was added to the SafeContents. + + + Adds a SafeBag to the SafeContents. + The SafeBag value to add. + The parameter is . + This instance is read-only. + + + Adds an ASN.1 BER-encoded value with a specified type identifier to the SafeContents via a new and returns the newly created bag instance. + The Object Identifier (OID) which identifies the data type of the secret value. + The BER-encoded value representing the secret to add. + The parameter is . + This instance is read-only. + The parameter does not represent a single ASN.1 BER-encoded value. + The bag instance which was added to the SafeContents. + + + Adds an encrypted asymmetric private key to the SafeContents via a new from a byte-based password in an array and returns the newly created bag instance. + The asymmetric private key to add. + The bytes to use as a password when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + The parameter is . + This instance is read-only. + The key export failed. + The bag instance which was added to the SafeContents. + + + Adds an encrypted asymmetric private key to the SafeContents via a new from a byte-based password in a span and returns the newly created bag instance. + The asymmetric private key to add. + The bytes to use as a password when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + The parameter is . + This instance is read-only. + The key export failed. + The bag instance which was added to the SafeContents. + + + Adds an encrypted asymmetric private key to the SafeContents via a new from a character-based password in a span and returns the newly created bag instance. + The asymmetric private key to add. + The password to use when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + The parameter is . + This instance is read-only. + The key export failed. + The bag instance which was added to the SafeContents. + + + Adds an encrypted asymmetric private key to the SafeContents via a new from a character-based password in a string and returns the newly created bag instance. + The asymmetric private key to add. + The password to use when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + The parameter is . + This instance is read-only. + The key export failed. + The bag instance which was added to the SafeContents. + + + Decrypts the contents of this SafeContents value using a byte-based password from an array. + The bytes to use as a password for decrypting the encrypted contents. + The property is not . + The password is incorrect. + +-or- + +The contents were not successfully decrypted. + + + Decrypts the contents of this SafeContents value using a byte-based password from a span. + The bytes to use as a password for decrypting the encrypted contents. + The property is not . + The password is incorrect. + +-or- + +The contents were not successfully decrypted. + + + Decrypts the contents of this SafeContents value using a character-based password from a span. + The password to use for decrypting the encrypted contents. + The property is not . + The password is incorrect. + +-or- + +The contents were not successfully decrypted. + + + Decrypts the contents of this SafeContents value using a character-based password from a string. + The password to use for decrypting the encrypted contents. + The property is not . + The password is incorrect. + +-or- + +The contents were not successfully decrypted. + + + Gets an enumerable representation of the SafeBag values contained within the SafeContents. + The contents are encrypted. + An enumerable representation of the SafeBag values contained within the SafeContents. + + + Gets a value that indicates the type of encryption applied to the contents. + One of the enumeration values that indicates the type of encryption applied to the contents. The default value is . + + + Gets a value that indicates whether this instance in a read-only state. + + if this value is in a read-only state; otherwise, . The default value is . + + + Represents the SafeContentsBag from PKCS#12, a container whose contents are a PKCS#12 SafeContents value. This class cannot be inherited. + + + Gets the SafeContents value contained within this bag. + The SafeContents value contained within this bag. + + + Represents the SecretBag from PKCS#12, a container whose contents are arbitrary data with a type identifier. This class cannot be inherited. + + + Gets the Object Identifier (OID) which identifies the data type of the secret value. + The Object Identifier (OID) which identifies the data type of the secret value. + + + Gets a memory value containing the BER-encoded contents of the bag. + A memory value containing the BER-encoded contents of the bag. + + + Represents the ShroudedKeyBag from PKCS#12, a container whose contents are a PKCS#8 EncryptedPrivateKeyInfo. This class cannot be inherited. + + + Initializes a new instance of the from an existing encoded PKCS#8 EncryptedPrivateKeyInfo value. + A BER-encoded PKCS#8 EncryptedPrivateKeyInfo value. + + to store without making a defensive copy; otherwise, . The default is . + The parameter does not represent a single ASN.1 BER-encoded value. + + + Gets a memory value containing the PKCS#8 EncryptedPrivateKeyInfo value transported by this bag. + A memory value containing the PKCS#8 EncryptedPrivateKeyInfo value transported by this bag. + + + Enables the inspection of and creation of PKCS#8 PrivateKeyInfo and EncryptedPrivateKeyInfo values. This class cannot be inherited. + + + Initializes a new instance of the class. + The Object Identifier (OID) identifying the asymmetric algorithm this key is for. + The BER-encoded algorithm parameters associated with this key, or to omit algorithm parameters when encoding. + The algorithm-specific encoded private key. + + to store and without making a defensive copy; otherwise, . The default is . + The parameter is . + The parameter is not , empty, or a single BER-encoded value. + + + Exports a specified key as a PKCS#8 PrivateKeyInfo and returns its decoded interpretation. + The private key to represent in a PKCS#8 PrivateKeyInfo. + The parameter is . + The decoded interpretation of the exported PKCS#8 PrivateKeyInfo. + + + Reads the provided data as a PKCS#8 PrivateKeyInfo and returns an object view of the contents. + The data to interpret as a PKCS#8 PrivateKeyInfo value. + When this method returns, contains a value that indicates the number of bytes read from . This parameter is treated as uninitialized. + + to store without making a defensive copy; otherwise, . The default is . + The contents of the parameter were not successfully decoded as a PKCS#8 PrivateKeyInfo. + An object view of the contents decoded as a PKCS#8 PrivateKeyInfo. + + + Decrypts the provided data using the provided byte-based password and decodes the output into an object view of the PKCS#8 PrivateKeyInfo. + The bytes to use as a password when decrypting the key material. + The data to read as a PKCS#8 EncryptedPrivateKeyInfo structure in the ASN.1-BER encoding. + When this method returns, contains a value that indicates the number of bytes read from . This parameter is treated as uninitialized. + The password is incorrect. + +-or- + +The contents of indicate the Key Derivation Function (KDF) to apply is the legacy PKCS#12 KDF, which requires -based passwords. + +-or- + +The contents of do not represent an ASN.1-BER-encoded PKCS#8 EncryptedPrivateKeyInfo structure. + An object view of the contents decrypted decoded as a PKCS#8 PrivateKeyInfo. + + + Decrypts the provided data using the provided character-based password and decodes the output into an object view of the PKCS#8 PrivateKeyInfo. + The password to use when decrypting the key material. + The bytes of a PKCS#8 EncryptedPrivateKeyInfo structure in the ASN.1-BER encoding. + When this method returns, contains a value that indicates the number of bytes read from . This parameter is treated as uninitialized. + An object view of the contents decrypted decoded as a PKCS#8 PrivateKeyInfo. + + + Encodes the property data of this instance as a PKCS#8 PrivateKeyInfo and returns the encoding as a byte array. + A byte array representing the encoded form of the PKCS#8 PrivateKeyInfo. + + + Produces a PKCS#8 EncryptedPrivateKeyInfo from the property contents of this object after encrypting with the specified byte-based password and encryption parameters. + The bytes to use as a password when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + + indicates that should be used, which requires -based passwords. + A byte array containing the encoded form of the PKCS#8 EncryptedPrivateKeyInfo. + + + Produces a PKCS#8 EncryptedPrivateKeyInfo from the property contents of this object after encrypting with the specified character-based password and encryption parameters. + The password to use when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + A byte array containing the encoded form of the PKCS#8 EncryptedPrivateKeyInfo. + + + Attempts to encode the property data of this instance as a PKCS#8 PrivateKeyInfo, writing the results into a provided buffer. + The byte span to receive the PKCS#8 PrivateKeyInfo data. + When this method returns, contains a value that indicates the number of bytes written to . This parameter is treated as uninitialized. + + if is big enough to receive the output; otherwise, . + + + Attempts to produce a PKCS#8 EncryptedPrivateKeyInfo from the property contents of this object after encrypting with the specified byte-based password and encryption parameters, writing the results into a provided buffer. + The bytes to use as a password when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + The byte span to receive the PKCS#8 EncryptedPrivateKeyInfo data. + When this method returns, contains a value that indicates the number of bytes written to . This parameter is treated as uninitialized. + + if is big enough to receive the output; otherwise, . + + + Attempts to produce a PKCS#8 EncryptedPrivateKeyInfo from the property contents of this object after encrypting with the specified character-based password and encryption parameters, writing the result into a provided buffer. + The password to use when encrypting the key material. + The password-based encryption (PBE) parameters to use when encrypting the key material. + The byte span to receive the PKCS#8 EncryptedPrivateKeyInfo data. + When this method returns, contains a value that indicates the number of bytes written to . This parameter is treated as uninitialized. + + if is big enough to receive the output; otherwise, . + + + Gets the Object Identifier (OID) value identifying the algorithm this key is for. + The Object Identifier (OID) value identifying the algorithm this key is for. + + + Gets a memory value containing the BER-encoded algorithm parameters associated with this key. + A memory value containing the BER-encoded algorithm parameters associated with this key, or if no parameters were present. + + + Gets the modifiable collection of attributes for this private key. + The modifiable collection of attributes to encode with the private key. + + + Gets a memory value that represents the algorithm-specific encoded private key. + A memory value that represents the algorithm-specific encoded private key. + + + Represents an attribute used for CMS/PKCS #7 and PKCS #9 operations. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class using a specified object as its attribute type and value. + An object that contains the PKCS #9 attribute type and value to use. + The length of the member of the member of is zero. + The member of is . + + -or- + + The member of the member of is . + + + Initializes a new instance of the class using a specified object as the attribute type and a specified ASN.1 encoded data as the attribute value. + An object that represents the PKCS #9 attribute type. + An array of byte values that represents the PKCS #9 attribute value. + + + Initializes a new instance of the class using a specified string representation of an object identifier (OID) as the attribute type and a specified ASN.1 encoded data as the attribute value. + The string representation of an OID that represents the PKCS #9 attribute type. + An array of byte values that contains the PKCS #9 attribute value. + + + Copies a PKCS #9 attribute type and value for this from the specified object. + An object that contains the PKCS #9 attribute type and value to use. + + does not represent a compatible attribute type. + + is . + + + Gets an object that represents the type of attribute associated with this object. + An object that represents the type of attribute associated with this object. + + + The class defines the type of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + Copies information from an object. + The object from which to copy information. + + + The property gets an object that contains the content type. + An object that contains the content type. + + + The class defines the description of the content of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded description of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded description of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified description of the content of a CMS/PKCS #7 message. + An instance of the class that specifies the description for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document description. + A object that contains the document description. + + + The class defines the name of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded name of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded name of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified name for the CMS/PKCS #7 message. + A object that specifies the name for the CMS/PKCS #7 message. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the document name. + A object that contains the document name. + + + Represents the LocalKeyId attribute from PKCS#9. + + + Initializes a new instance of the class with an empty key identifier value. + + + Initializes a new instance of the class with a key identifier specified by a byte array. + A byte array containing the key identifier. + + + Initializes a new instance of the class with a key identifier specified by a byte span. + A byte array containing the key identifier. + + + Copies information from a object. + The object from which to copy information. + + + Gets a memory value containing the key identifier from this attribute. + A memory value containing the key identifier from this attribute. + + + The class defines the message digest of a CMS/PKCS #7 message. + + + The constructor creates an instance of the class. + + + Copies information from an object. + The object from which to copy information. + + + The property retrieves the message digest. + An array of byte values that contains the message digest. + + + Defines the signing date and time of a signature. A object can be used as an authenticated attribute of a object when an authenticated date and time are to accompany a digital signature. + + + The constructor creates an instance of the class. + + + The constructor creates an instance of the class by using the specified array of byte values as the encoded signing date and time of the content of a CMS/PKCS #7 message. + An array of byte values that specifies the encoded signing date and time of the CMS/PKCS #7 message. + + + The constructor creates an instance of the class by using the specified signing date and time. + A structure that represents the signing date and time of the signature. + + + Copies information from a object. + The object from which to copy information. + + + The property retrieves a structure that represents the date and time that the message was signed. + A structure that contains the date and time the document was signed. + + + The class represents information associated with a public key. + + + The property retrieves the algorithm identifier associated with the public key. + An object that represents the algorithm. + + + The property retrieves the value of the encoded public component of the public key pair. + An array of byte values that represents the encoded public component of the public key pair. + + + The class represents information about a CMS/PKCS #7 message recipient. The class is an abstract class inherited by the and classes. + + + The abstract property retrieves the encrypted recipient keying material. + An array of byte values that contain the encrypted recipient keying material. + + + The abstract property retrieves the algorithm used to perform the key establishment. + An object that contains the value of the algorithm used to establish the key between the originator and recipient of the CMS/PKCS #7 message. + + + The abstract property retrieves the identifier of the recipient. + A object that contains the identifier of the recipient. + + + The property retrieves the type of the recipient. The type of the recipient determines which of two major protocols is used to establish a key between the originator and the recipient of a CMS/PKCS #7 message. + A value of the enumeration that defines the type of the recipient. + + + The abstract property retrieves the version of the recipient information. Derived classes automatically set this property for their objects, and the value indicates whether it is using PKCS #7 or Cryptographic Message Syntax (CMS) to protect messages. The version also implies whether the object establishes a cryptographic key by a key agreement algorithm or a key transport algorithm. + An value that represents the version of the object. + + + The class represents a collection of objects. implements the interface. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index in where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the number of items in the collection. + An int value that represents the number of items in the collection. + + + The property retrieves whether access to the collection is synchronized, or thread safe. This property always returns , which means the collection is not thread safe. + A value of , which means the collection is not thread safe. + + + The property retrieves the object at the specified index in the collection. + An int value that represents the index in the collection. The index is zero based. + The value of an argument was outside the allowable range of values as defined by the called method. + A object at the specified index. + + + The property retrieves an object used to synchronize access to the collection. + An object used to synchronize access to the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The method advances the enumeration to the next object in the collection. + This method returns a bool that specifies whether the enumeration successfully advanced. If the enumeration successfully moved to the next object, the method returns . If the enumeration moved past the last item in the enumeration, it returns . + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current recipient information structure in the collection. + + + The enumeration defines the types of recipient information. + + + Key agreement recipient information. + + + Key transport recipient information. + + + The recipient information type is unknown. + + + Represents a time-stamping request from IETF RFC 3161. + + + Creates a timestamp request by hashing the provided data with a specified algorithm. + The data to timestamp, which will be hashed by this method. + The hash algorithm to use with this timestamp request. + The Object Identifier (OID) for a timestamp policy the Timestamp Authority (TSA) should use, or to express no preference. + An optional nonce (number used once) to uniquely identify this request to pair it with the response. The value is interpreted as an unsigned big-endian integer and may be normalized to the encoding format. + + to indicate the Timestamp Authority (TSA) must include the signing certificate in the issued timestamp token; otherwise, . + An optional collection of extensions to include in the request. + + . is or . + + is not a known hash algorithm. + An representing the chosen values. + + + Create a timestamp request using a pre-computed hash value and the name of the hash algorithm. + The pre-computed hash value to be timestamped. + The hash algorithm used to produce . + The Object Identifier (OID) for the timestamp policy that the Timestamp Authority (TSA) should use, or to express no preference. + An optional value used to uniquely match a request to a response, or to not include a nonce in the request. + + to indicate the Timestamp Authority (TSA) must include the signing certificate in the issued timestamp token; otherwise, . + An optional collection of extensions to include in the request. + + is not a known hash algorithm. + An representing the chosen values. + + + Create a timestamp request using a pre-computed hash value and the Object Identifier for the hash algorithm. + The pre-computed hash value to be timestamped. + The Object Identifier (OID) for the hash algorithm that produced . + The Object Identifier (OID) for a timestamp policy the Timestamp Authority (TSA) should use, or to express no preference. + An optional nonce (number used once) to uniquely identify this request to pair it with the response. The value is interpreted as an unsigned big-endian integer and may be normalized to the encoding format. + + to indicate the Timestamp Authority (TSA) must include the signing certificate in the issued timestamp token; otherwise, . + An optional collection of extensions to include in the request. + + is . + + . is not a valid OID. + An representing the chosen values. + + + Creates a timestamp request by hashing the signature of the provided signer with a specified algorithm. + The CMS signer information to build a timestamp request for. + The hash algorithm to use with this timestamp request. + The Object Identifier (OID) for the timestamp policy that the Timestamp Authority (TSA) should use, or to express no preference. + An optional nonce (number used once) to uniquely identify this request to pair it with the response. The value is interpreted as an unsigned big-endian integer and may be normalized to the encoding format. + + to indicate the Timestamp Authority (TSA) must include the signing certificate in the issued timestamp token; otherwise, . + An optional collection of extensions to include in the request. + + is . + + . is or . + + is not a known hash algorithm. + An representing the chosen values. + + + Encodes the timestamp request and returns it as a byte array. + A byte array containing the DER-encoded timestamp request. + + + Gets a collection with a copy of the extensions present on this request. + A collection with a copy of the extensions present on this request. + + + Gets the data hash for this timestamp request. + The data hash for this timestamp request as a read-only memory value. + + + Gets the nonce for this timestamp request. + The nonce for this timestamp request as a read-only memory value, if one was present; otherwise, . + + + Combines an encoded timestamp response with this request to produce a . + The DER encoded timestamp response. + When this method returns, the number of bytes that were read from . This parameter is treated as uninitialized. + The timestamp token from the response that corresponds to this request. + + + Attemps to interpret the contents of as a DER-encoded Timestamp Request. + The buffer containing a DER-encoded timestamp request. + When this method returns, the successfully decoded timestamp request if decoding succeeded, or if decoding failed. This parameter is treated as uninitialized. + When this method returns, the number of bytes that were read from . This parameter is treated as uninitialized. + + if was successfully interpreted as a Timestamp Request; otherwise, . + + + Attempts to encode the instance as an IETF RFC 3161 TimeStampReq, writing the bytes into the provided buffer. + The buffer to receive the encoded request. + When this method returns, the total number of bytes written into . This parameter is treated as uninitialized. + + if is long enough to receive the encoded request; otherwise, . + + + Indicates whether or not the request has extensions. + + if the request has any extensions; otherwise, . + + + Gets the Object Identifier (OID) for the hash algorithm associated with the request. + The Object Identifier (OID) for the hash algorithm associated with the request. + + + Gets the policy ID for the request, or when no policy ID was requested. + The policy ID for the request, or when no policy ID was requested. + + + Gets a value indicating whether or not the request indicated that the timestamp authority certificate is required to be in the response. + + if the response must include the timestamp authority certificate; otherwise, . + + + Gets the data format version number for this request. + The data format version number for this request. + + + Represents a time-stamp token from IETF RFC 3161. + + + Gets a Signed Cryptographic Message Syntax (CMS) representation of the RFC3161 time-stamp token. + The representation of the . + + + Attemps to interpret the contents of as a DER-encoded time-stamp token. + The buffer containing a DER-encoded time-stamp token. + When this method returns, the successfully decoded time-stamp token if decoding succeeded, or if decoding failed. This parameter is treated as uninitialized. + When this method returns, the number of bytes that were read from . This parameter is treated as uninitialized. + + if was successfully interpreted as a time-stamp token; otherwise, . + + + Verifies that the current token is a valid time-stamp token for the provided data. + The data to verify against this time-stamp token. + When this method returns, the certificate from the Timestamp Authority (TSA) which signed this token, or if a signer certificate cannot be determined. This parameter is treated as uninitialized. + An optional collection of certificates to consider as the Timestamp Authority (TSA) certificates, in addition to any certificates that may be included within the token. + + if the Timestamp Authority (TSA) certificate was found, the certificate public key validates the token signature, and the token matches the hash for the provided data; otherwise, . + + + Verifies that the current token is a valid time-stamp token for the provided data hash and algorithm identifier. + The cryptographic hash to verify against this time-stamp token. + The algorithm which produced . + When this method returns, the certificate from the Timestamp Authority (TSA) which signed this token, or if a signer certificate cannot be determined. This parameter is treated as uninitialized. + An optional collection of certificates to consider as the Timestamp Authority (TSA) certificates, in addition to any certificates that may be included within the token. + + if the Timestamp Authority (TSA) certificate was found, the certificate public key validates the token signature, and the token matches the hash for the provided data hash and algorithm; otherwise, . + + + Verifies that the current token is a valid time-stamp token for the provided data hash and algorithm identifier. + The cryptographic hash to verify against this time-stamp token. + The OID of the hash algorithm. + When this method returns, the certificate from the Timestamp Authority (TSA) which signed this token, or if a signer certificate cannot be determined. This parameter is treated as uninitialized. + An optional collection of certificates to consider as the Timestamp Authority (TSA) certificates, in addition to any certificates that may be included within the token. + + if the Timestamp Authority (TSA) certificate was found, the certificate public key validates the token signature, and the token matches the hash for the provided data hash and algorithm; otherwise, . + + + Verifies that the current token is a valid time-stamp token for the provided . + The CMS signer information to verify the timestamp was built for. + When this method returns, the certificate from the Timestamp Authority (TSA) that signed this token, or if a signer certificate cannot be determined. This parameter is treated as uninitialized. + An optional collection of certificates to consider as the Timestamp Authority (TSA) certificates, in addition to any certificates that may be included within the token. + + is . + + if the Timestamp Authority (TSA) certificate was found, the certificate public key validates the token signature, and the token matches the signature for ; otherwise, . + + + Gets the details of this time-stamp token as a . + The details of this time-stamp token as a . + + + Represents the timestamp token information class defined in RFC3161 as TSTInfo. + + + Initializes a new instance of the class with the specified parameters. + An OID representing the TSA's policy under which the response was produced. + A hash algorithm OID of the data to be timestamped. + A hash value of the data to be timestamped. + An integer assigned by the TSA to the . + The timestamp encoded in the token. + The accuracy with which is compared. Also see . + + to ensure that every timestamp token from the same TSA can always be ordered based on the , regardless of the accuracy; to make indicate when token has been created by the TSA. + The nonce associated with this timestamp token. Using a nonce always allows to detect replays, and hence its use is recommended. + The hint in the TSA name identification. The actual identification of the entity that signed the response will always occur through the use of the certificate identifier. + The extension values associated with the timestamp. + The ASN.1 data is corrupted. + + + Encodes this object into a TSTInfo value. + The encoded TSTInfo value. + + + Gets the extension values associated with the timestamp. + The extension values associated with the timestamp. + + + Gets the data representing the message hash. + The data representing the message hash. + + + Gets the nonce associated with this timestamp token. + The nonce associated with this timestamp token. + + + Gets an integer assigned by the TSA to the . + An integer assigned by the TSA to the . + + + Gets the data representing the hint in the TSA name identification. + The data representing the hint in the TSA name identification. + + + Decodes an encoded TSTInfo value. + The input or source buffer. + When this method returns , the decoded data. When this method returns , the value is , meaning the data could not be decoded. + The number of bytes used for decoding. + + if the operation succeeded; otherwise. + + + Attempts to encode this object as a TSTInfo value, writing the result into the provided buffer. + The destination buffer. + When this method returns , contains the bytes written to the buffer. + + if the operation succeeded; if the buffer size was insufficient. + + + Gets the accuracy with which is compared. + The accuracy with which is compared. + + + Gets a value indicating whether there are any extensions associated with this timestamp token. + + if there are any extensions associated with this timestamp token; otherwise. + + + Gets an OID of the hash algorithm. + An OID of the hash algorithm. + + + Gets a value indicating if every timestamp token from the same TSA can always be ordered based on the , regardless of the accuracy. If the value is , indicates when the token has been created by the TSA. + + if every timestamp token from the same TSA can always be ordered based on the ; otherwise. + + + Gets an OID representing the TSA's policy under which the response was produced. + An OID representing the TSA's policy under which the response was produced. + + + Gets the timestamp encoded in the token. + The timestamp encoded in the token. + + + Gets the version of the timestamp token. + The version of the timestamp token. + + + The class enables signing and verifying of CMS/PKCS #7 messages. + + + The constructor creates an instance of the class. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information as the inner content. + A object that specifies the content information as the inner content of the message. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified content information as the inner content and by using the detached state. + A object that specifies the content information as the inner content of the message. + A value that specifies whether the object is for a detached signature. If is , the signature is detached. If is , the signature is not detached. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified subject identifier type as the default subject identifier type for signers. + A member that specifies the default subject identifier type for signers. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified subject identifier type as the default subject identifier type for signers and content information as the inner content. + A member that specifies the default subject identifier type for signers. + A object that specifies the content information as the inner content of the message. + A null reference was passed to a method that does not accept it as a valid argument. + + + The constructor creates an instance of the class by using the specified subject identifier type as the default subject identifier type for signers, the content information as the inner content, and by using the detached state. + A member that specifies the default subject identifier type for signers. + A object that specifies the content information as the inner content of the message. + A value that specifies whether the object is for a detached signature. If is , the signature is detached. If detached is , the signature is not detached. + A null reference was passed to a method that does not accept it as a valid argument. + + + Adds a certificate to the collection of certificates for the encoded CMS/PKCS #7 message. + The certificate to add to the collection. + The certificate already exists in the collection. + + + The method verifies the data integrity of the CMS/PKCS #7 message. is a specialized method used in specific security infrastructure applications that only wish to check the hash of the CMS message, rather than perform a full digital signature verification. does not authenticate the author nor sender of the message because this method does not involve verifying a digital signature. For general-purpose checking of the integrity and authenticity of a CMS/PKCS #7 message, use the or methods. + A method call was invalid for the object's current state. + + + The method verifies the digital signatures on the signed CMS/PKCS #7 message and, optionally, validates the signers' certificates. + A value that specifies whether only the digital signatures are verified without the signers' certificates being validated. + + If is , only the digital signatures are verified. If it is , the digital signatures are verified, the signers' certificates are validated, and the purposes of the certificates are validated. The purposes of a certificate are considered valid if the certificate has no key usage or if the key usage supports digital signatures or nonrepudiation. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + The method verifies the digital signatures on the signed CMS/PKCS #7 message by using the specified collection of certificates and, optionally, validates the signers' certificates. + An object that can be used to validate the certificate chain. If no additional certificates are to be used to validate the certificate chain, use instead of . + A value that specifies whether only the digital signatures are verified without the signers' certificates being validated. + + If is , only the digital signatures are verified. If it is , the digital signatures are verified, the signers' certificates are validated, and the purposes of the certificates are validated. The purposes of a certificate are considered valid if the certificate has no key usage or if the key usage supports digital signatures or nonrepudiation. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + Creates a signature and adds the signature to the CMS/PKCS #7 message. + .NET Framework (all versions) and .NET Core 3.0 and later: The recipient certificate is not specified. + .NET Core version 2.2 and earlier: No signer certificate was provided. + + + Creates a signature using the specified signer and adds the signature to the CMS/PKCS #7 message. + A object that represents the signer. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + Creates a signature using the specified signer and adds the signature to the CMS/PKCS #7 message. + A object that represents the signer. + .NET Core and .NET 5+ only: to request opening keys with PIN prompts disabled, where supported; otherwise, . In .NET Framework, this parameter is not used and a PIN prompt is always shown, if required. + + is . + A cryptographic operation could not be completed. + .NET Framework only: A signing certificate is not specified. + .NET Core and .NET 5+ only: A signing certificate is not specified. + + + Decodes an encoded message. + An array of byte values that represents the encoded CMS/PKCS#7 message to be decoded. + + is . + + could not be decoded successfully. + + + A read-only span of byte values that represents the encoded CMS/PKCS#7 message to be decoded. + + could not be decoded successfully. + + + The method encodes the information in the object into a CMS/PKCS #7 message. + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + An array of byte values that represents the encoded message. The encoded message can be decoded by the method. + + + Removes the specified certificate from the collection of certificates for the encoded CMS/PKCS #7 message. + The certificate to remove from the collection. + The certificate was not found. + + + Removes the signature at the specified index of the collection. + The zero-based index of the signature to remove. + A CMS/PKCS #7 message is not signed, and is invalid. + + is less than zero. + + -or- + + is greater than the signature count minus 1. + The signature could not be removed. + + -or- + + An internal cryptographic error occurred. + + + The method removes the signature for the specified object. + A object that represents the countersignature being removed. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + A cryptographic operation could not be completed. + + + The property retrieves the certificates associated with the encoded CMS/PKCS #7 message. + An collection that represents the set of certificates for the encoded CMS/PKCS #7 message. + + + The property retrieves the inner contents of the encoded CMS/PKCS #7 message. + A object that represents the contents of the encoded CMS/PKCS #7 message. + + + The property retrieves whether the object is for a detached signature. + A value that specifies whether the object is for a detached signature. If this property is , the signature is detached. If this property is , the signature is not detached. + + + The property retrieves the collection associated with the CMS/PKCS #7 message. + A object that represents the signer information for the CMS/PKCS #7 message. + + + The property retrieves the version of the CMS/PKCS #7 message. + An int value that represents the CMS/PKCS #7 message version. + + + The class represents a signer associated with a object that represents a CMS/PKCS #7 message. + + + Adds the specified attribute to the current document. + The ASN.1 encoded attribute to add to the document. + Cannot find the original signer. + + -or- + +ASN1 corrupted data. + + + The method verifies the data integrity of the CMS/PKCS #7 message signer information. is a specialized method used in specific security infrastructure applications in which the subject uses the HashOnly member of the enumeration when setting up a object. does not authenticate the signer information because this method does not involve verifying a digital signature. For general-purpose checking of the integrity and authenticity of CMS/PKCS #7 message signer information and countersignatures, use the or methods. + A cryptographic operation could not be completed. + + + The method verifies the digital signature of the message and, optionally, validates the certificate. + A bool value that specifies whether only the digital signature is verified. If is , only the signature is verified. If is , the digital signature is verified, the certificate chain is validated, and the purposes of the certificates are validated. The purposes of the certificate are considered valid if the certificate has no key usage or if the key usage supports digital signature or nonrepudiation. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + The method verifies the digital signature of the message by using the specified collection of certificates and, optionally, validates the certificate. + An object that can be used to validate the chain. If no additional certificates are to be used to validate the chain, use instead of . + A bool value that specifies whether only the digital signature is verified. If is , only the signature is verified. If is , the digital signature is verified, the certificate chain is validated, and the purposes of the certificates are validated. The purposes of the certificate are considered valid if the certificate has no key usage or if the key usage supports digital signature or nonrepudiation. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + A method call was invalid for the object's current state. + + + The method prompts the user to select a signing certificate, creates a countersignature, and adds the signature to the CMS/PKCS #7 message. Countersignatures are restricted to one level. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + The method creates a countersignature by using the specified signer and adds the signature to the CMS/PKCS #7 message. Countersignatures are restricted to one level. + A object that represents the counter signer. + A null reference was passed to a method that does not accept it as a valid argument. + A cryptographic operation could not be completed. + + + Retrieves the signature for the current object. + The signature for the current object. + + + The method removes the countersignature at the specified index of the collection. + The zero-based index of the countersignature to remove. + A cryptographic operation could not be completed. + + + The method removes the countersignature for the specified object. + A object that represents the countersignature being removed. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + A cryptographic operation could not be completed. + + + Removes the specified attribute from the current document. + The ASN.1 encoded attribute to remove from the document. + Cannot find the original signer. + + -or- + +Attribute not found. + + -or- + +ASN1 corrupted data. + + + The property retrieves the signing certificate associated with the signer information. + An object that represents the signing certificate. + + + The property retrieves the set of counter signers associated with the signer information. + A collection that represents the counter signers for the signer information. If there are no counter signers, the property is an empty collection. + + + The property retrieves the object that represents the hash algorithm used in the computation of the signatures. + An object that represents the hash algorithm used with the signature. + + + Gets the identifier for the signature algorithm used by the current object. + The identifier for the signature algorithm used by the current object. + + + The property retrieves the collection of signed attributes that is associated with the signer information. Signed attributes are signed along with the rest of the message content. + A collection that represents the signed attributes. If there are no signed attributes, the property is an empty collection. + + + The property retrieves the certificate identifier of the signer associated with the signer information. + A object that uniquely identifies the certificate associated with the signer information. + + + The property retrieves the collection of unsigned attributes that is associated with the content. Unsigned attributes can be modified without invalidating the signature. + A collection that represents the unsigned attributes. If there are no unsigned attributes, the property is an empty collection. + + + The property retrieves the signer information version. + An int value that specifies the signer information version. + + + The class represents a collection of objects. implements the interface. + + + The method copies the collection to an array. + An object to which the collection is to be copied. + The zero-based index in where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method copies the collection to a array. + An array of objects where the collection is to be copied. + The zero-based index in where the collection is copied. + One of the arguments provided to a method was not valid. + A null reference was passed to a method that does not accept it as a valid argument. + The value of an argument was outside the allowable range of values as defined by the called method. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The method returns a object for the collection. + A object that can be used to enumerate the collection. + + + The property retrieves the number of items in the collection. + An int value that represents the number of items in the collection. + + + The property retrieves whether access to the collection is synchronized, or thread safe. This property always returns , which means the collection is not thread safe. + A value of , which means the collection is not thread safe. + + + The property retrieves the object at the specified index in the collection. + An int value that represents the index in the collection. The index is zero based. + The value of an argument was outside the allowable range of values as defined by the called method. + A object at the specified index. + + + The property retrieves an object is used to synchronize access to the collection. + An object is used to synchronize access to the collection. + + + The class provides enumeration functionality for the collection. implements the interface. + + + The method advances the enumeration to the next object in the collection. + This method returns a bool value that specifies whether the enumeration successfully advanced. If the enumeration successfully moved to the next object, the method returns . If the enumeration moved past the last item in the enumeration, it returns . + + + The method resets the enumeration to the first object in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current signer information structure in the collection. + + + The property retrieves the current object from the collection. + A object that represents the current signer information structure in the collection. + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number or the subject key. + + + Verifies if the specified certificate's subject identifier matches current subject identifier instance. + The certificate to match with the current subject identifier instance. + Invalid subject identifier type. + + if the specified certificate's identifier matches the current subject identifier instance; otherwise, . + + + The property retrieves the type of subject identifier. The subject can be identified by the certificate issuer and serial number or the subject key. + A member of the enumeration that identifies the type of subject. + + + The property retrieves the value of the subject identifier. Use the property to determine the type of subject identifier, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier. This can be one of the following objects as determined by the property. + + property Object IssuerAndSerialNumber SubjectKeyIdentifier + + + The class defines the type of the identifier of a subject, such as a or a . The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + + + The property retrieves the type of subject identifier or key. The subject can be identified by the certificate issuer and serial number, the hash of the subject key, or the subject key. + A member of the enumeration that specifies the type of subject identifier. + + + The property retrieves the value of the subject identifier or key. Use the property to determine the type of subject identifier or key, and use the property to retrieve the corresponding value. + An object that represents the value of the subject identifier or key. This can be one of the following objects as determined by the property. + + property Object IssuerAndSerialNumber SubjectKeyIdentifier PublicKeyInfo + + + The enumeration defines how a subject is identified. + + + The subject is identified by the certificate issuer and serial number. + + + The subject is identified by the public key. + + + The subject is identified by the hash of the subject key. + + + The type is unknown. + + + The enumeration defines the type of subject identifier. + + + The subject is identified by the certificate issuer and serial number. + + + The subject is identified as taking part in an integrity check operation that uses only a hashing algorithm. + + + The subject is identified by the hash of the subject's public key. The hash algorithm used is determined by the signature algorithm suite in the subject's certificate. + + + The type of subject identifier is unknown. + + + Represents the <> element of an XML digital signature. + + + Gets or sets an X.509 certificate issuer's distinguished name. + An X.509 certificate issuer's distinguished name. + + + Gets or sets an X.509 certificate issuer's serial number. + An X.509 certificate issuer's serial number. + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Text.Encodings.Web.dll b/TS SE Tool/libs/System.Text.Encodings.Web.dll new file mode 100644 index 00000000..50cb84a0 Binary files /dev/null and b/TS SE Tool/libs/System.Text.Encodings.Web.dll differ diff --git a/TS SE Tool/libs/System.Text.Encodings.Web.xml b/TS SE Tool/libs/System.Text.Encodings.Web.xml new file mode 100644 index 00000000..ecf79795 --- /dev/null +++ b/TS SE Tool/libs/System.Text.Encodings.Web.xml @@ -0,0 +1,939 @@ + + + + System.Text.Encodings.Web + + + + Represents an HTML character encoding. + + + Initializes a new instance of the class. + + + Creates a new instance of the HtmlEncoder class with the specified settings. + Settings that control how the instance encodes, primarily which characters to encode. + + is . + A new instance of the class. + + + Creates a new instance of the HtmlEncoder class that specifies characters the encoder is allowed to not encode. + The set of characters that the encoder is allowed to not encode. + + is . + A new instance of the class. + + + Gets a built-in instance of the class. + A built-in instance of the class. + + + Represents a JavaScript character encoding. + + + Initializes a new instance of the class. + + + Creates a new instance of JavaScriptEncoder class with the specified settings. + Settings that control how the instance encodes, primarily which characters to encode. + + is . + A new instance of the class. + + + Creates a new instance of the JavaScriptEncoder class that specifies characters the encoder is allowed to not encode. + The set of characters that the encoder is allowed to not encode. + + is . + A new instance of the class. + + + Gets a built-in instance of the class. + A built-in instance of the class. + + + Gets a built-in JavaScript encoder instance that is less strict about what is encoded. + A JavaScript encoder instance. + + + The base class of web encoders. + + + Initializes a new instance of the class. + + + Encodes characters from an array and writes them to a object. + The stream to which to write the encoded text. + The array of characters to encode. + The array index of the first character to encode. + The number of characters in the array to encode. + + is . + The method failed. The encoder does not implement correctly. + + is . + + is out of range. + + is out of range. + + + Encodes the specified string to a object. + The stream to which to write the encoded text. + The string to encode. + + + Encodes a substring and writes it to a object. + The stream to which to write the encoded text. + The string whose substring is to be encoded. + The index where the substring starts. + The number of characters in the substring. + + is . + The method failed. The encoder does not implement correctly. + + is . + + is out of range. + + is out of range. + + + Encodes the supplied characters. + A source buffer containing the characters to encode. + The destination buffer to which the encoded form of will be written. + The number of characters consumed from the buffer. + The number of characters written to the buffer. + + to indicate there is no further source data that needs to be encoded; otherwise, . + An enumeration value that describes the result of the encoding operation. + + + Encodes the supplied string and returns the encoded text as a new string. + The string to encode. + + is . + The method failed. The encoder does not implement correctly. + The encoded string. + + + Encodes the supplied UTF-8 text. + A source buffer containing the UTF-8 text to encode. + The destination buffer to which the encoded form of will be written. + The number of bytes consumed from the buffer. + The number of bytes written to the buffer. + + to indicate there is no further source data that needs to be encoded; otherwise, . + A status code that describes the result of the encoding operation. + + + Finds the index of the first character to encode. + The text buffer to search. + The number of characters in . + The index of the first character to encode. + + + Finds the first element in a UTF-8 text input buffer that would be escaped by the current encoder instance. + The UTF-8 text input buffer to search. + The index of the first element in that would be escaped by the current encoder instance, or -1 if no data in requires escaping. + + + Encodes a Unicode scalar value and writes it to a buffer. + A Unicode scalar value. + A pointer to the buffer to which to write the encoded text. + The length of the destination in characters. + When the method returns, indicates the number of characters written to the . + + if is too small to fit the encoded text; otherwise, returns . + + + Determines if a given Unicode scalar value will be encoded. + A Unicode scalar value. + + if the value will be encoded by this encoder; otherwise, returns . + + + Gets the maximum number of characters that this encoder can generate for each input code point. + The maximum number of characters. + + + Represents a filter that allows only certain Unicode code points. + + + Instantiates an empty filter (allows no code points through by default). + + + Instantiates a filter by cloning the allowed list of another object. + The other object to be cloned. + + + Instantiates a filter where only the character ranges specified by are allowed by the filter. + The allowed character ranges. + + is . + + + Allows the character specified by through the filter. + The allowed character. + + + Allows all characters specified by through the filter. + The allowed characters. + + is . + + + Allows all code points specified by . + The allowed code points. + + is . + + + Allows all characters specified by through the filter. + The range of characters to be allowed. + + is . + + + Allows all characters specified by through the filter. + The ranges of characters to be allowed. + + is . + + + Resets this object by disallowing all characters. + + + Disallows the character through the filter. + The disallowed character. + + + Disallows all characters specified by through the filter. + The disallowed characters. + + is . + + + Disallows all characters specified by through the filter. + The range of characters to be disallowed. + + is . + + + Disallows all characters specified by through the filter. + The ranges of characters to be disallowed. + + is . + + + Gets an enumerator of all allowed code points. + The enumerator of allowed code points. + + + Represents a URL character encoding. + + + Initializes a new instance of the class. + + + Creates a new instance of UrlEncoder class with the specified settings. + Settings that control how the instance encodes, primarily which characters to encode. + + is . + A new instance of the class. + + + Creates a new instance of the UrlEncoder class that specifies characters the encoder is allowed to not encode. + The set of characters that the encoder is allowed to not encode. + + is . + A new instance of the class. + + + Gets a built-in instance of the class. + A built-in instance of the class. + + + Represents a contiguous range of Unicode code points. + + + Creates a new that includes a specified number of characters starting at a specified Unicode code point. + The first code point in the range. + The number of code points in the range. + + is less than zero or greater than 0xFFFF. + +-or- + + is less than zero. + +-or- + + plus is greater than 0xFFFF. + + + Creates a new instance from a span of characters. + The first character in the range. + The last character in the range. + + precedes . + A range that includes all characters between and . + + + Gets the first code point in the range represented by this instance. + The first code point in the range. + + + Gets the number of code points in the range represented by this instance. + The number of code points in the range. + + + Provides static properties that return predefined instances that correspond to blocks from the Unicode specification. + + + Gets a range that consists of the entire Basic Multilingual Plane (BMP), from U+0000 to U+FFFF). + A range that consists of the entire BMP. + + + Gets the Alphabetic Presentation Forms Unicode block (U+FB00-U+FB4F). + The Alphabetic Presentation Forms Unicode block (U+FB00-U+FB4F). + + + Gets the Arabic Unicode block (U+0600-U+06FF). + The Arabic Unicode block (U+0600-U+06FF). + + + Gets the Arabic Extended-A Unicode block (U+08A0-U+08FF). + The Arabic Extended-A Unicode block (U+08A0-U+08FF). + + + A corresponding to the 'Arabic Extended-B' Unicode block (U+0870..U+089F). + + + Gets the Arabic Presentation Forms-A Unicode block (U+FB50-U+FDFF). + The Arabic Presentation Forms-A Unicode block (U+FB50-U+FDFF). + + + Gets the Arabic Presentation Forms-B Unicode block (U+FE70-U+FEFF). + The Arabic Presentation Forms-B Unicode block (U+FE70-U+FEFF). + + + Gets the Arabic Supplement Unicode block (U+0750-U+077F). + The Arabic Supplement Unicode block (U+0750-U+077F). + + + Gets the Armenian Unicode block (U+0530-U+058F). + The Armenian Unicode block (U+0530-U+058F). + + + Gets the Arrows Unicode block (U+2190-U+21FF). + The Arrows Unicode block (U+2190-U+21FF). + + + Gets the Balinese Unicode block (U+1B00-U+1B7F). + The Balinese Unicode block (U+1B00-U+1B7F). + + + Gets the Bamum Unicode block (U+A6A0-U+A6FF). + The Bamum Unicode block (U+A6A0-U+A6FF). + + + Gets the Basic Latin Unicode block (U+0021-U+007F). + The Basic Latin Unicode block (U+0021-U+007F). + + + Gets the Batak Unicode block (U+1BC0-U+1BFF). + The Batak Unicode block (U+1BC0-U+1BFF). + + + Gets the Bengali Unicode block (U+0980-U+09FF). + The Bengali Unicode block (U+0980-U+09FF). + + + Gets the Block Elements Unicode block (U+2580-U+259F). + The Block Elements Unicode block (U+2580-U+259F). + + + Gets the Bopomofo Unicode block (U+3100-U+312F). + The Bopomofo Unicode block (U+3105-U+312F). + + + Gets the Bopomofo Extended Unicode block (U+31A0-U+31BF). + The Bopomofo Extended Unicode block (U+31A0-U+31BF). + + + Gets the Box Drawing Unicode block (U+2500-U+257F). + The Box Drawing Unicode block (U+2500-U+257F). + + + Gets the Braille Patterns Unicode block (U+2800-U+28FF). + The Braille Patterns Unicode block (U+2800-U+28FF). + + + Gets the Buginese Unicode block (U+1A00-U+1A1F). + The Buginese Unicode block (U+1A00-U+1A1F). + + + Gets the Buhid Unicode block (U+1740-U+175F). + The Buhid Unicode block (U+1740-U+175F). + + + Gets the Cham Unicode block (U+AA00-U+AA5F). + The Cham Unicode block (U+AA00-U+AA5F). + + + Gets the Cherokee Unicode block (U+13A0-U+13FF). + The Cherokee Unicode block (U+13A0-U+13FF). + + + Gets the Cherokee Supplement Unicode block (U+AB70-U+ABBF). + The Cherokee Supplement Unicode block (U+AB70-U+ABBF). + + + Gets the CJK Compatibility Unicode block (U+3300-U+33FF). + The CJK Compatibility Unicode block (U+3300-U+33FF). + + + Gets the CJK Compatibility Forms Unicode block (U+FE30-U+FE4F). + The CJK Compatibility Forms Unicode block (U+FE30-U+FE4F). + + + Gets the CJK Compatibility Ideographs Unicode block (U+F900-U+FAD9). + The CJK Compatibility Ideographs Unicode block (U+F900-U+FAD9). + + + Gets the CJK Radicals Supplement Unicode block (U+2E80-U+2EFF). + The CJK Radicals Supplement Unicode block (U+2E80-U+2EFF). + + + Gets the CJK Strokes Unicode block (U+31C0-U+31EF). + The CJK Strokes Unicode block (U+31C0-U+31EF). + + + Gets the CJK Symbols and Punctuation Unicode block (U+3000-U+303F). + The CJK Symbols and Punctuation Unicode block (U+3000-U+303F). + + + Gets the CJK Unified Ideographs Unicode block (U+4E00-U+9FCC). + The CJK Unified Ideographs Unicode block (U+4E00-U+9FCC). + + + Gets the CJK Unitied Ideographs Extension A Unicode block (U+3400-U+4DB5). + The CJK Unitied Ideographs Extension A Unicode block (U+3400-U+4DB5). + + + Gets the Combining Diacritical Marks Unicode block (U+0300-U+036F). + The Combining Diacritical Marks Unicode block (U+0300-U+036F). + + + Gets the Combining Diacritical Marks Extended Unicode block (U+1AB0-U+1AFF). + The Combining Diacritical Marks Extended Unicode block (U+1AB0-U+1AFF). + + + Gets the Combining Diacritical Marks for Symbols Unicode block (U+20D0-U+20FF). + The Combining Diacritical Marks for Symbols Unicode block (U+20D0-U+20FF). + + + Gets the Combining Diacritical Marks Supplement Unicode block (U+1DC0-U+1DFF). + The Combining Diacritical Marks Supplement Unicode block (U+1DC0-U+1DFF). + + + Gets the Combining Half Marks Unicode block (U+FE20-U+FE2F). + The Combining Half Marks Unicode block (U+FE20-U+FE2F). + + + Gets the Common Indic Number Forms Unicode block (U+A830-U+A83F). + The Common Indic Number Forms Unicode block (U+A830-U+A83F). + + + Gets the Control Pictures Unicode block (U+2400-U+243F). + The Control Pictures Unicode block (U+2400-U+243F). + + + Gets the Coptic Unicode block (U+2C80-U+2CFF). + The Coptic Unicode block (U+2C80-U+2CFF). + + + Gets the Currency Symbols Unicode block (U+20A0-U+20CF). + The Currency Symbols Unicode block (U+20A0-U+20CF). + + + Gets the Cyrillic Unicode block (U+0400-U+04FF). + The Cyrillic Unicode block (U+0400-U+04FF). + + + Gets the Cyrillic Extended-A Unicode block (U+2DE0-U+2DFF). + The Cyrillic Extended-A Unicode block (U+2DE0-U+2DFF). + + + Gets the Cyrillic Extended-B Unicode block (U+A640-U+A69F). + The Cyrillic Extended-B Unicode block (U+A640-U+A69F). + + + A corresponding to the 'Cyrillic Extended-C' Unicode block (U+1C80..U+1C8F). + + + Gets the Cyrillic Supplement Unicode block (U+0500-U+052F). + The Cyrillic Supplement Unicode block (U+0500-U+052F). + + + Gets the Devangari Unicode block (U+0900-U+097F). + The Devangari Unicode block (U+0900-U+097F). + + + Gets the Devanagari Extended Unicode block (U+A8E0-U+A8FF). + The Devanagari Extended Unicode block (U+A8E0-U+A8FF). + + + Gets the Dingbats Unicode block (U+2700-U+27BF). + The Dingbats Unicode block (U+2700-U+27BF). + + + Gets the Enclosed Alphanumerics Unicode block (U+2460-U+24FF). + The Enclosed Alphanumerics Unicode block (U+2460-U+24FF). + + + Gets the Enclosed CJK Letters and Months Unicode block (U+3200-U+32FF). + The Enclosed CJK Letters and Months Unicode block (U+3200-U+32FF). + + + Gets the Ethiopic Unicode block (U+1200-U+137C). + The Ethiopic Unicode block (U+1200-U+137C). + + + Gets the Ethipic Extended Unicode block (U+2D80-U+2DDF). + The Ethipic Extended Unicode block (U+2D80-U+2DDF). + + + Gets the Ethiopic Extended-A Unicode block (U+AB00-U+AB2F). + The Ethiopic Extended-A Unicode block (U+AB00-U+AB2F). + + + Gets the Ethiopic Supplement Unicode block (U+1380-U+1399). + The Ethiopic Supplement Unicode block (U+1380-U+1399). + + + Gets the General Punctuation Unicode block (U+2000-U+206F). + The General Punctuation Unicode block (U+2000-U+206F). + + + Gets the Geometric Shapes Unicode block (U+25A0-U+25FF). + The Geometric Shapes Unicode block (U+25A0-U+25FF). + + + Gets the Georgian Unicode block (U+10A0-U+10FF). + The Georgian Unicode block (U+10A0-U+10FF). + + + A corresponding to the 'Georgian Extended' Unicode block (U+1C90..U+1CBF). + + + Gets the Georgian Supplement Unicode block (U+2D00-U+2D2F). + The Georgian Supplement Unicode block (U+2D00-U+2D2F). + + + Gets the Glagolitic Unicode block (U+2C00-U+2C5F). + The Glagolitic Unicode block (U+2C00-U+2C5F). + + + Gets the Greek and Coptic Unicode block (U+0370-U+03FF). + The Greek and Coptic Unicode block (U+0370-U+03FF). + + + Gets the Greek Extended Unicode block (U+1F00-U+1FFF). + The Greek Extended Unicode block (U+1F00-U+1FFF). + + + Gets the Gujarti Unicode block (U+0A81-U+0AFF). + The Gujarti Unicode block (U+0A81-U+0AFF). + + + Gets the Gurmukhi Unicode block (U+0A01-U+0A7F). + The Gurmukhi Unicode block (U+0A01-U+0A7F). + + + Gets the Halfwidth and Fullwidth Forms Unicode block (U+FF00-U+FFEE). + The Halfwidth and Fullwidth Forms Unicode block (U+FF00-U+FFEE). + + + Gets the Hangul Compatibility Jamo Unicode block (U+3131-U+318F). + The Hangul Compatibility Jamo Unicode block (U+3131-U+318F). + + + Gets the Hangul Jamo Unicode block (U+1100-U+11FF). + The Hangul Jamo Unicode block (U+1100-U+11FF). + + + Gets the Hangul Jamo Extended-A Unicode block (U+A960-U+A9F). + The Hangul Jamo Extended-A Unicode block (U+A960-U+A97F). + + + Gets the Hangul Jamo Extended-B Unicode block (U+D7B0-U+D7FF). + The Hangul Jamo Extended-B Unicode block (U+D7B0-U+D7FF). + + + Gets the Hangul Syllables Unicode block (U+AC00-U+D7AF). + The Hangul Syllables Unicode block (U+AC00-U+D7AF). + + + Gets the Hanunoo Unicode block (U+1720-U+173F). + The Hanunoo Unicode block (U+1720-U+173F). + + + Gets the Hebrew Unicode block (U+0590-U+05FF). + The Hebrew Unicode block (U+0590-U+05FF). + + + Gets the Hiragana Unicode block (U+3040-U+309F). + The Hiragana Unicode block (U+3040-U+309F). + + + Gets the Ideographic Description Characters Unicode block (U+2FF0-U+2FFF). + The Ideographic Description Characters Unicode block (U+2FF0-U+2FFF). + + + Gets the IPA Extensions Unicode block (U+0250-U+02AF). + The IPA Extensions Unicode block (U+0250-U+02AF). + + + Gets the Javanese Unicode block (U+A980-U+A9DF). + The Javanese Unicode block (U+A980-U+A9DF). + + + Gets the Kanbun Unicode block (U+3190-U+319F). + The Kanbun Unicode block (U+3190-U+319F). + + + Gets the Kangxi Radicals Supplement Unicode block (U+2F00-U+2FDF). + The Kangxi Radicals Supplement Unicode block (U+2F00-U+2FDF). + + + Gets the Kannada Unicode block (U+0C81-U+0CFF). + The Kannada Unicode block (U+0C81-U+0CFF). + + + Gets the Katakana Unicode block (U+30A0-U+30FF). + The Katakana Unicode block (U+30A0-U+30FF). + + + Gets the Katakana Phonetic Extensions Unicode block (U+31F0-U+31FF). + The Katakana Phonetic Extensions Unicode block (U+31F0-U+31FF). + + + Gets the Kayah Li Unicode block (U+A900-U+A92F). + The Kayah Li Unicode block (U+A900-U+A92F). + + + Gets the Khmer Unicode block (U+1780-U+17FF). + The Khmer Unicode block (U+1780-U+17FF). + + + Gets the Khmer Symbols Unicode block (U+19E0-U+19FF). + The Khmer Symbols Unicode block (U+19E0-U+19FF). + + + Gets the Lao Unicode block (U+0E80-U+0EDF). + The Lao Unicode block (U+0E80-U+0EDF). + + + Gets the Latin-1 Supplement Unicode block (U+00A1-U+00FF). + The Latin-1 Supplement Unicode block (U+00A1-U+00FF). + + + Gets the Latin Extended-A Unicode block (U+0100-U+017F). + The Latin Extended-A Unicode block (U+0100-U+017F). + + + Gets the Latin Extended Additional Unicode block (U+1E00-U+1EFF). + The Latin Extended Additional Unicode block (U+1E00-U+1EFF). + + + Gets the Latin Extended-B Unicode block (U+0180-U+024F). + The Latin Extended-B Unicode block (U+0180-U+024F). + + + Gets the Latin Extended-C Unicode block (U+2C60-U+2C7F). + The Latin Extended-C Unicode block (U+2C60-U+2C7F). + + + Gets the Latin Extended-D Unicode block (U+A720-U+A7FF). + The Latin Extended-D Unicode block (U+A720-U+A7FF). + + + Gets the Latin Extended-E Unicode block (U+AB30-U+AB6F). + The Latin Extended-E Unicode block (U+AB30-U+AB6F). + + + Gets the Lepcha Unicode block (U+1C00-U+1C4F). + The Lepcha Unicode block (U+1C00-U+1C4F). + + + Gets the Letterlike Symbols Unicode block (U+2100-U+214F). + The Letterlike Symbols Unicode block (U+2100-U+214F). + + + Gets the Limbu Unicode block (U+1900-U+194F). + The Limbu Unicode block (U+1900-U+194F). + + + Gets the Lisu Unicode block (U+A4D0-U+A4FF). + The Lisu Unicode block (U+A4D0-U+A4FF). + + + Gets the Malayalam Unicode block (U+0D00-U+0D7F). + The Malayalam Unicode block (U+0D00-U+0D7F). + + + Gets the Mandaic Unicode block (U+0840-U+085F). + The Mandaic Unicode block (U+0840-U+085F). + + + Gets the Mathematical Operators Unicode block (U+2200-U+22FF). + The Mathematical Operators Unicode block (U+2200-U+22FF). + + + Gets the Meetei Mayek Unicode block (U+ABC0-U+ABFF). + The Meetei Mayek Unicode block (U+ABC0-U+ABFF). + + + Gets the Meetei Mayek Extensions Unicode block (U+AAE0-U+AAFF). + The Meetei Mayek Extensions Unicode block (U+AAE0-U+AAFF). + + + Gets the Miscellaneous Mathematical Symbols-A Unicode block (U+27C0-U+27EF). + The Miscellaneous Mathematical Symbols-A Unicode block (U+27C0-U+27EF). + + + Gets the Miscellaneous Mathematical Symbols-B Unicode block (U+2980-U+29FF). + The Miscellaneous Mathematical Symbols-B Unicode block (U+2980-U+29FF). + + + Gets the Miscellaneous Symbols Unicode block (U+2600-U+26FF). + The Miscellaneous Symbols Unicode block (U+2600-U+26FF). + + + Gets the Miscellaneous Symbols and Arrows Unicode block (U+2B00-U+2BFF). + The Miscellaneous Symbols and Arrows Unicode block (U+2B00-U+2BFF). + + + Gets the Miscellaneous Technical Unicode block (U+2300-U+23FF). + The Miscellaneous Technical Unicode block (U+2300-U+23FF). + + + Gets the Modifier Tone Letters Unicode block (U+A700-U+A71F). + The Modifier Tone Letters Unicode block (U+A700-U+A71F). + + + Gets the Mongolian Unicode block (U+1800-U+18AF). + The Mongolian Unicode block (U+1800-U+18AF). + + + Gets the Myanmar Unicode block (U+1000-U+109F). + The Myanmar Unicode block (U+1000-U+109F). + + + Gets the Myanmar Extended-A Unicode block (U+AA60-U+AA7F). + The Myanmar Extended-A Unicode block (U+AA60-U+AA7F). + + + Gets the Myanmar Extended-B Unicode block (U+A9E0-U+A9FF). + The Myanmar Extended-B Unicode block (U+A9E0-U+A9FF). + + + Gets the New Tai Lue Unicode block (U+1980-U+19DF). + The New Tai Lue Unicode block (U+1980-U+19DF). + + + Gets the NKo Unicode block (U+07C0-U+07FF). + The NKo Unicode block (U+07C0-U+07FF). + + + Gets an empty Unicode range. + A Unicode range with no elements. + + + Gets the Number Forms Unicode block (U+2150-U+218F). + The Number Forms Unicode block (U+2150-U+218F). + + + Gets the Ogham Unicode block (U+1680-U+169F). + The Ogham Unicode block (U+1680-U+169F). + + + Gets the Ol Chiki Unicode block (U+1C50-U+1C7F). + The Ol Chiki Unicode block (U+1C50-U+1C7F). + + + Gets the Optical Character Recognition Unicode block (U+2440-U+245F). + The Optical Character Recognition Unicode block (U+2440-U+245F). + + + Gets the Oriya Unicode block (U+0B00-U+0B7F). + The Oriya Unicode block (U+0B00-U+0B7F). + + + Gets the Phags-pa Unicode block (U+A840-U+A87F). + The Phags-pa Unicode block (U+A840-U+A87F). + + + Gets the Phonetic Extensions Unicode block (U+1D00-U+1D7F). + The Phonetic Extensions Unicode block (U+1D00-U+1D7F). + + + Gets the Phonetic Extensions Supplement Unicode block (U+1D80-U+1DBF). + The Phonetic Extensions Supplement Unicode block (U+1D80-U+1DBF). + + + Gets the Rejang Unicode block (U+A930-U+A95F). + The Rejang Unicode block (U+A930-U+A95F). + + + Gets the Runic Unicode block (U+16A0-U+16FF). + The Runic Unicode block (U+16A0-U+16FF). + + + Gets the Samaritan Unicode block (U+0800-U+083F). + The Samaritan Unicode block (U+0800-U+083F). + + + Gets the Saurashtra Unicode block (U+A880-U+A8DF). + The Saurashtra Unicode block (U+A880-U+A8DF). + + + Gets the Sinhala Unicode block (U+0D80-U+0DFF). + The Sinhala Unicode block (U+0D80-U+0DFF). + + + Gets the Small Form Variants Unicode block (U+FE50-U+FE6F). + The Small Form Variants Unicode block (U+FE50-U+FE6F). + + + Gets the Spacing Modifier Letters Unicode block (U+02B0-U+02FF). + The Spacing Modifier Letters Unicode block (U+02B0-U+02FF). + + + Gets the Specials Unicode block (U+FFF0-U+FFFF). + The Specials Unicode block (U+FFF0-U+FFFF). + + + Gets the Sundanese Unicode block (U+1B80-U+1BBF). + The Sundanese Unicode block (U+1B80-U+1BBF). + + + Gets the Sundanese Supplement Unicode block (U+1CC0-U+1CCF). + The Sundanese Supplement Unicode block (U+1CC0-U+1CCF). + + + Gets the Superscripts and Subscripts Unicode block (U+2070-U+209F). + The Superscripts and Subscripts Unicode block (U+2070-U+209F). + + + Gets the Supplemental Arrows-A Unicode block (U+27F0-U+27FF). + The Supplemental Arrows-A Unicode block (U+27F0-U+27FF). + + + Gets the Supplemental Arrows-B Unicode block (U+2900-U+297F). + The Supplemental Arrows-B Unicode block (U+2900-U+297F). + + + Gets the Supplemental Mathematical Operators Unicode block (U+2A00-U+2AFF). + The Supplemental Mathematical Operators Unicode block (U+2A00-U+2AFF). + + + Gets the Supplemental Punctuation Unicode block (U+2E00-U+2E7F). + The Supplemental Punctuation Unicode block (U+2E00-U+2E7F). + + + Gets the Syloti Nagri Unicode block (U+A800-U+A82F). + The Syloti Nagri Unicode block (U+A800-U+A82F). + + + Gets the Syriac Unicode block (U+0700-U+074F). + The Syriac Unicode block (U+0700-U+074F). + + + A corresponding to the 'Syriac Supplement' Unicode block (U+0860..U+086F). + + + Gets the Tagalog Unicode block (U+1700-U+171F). + The Tagalog Unicode block (U+1700-U+171F). + + + Gets the Tagbanwa Unicode block (U+1760-U+177F). + The Tagbanwa Unicode block (U+1760-U+177F). + + + Gets the Tai Le Unicode block (U+1950-U+197F). + The Tai Le Unicode block (U+1950-U+197F). + + + Gets the Tai Tham Unicode block (U+1A20-U+1AAF). + The Tai Tham Unicode block (U+1A20-U+1AAF). + + + Gets the Tai Viet Unicode block (U+AA80-U+AADF). + The Tai Viet Unicode block (U+AA80-U+AADF). + + + Gets the Tamil Unicode block (U+0B80-U+0BFF). + The Tamil Unicode block (U+0B82-U+0BFA). + + + Gets the Telugu Unicode block (U+0C00-U+0C7F). + The Telugu Unicode block (U+0C00-U+0C7F). + + + Gets the Thaana Unicode block (U+0780-U+07BF). + The Thaana Unicode block (U+0780-U+07BF). + + + Gets the Thai Unicode block (U+0E00-U+0E7F). + The Thai Unicode block (U+0E00-U+0E7F). + + + Gets the Tibetan Unicode block (U+0F00-U+0FFF). + The Tibetan Unicode block (U+0F00-U+0FFF). + + + Gets the Tifinagh Unicode block (U+2D30-U+2D7F). + The Tifinagh Unicode block (U+2D30-U+2D7F). + + + Gets the Unified Canadian Aboriginal Syllabics Unicode block (U+1400-U+167F). + The Unified Canadian Aboriginal Syllabics Unicode block (U+1400-U+167F). + + + Gets the Unified Canadian Aboriginal Syllabics Extended Unicode block (U+18B0-U+18FF). + The Unified Canadian Aboriginal Syllabics Extended Unicode block (U+18B0-U+18FF). + + + Gets the Vai Unicode block (U+A500-U+A63F). + The Vai Unicode block (U+A500-U+A63F). + + + Gets the Variation Selectors Unicode block (U+FE00-U+FE0F). + The Variation Selectors Unicode block (U+FE00-U+FE0F). + + + Gets the Vedic Extensions Unicode block (U+1CD0-U+1CFF). + The Vedic Extensions Unicode block (U+1CD0-U+1CFF). + + + Gets the Vertical Forms Unicode block (U+FE10-U+FE1F). + The Vertical Forms Unicode block (U+FE10-U+FE1F). + + + Gets the Yijing Hexagram Symbols Unicode block (U+4DC0-U+4DFF). + The Yijing Hexagram Symbols Unicode block (U+4DC0-U+4DFF). + + + Gets the Yi Radicals Unicode block (U+A490-U+A4CF). + The Yi Radicals Unicode block (U+A490-U+A4CF). + + + Gets the Yi Syllables Unicode block (U+A000-U+A48F). + The Yi Syllables Unicode block (U+A000-U+A48F). + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Text.Json.dll b/TS SE Tool/libs/System.Text.Json.dll new file mode 100644 index 00000000..d3a05a99 Binary files /dev/null and b/TS SE Tool/libs/System.Text.Json.dll differ diff --git a/TS SE Tool/libs/System.Text.Json.xml b/TS SE Tool/libs/System.Text.Json.xml new file mode 100644 index 00000000..da1a5712 --- /dev/null +++ b/TS SE Tool/libs/System.Text.Json.xml @@ -0,0 +1,5785 @@ + + + + System.Text.Json + + + + Defines how the struct handles comments. + + + Allows comments within the JSON input and treats them as valid tokens. While reading, the caller can access the comment values. + + + Doesn't allow comments within the JSON input. Comments are treated as invalid JSON if found, and a is thrown. This is the default value. + + + Allows comments within the JSON input and ignores them. The behaves as if no comments are present. + + + Provides a mechanism for examining the structural content of a JSON value without automatically instantiating data values. + + + Releases the resources used by this instance. + + + Parses a sequence as UTF-8-encoded text representing a single JSON value into a JsonDocument. + The JSON text to parse. + Options to control the reader behavior during parsing. + + does not represent a valid single JSON value. + + contains unsupported options. + A JsonDocument representation of the JSON value. + + + Parses a as UTF-8-encoded data representing a single JSON value into a JsonDocument. The stream is read to completion. + The JSON data to parse. + Options to control the reader behavior during parsing. + + does not represent a valid single JSON value. + + contains unsupported options. + A JsonDocument representation of the JSON value. + + + Parses memory as UTF-8-encoded text representing a single JSON value into a JsonDocument. + The JSON text to parse. + Options to control the reader behavior during parsing. + + does not represent a valid single JSON value. + + contains unsupported options. + A JsonDocument representation of the JSON value. + + + Parses text representing a single JSON value into a JsonDocument. + The JSON text to parse. + Options to control the reader behavior during parsing. + + does not represent a valid single JSON value. + + contains unsupported options. + A JsonDocument representation of the JSON value. + + + Parses text representing a single JSON string value into a JsonDocument. + The JSON text to parse. + Options to control the reader behavior during parsing. + + does not represent a valid single JSON value. + + contains unsupported options. + A JsonDocument representation of the JSON value. + + + Parses a as UTF-8-encoded data representing a single JSON value into a JsonDocument. The stream is read to completion. + The JSON data to parse. + Options to control the reader behavior during parsing. + The token to monitor for cancellation requests. + + does not represent a valid single JSON value. + + contains unsupported options. + A task to produce a JsonDocument representation of the JSON value. + + + Parses one JSON value (including objects or arrays) from the provided reader. + The reader to read. + + contains unsupported options. + +-or- + +The current token does not start or represent a value. + A value could not be read from the reader. + A JsonDocument representing the value (and nested values) read from the reader. + + + Attempts to parse one JSON value (including objects or arrays) from the provided reader. + The reader to read. + When the method returns, contains the parsed document. + + contains unsupported options. + +-or- + +The current token does not start or represent a value. + A value could not be read from the reader. + + if a value was read and parsed into a JsonDocument; if the reader ran out of data while parsing. All other situations result in an exception being thrown. + + + Writes the document to the provided writer as a JSON value. + The writer to which to write the document. + The parameter is . + The of this would result in invalid JSON. + The parent has been disposed. + + + Gets the root element of this JSON document. + A representing the value of the document. + + + Provides the ability for the user to define custom behavior when parsing JSON to create a . + + + Gets or sets a value that indicates whether an extra comma at the end of a list of JSON values in an object or array is allowed (and ignored) within the JSON payload being read. + + if an extra comma at the end of a list of JSON values in an object or array is allowed; otherwise, . Default is + + + Gets or sets a value that determines how the handles comments when reading through the JSON data. + The comment handling enum is set to a value that is not supported (or not within the enum range). + One of the enumeration values that indicates how comments are handled. + + + Gets or sets the maximum depth allowed when parsing JSON data, with the default (that is, 0) indicating a maximum depth of 64. + The max depth is set to a negative value. + The maximum depth allowed when parsing JSON data. + + + Represents a specific JSON value within a . + + + Gets a JsonElement that can be safely stored beyond the lifetime of the original . + A JsonElement that can be safely stored beyond the lifetime of the original . + + + Gets an enumerator to enumerate the values in the JSON array represented by this JsonElement. + This value's is not . + The parent has been disposed. + An enumerator to enumerate the values in the JSON array represented by this JsonElement. + + + Gets an enumerator to enumerate the properties in the JSON object represented by this JsonElement. + This value's is not . + The parent has been disposed. + An enumerator to enumerate the properties in the JSON object represented by this JsonElement. + + + Gets the number of values contained within the current array value. + This value's is not . + The parent has been disposed. + The number of values contained within the current array value. + + + Gets the value of the element as a . + This value's is neither nor . + The parent has been disposed. + The value of the element as a . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Gets the value of the element as a byte array. + This value's is not . + The value is not encoded as Base64 text and hence cannot be decoded to bytes. + The parent has been disposed. + The value decoded as a byte array. + + + Gets the value of the element as a . + This value's is not . + The value cannot be read as a . + The parent has been disposed. + The value of the element as a . + + + Gets the value of the element as a . + This value's is not . + The value cannot be read as a . + The parent has been disposed. + The value of the element as a . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Gets the value of the element as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The value of the element as a . + + + Gets the current JSON number as an . + This value's is not . + The value cannot be represented as an . + The parent has been disposed. + The current JSON number as an . + + + Gets the current JSON number as an . + This value's is not . + The value cannot be represented as an . + The parent has been disposed. + The current JSON number as an . + + + Gets the current JSON number as an . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as an . + + + Gets a representing the value of a required property identified by . + The UTF-8 representation (with no Byte-Order-Mark (BOM)) of the name of the property to return. + This value's is not . + No property was found with the requested name. + The parent has been disposed. + A representing the value of the requested property. + + + Gets a representing the value of a required property identified by . + The name of the property whose value is to be returned. + This value's is not . + No property was found with the requested name. + The parent has been disposed. + A representing the value of the requested property. + + + Gets a representing the value of a required property identified by . + The name of the property whose value is to be returned. + This value's is not . + No property was found with the requested name. + + is . + The parent has been disposed. + A representing the value of the requested property. + + + Gets a string that represents the original input data backing this value. + The parent has been disposed. + The original input data backing this value. + + + Gets the current JSON number as an . + This value's is not . + The value cannot be represented as an . + The parent has been disposed. + The current JSON number as an . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Gets the value of the element as a . + This value's is neither nor . + The parent has been disposed. + The value of the element as a . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Gets the current JSON number as a . + This value's is not . + The value cannot be represented as a . + The parent has been disposed. + The current JSON number as a . + + + Parses one JSON value (including objects or arrays) from the provided reader. + The reader to read. + + is using unsupported options. + The current token does not start or represent a value. + A value could not be read from the reader. + A JsonElement representing the value (and nested values) read from the reader. + + + Gets a string representation for the current value appropriate to the value type. + The parent has been disposed. + A string representation for the current value appropriate to the value type. + + + Attempts to represent the current JSON number as a . + When this method returns, contains the byte equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to represent the current JSON string as a byte array, assuming that it is Base64 encoded. + If the method succeeds, contains the decoded binary representation of the Base64 text. + This value's is not . + The parent has been disposed. + + if the entire token value is encoded as valid Base64 text and can be successfully decoded to bytes; otherwise, . + + + Attempts to represent the current JSON string as a . + When this method returns, contains the date and time value equivalent to the current JSON string if the conversion succeeded, or if the conversion failed. + This value's is not . + The parent has been disposed. + + if the string can be represented as a ; otherwise, . + + + Attempts to represent the current JSON string as a . + When this method returns, contains the date and time value equivalent to the current JSON string if the conversion succeeded, or if the conversion failed. + This value's is not . + The parent has been disposed. + + if the string can be represented as a ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains the decimal equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains a double-precision floating point value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to represent the current JSON string as a . + When this method returns, contains the GUID equivalent to the current JSON string if the conversion succeeded, or if the conversion failed. + This value's is not . + The parent has been disposed. + + if the string can be represented as a ; otherwise, . + + + Attempts to represent the current JSON number as an . + When this method returns, contains the 16-bit integer value equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as an ; otherwise, . + + + Attempts to represent the current JSON number as an . + When this method returns, contains the 32-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as an ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains the 64-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Looks for a property named in the current object, returning a value that indicates whether or not such a property exists. When the property exists, the method assigns its value to the argument. + The UTF-8 (with no Byte-Order-Mark (BOM)) representation of the name of the property to return. + Receives the value of the located property. + This value's is not . + The parent has been disposed. + + if the property was found; otherwise, . + + + Looks for a property named in the current object, returning a value that indicates whether or not such a property exists. When the property exists, the method assigns its value to the argument. + The name of the property to find. + When this method returns, contains the value of the specified property. + This value's is not . + The parent has been disposed. + + if the property was found; otherwise, . + + + Looks for a property named in the current object, returning a value that indicates whether or not such a property exists. When the property exists, its value is assigned to the argument. + The name of the property to find. + When this method returns, contains the value of the specified property. + This value's is not . + + is . + The parent has been disposed. + + if the property was found; otherwise, . + + + Attempts to represent the current JSON number as an . + When this method returns, contains the signed byte equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as an ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains the single-precision floating point value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains the unsigned 16-bit integer value equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains unsigned 32-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to represent the current JSON number as a . + When this method returns, contains unsigned 64-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + This value's is not . + The parent has been disposed. + + if the number can be represented as a ; otherwise, . + + + Attempts to parse one JSON value (including objects or arrays) from the provided reader. + The reader to read. + Receives the parsed element. + + is using unsupported options. + The current token does not start or represent a value. + A value could not be read from the reader. + + if a value was read and parsed into a JsonElement; if the reader ran out of data while parsing. + All other situations result in an exception being thrown. + + + Compares the text represented by a UTF8-encoded byte span to the string value of this element. + The UTF-8 encoded text to compare against. + This value's is not . + + if the string value of this element has the same UTF-8 encoding as + ; otherwise, . + + + Compares a specified read-only character span to the string value of this element. + The text to compare against. + This value's is not . + + if the string value of this element matches ; otherwise, . + + + Compares a specified string to the string value of this element. + The text to compare against. + This value's is not . + + if the string value of this element matches ; otherwise, . + + + Writes the element to the specified writer as a JSON value. + The writer to which to write the element. + The parameter is . + The of this value is . + The parent has been disposed. + + + Gets the value at the specified index if the current value is an . + The item index. + This value's is not . + + is not in the range [0, ()). + The parent has been disposed. + The value at the specified index. + + + Gets the type of the current JSON value. + The parent has been disposed. + The type of the current JSON value. + + + Represents an enumerator for the contents of a JSON array. + + + Releases the resources used by this instance. + + + Returns an enumerator that iterates through a collection. + An enumerator that can be used to iterate through the array. + + + Advances the enumerator to the next element of the collection. + + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + Returns an enumerator that iterates through a collection. + An enumerator for an array of that can be used to iterate through the collection. + + + Returns an enumerator that iterates through a collection. + An enumerator that can be used to iterate through the collection. + + + Gets the element in the collection at the current position of the enumerator. + The element in the collection at the current position of the enumerator. + + + Gets the element in the collection at the current position of the enumerator. + The element in the collection at the current position of the enumerator. + + + Represents an enumerator for the properties of a JSON object. + + + Releases the resources used by this instance. + + + Returns an enumerator that iterates the properties of an object. + An enumerator that can be used to iterate through the object. + + + Advances the enumerator to the next element of the collection. + + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + Returns an enumerator that iterates through a collection. + An enumerator for objects that can be used to iterate through the collection. + + + Returns an enumerator that iterates through a collection. + An enumerator that can be used to iterate through the collection. + + + Gets the element in the collection at the current position of the enumerator. + The element in the collection at the current position of the enumerator. + + + Gets the element in the collection at the current position of the enumerator. + The element in the collection at the current position of the enumerator. + + + Provides methods to transform UTF-8 or UTF-16 encoded text into a form that is suitable for JSON. + + + Encodes a UTF-8 text value as a JSON string. + The UTF-8 encoded text to convert to JSON encoded text. + The encoder to use when escaping the string, or to use the default encoder. + + is too large. + +-or- + + contains invalid UTF-8 bytes. + The encoded JSON text. + + + Encodes a specified text value as a JSON string. + The value to convert to JSON encoded text. + The encoder to use when escaping the string, or to use the default encoder. + + is too large. + +-or- + + contains invalid UTF-16 characters. + The encoded JSON text. + + + Encodes the string text value as a JSON string. + The value to convert to JSON encoded text. + The encoder to use when escaping the string, or to use the default encoder. + + is . + + is too large. + +-or- + + contains invalid UTF-16 characters. + The encoded JSON text. + + + Determines whether this instance and a specified object, which must also be a instance, have the same value. + The object to compare to this instance. + + if the current instance and are equal; otherwise, . + + + Determines whether this instance and another specified instance have the same value. + The object to compare to this instance. + + if this instance and have the same value; otherwise, . + + + Returns the hash code for this . + The hash code for this instance. + + + Converts the value of this instance to a . + The underlying UTF-16 encoded string. + + + Gets the UTF-8 encoded representation of the pre-encoded JSON text. + The UTF-8 encoded representation of the pre-encoded JSON text. + + + Gets the UTF-16 encoded representation of the pre-encoded JSON text as a . + + + Defines a custom exception object that is thrown when invalid JSON text is encountered, the defined maximum depth is passed, or the JSON text is not compatible with the type of a property on an object. + + + Initializes a new instance of the class. + + + Creates a new exception object with serialized data. + The serialized object data about the exception being thrown. + An object that contains contextual information about the source or destination. + + is . + + + Initializes a new instance of the class with a specified error message. + The context-specific error message. + + + Initializes a new instance of the class, with a specified error message and a reference to the inner exception that is the cause of this exception. + The context-specific error message. + The exception that caused the current exception. + + + Creates a new exception object to relay error information to the user. + The context-specific error message. + The path where the invalid JSON was encountered. + The line number (starting at 0) at which the invalid JSON was encountered when deserializing. + The byte count within the current line (starting at 0) where the invalid JSON was encountered. + + + Creates a new exception object to relay error information to the user that includes a specified inner exception. + The context-specific error message. + The path where the invalid JSON was encountered. + The line number (starting at 0) at which the invalid JSON was encountered when deserializing. + The byte count (starting at 0) within the current line where the invalid JSON was encountered. + The exception that caused the current exception. + + + Sets the with information about the exception. + The serialized object data about the exception being thrown. + An object that contains contextual information about the source or destination. + + + Gets the zero-based number of bytes read within the current line before the exception. + The zero-based number of bytes read within the current line before the exception. + + + Gets the zero-based number of lines read before the exception. + The zero-based number of lines read before the exception. + + + Gets a message that describes the current exception. + The error message that describes the current exception. + + + Gets The path within the JSON where the exception was encountered. + The path within the JSON where the exception was encountered. + + + Determines the naming policy used to convert a string-based name to another format, such as a camel-casing format. + + + Initializes a new instance of . + + + When overridden in a derived class, converts the specified name according to the policy. + The name to convert. + The converted name. + + + Gets the naming policy for camel-casing. + The naming policy for camel-casing. + + + Gets the naming policy for lowercase kebab-casing. + + + Gets the naming policy for uppercase kebab-casing. + + + Gets the naming policy for lowercase snake-casing. + + + Gets the naming policy for uppercase snake-casing. + + + Represents a single property for a JSON object. + + + Compares the specified UTF-8 encoded text to the name of this property. + The UTF-8 encoded text to compare against. + This value's is not . + + if the name of this property has the same UTF-8 encoding as ; otherwise, . + + + Compares the specified text as a character span to the name of this property. + The text to compare against. + This value's is not . + + if the name of this property matches ; otherwise, . + + + Compares the specified string to the name of this property. + The text to compare against. + This value's is not . + + if the name of this property matches ; otherwise . + + + Provides a string representation of the property for debugging purposes. + A string containing the uninterpreted value of the property, beginning at the declaring open-quote and ending at the last character that is part of the value. + + + Writes the property to the provided writer as a named JSON object property. + The writer to which to write the property. + + is . + + is too large to be a JSON object property. + The of this JSON property's would result in invalid JSON. + The parent has been disposed. + + + Gets the name of this property. + The name of this property. + + + Gets the value of this property. + The value of this property. + + + Provides the ability for the user to define custom behavior when reading JSON. + + + Gets or sets a value that defines whether an extra comma at the end of a list of JSON values in an object or array is allowed (and ignored) within the JSON payload being read. + + if an extra comma is allowed; otherwise, . + + + Gets or sets a value that determines how the handles comments when reading through the JSON data. + The property is being set to a value that is not a member of the enumeration. + One of the enumeration values that indicates how comments are handled. + + + Gets or sets the maximum depth allowed when reading JSON, with the default (that is, 0) indicating a maximum depth of 64. + The maximum depth is being set to a negative value. + The maximum depth allowed when reading JSON. + + + Defines an opaque type that holds and saves all the relevant state information, which must be provided to the to continue reading after processing incomplete data. + + + Constructs a new instance. + Defines the customized behavior of the that is different from the JSON RFC (for example how to handle comments, or the maximum depth allowed when reading). By default, the follows the JSON RFC strictly (comments within the JSON are invalid) and reads up to a maximum depth of 64. + The maximum depth is set to a non-positive value (< 0). + + + Gets the custom behavior to use when reading JSON data using the struct that may deviate from strict adherence to the JSON specification, which is the default behavior. + The custom behavior to use when reading JSON data. + + + Provides functionality to serialize objects or value types to JSON and to deserialize JSON into objects or value types. + + + Reads the UTF-8 encoded text representing a single JSON value into an instance specified by the . + The Stream will be read to completion. + JSON data to parse. + Metadata about the type to convert. + + or is . + The JSON is invalid, + or there is remaining data in the Stream. + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into a . + The Stream will be read to completion. + JSON data to parse. + The type of the object to convert to and return. + Options to control the behavior during reading. + + or is . + The JSON is invalid, the is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into a . + The Stream will be read to completion. + JSON data to parse. + The type of the object to convert to and return. + A metadata provider for serializable types. + + , , or is . + The JSON is invalid, the is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + The method on the provided did not return a compatible for . + A representation of the JSON value. + + + Parses the UTF-8 encoded text representing a single JSON value into an instance specified by the . + JSON text to parse. + Metadata about the type to convert. + The JSON is invalid, + or there is remaining data in the buffer. + A representation of the JSON value. + + + Parses the UTF-8 encoded text representing a single JSON value into an instance of a specified type. + The JSON text to parse. + The type of the object to convert to and return. + Options to control the behavior during parsing. + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the span beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the UTF-8 encoded text representing a single JSON value into a . + JSON text to parse. + The type of the object to convert to and return. + A metadata provider for serializable types. + + is . + The JSON is invalid, is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + The method on the provided did not return a compatible for . + A representation of the JSON value. + + + Parses the text representing a single JSON value into an instance specified by the . + JSON text to parse. + Metadata about the type to convert. + + is . + The JSON is invalid. + +-or- + +There is remaining data in the string beyond a single JSON value. + A representation of the JSON value. + + + Parses the text representing a single JSON value into an instance of a specified type. + The JSON text to parse. + The type of the object to convert to and return. + Options to control the behavior during parsing. + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the span beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the text representing a single JSON value into a . + JSON text to parse. + The type of the object to convert to and return. + A metadata provider for serializable types. + + or is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + A representation of the JSON value. + + + Parses the text representing a single JSON value into an instance specified by the . + JSON text to parse. + Metadata about the type to convert. + + is . + +-or- + + is . + The JSON is invalid. + +-or- + +There is remaining data in the string beyond a single JSON value. + A representation of the JSON value. + + + Parses the text representing a single JSON value into an instance of a specified type. + The JSON text to parse. + The type of the object to convert to and return. + Options to control the behavior during parsing. + + or is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the text representing a single JSON value into a . + JSON text to parse. + The type of the object to convert to and return. + A metadata provider for serializable types. + + or is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + A representation of the JSON value. + + + Converts the representing a single JSON value into an instance specified by the . + The to convert. + Metadata about the type to convert. + + is . + +-or- + + is . + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + The type of the object to convert to and return. + Options to control the behavior during parsing. + + or is . + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + The type of the object to convert to and return. + A metadata provider for serializable types. + + is . + +-or- + + is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + A representation of the JSON value. + + + Converts the representing a single JSON value into an instance specified by the . + The to convert. + Metadata about the type to convert. + + is . + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + The type of the object to convert to and return. + Options to control the behavior during parsing. + + is . + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + The type of the object to convert to and return. + A metadata provider for serializable types. + + is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + A representation of the JSON value. + + + Converts the representing a single JSON value into an instance specified by the . + The to convert. + Metadata about the type to convert. + + is . + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + The type of the object to convert to and return. + Options to control the behavior during parsing. + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + The type of the object to convert to and return. + A metadata provider for serializable types. + + is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + A representation of the JSON value. + + + Reads one JSON value (including objects or arrays) from the provided reader into an instance specified by the . + The reader to read. + Metadata about the type to convert. + The JSON is invalid, + is not compatible with the JSON, + or a value could not be read from the reader. + + is using unsupported options. + A representation of the JSON value. + + + Reads one JSON value (including objects or arrays) from the provided reader and converts it into an instance of a specified type. + The reader to read the JSON from. + The type of the object to convert to and return. + Options to control the serializer behavior during reading. + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +A value could not be read from the reader. + + is using unsupported options. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads one JSON value (including objects or arrays) from the provided reader into a . + The reader to read. + The type of the object to convert to and return. + A metadata provider for serializable types. + + or is . + The JSON is invalid, is not compatible with the JSON, or a value could not be read from the reader. + + is using unsupported options. + There is no compatible for or its serializable members. + The method on the provided did not return a compatible for . + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into a . + The Stream will be read to completion. + JSON data to parse. + Options to control the behavior during reading. + The type to deserialize the JSON value into. + + is . + The JSON is invalid, is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into a . + The Stream will be read to completion. + JSON data to parse. + Metadata about the type to convert. + The type to deserialize the JSON value into. + + or is . + The JSON is invalid, is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the UTF-8 encoded text representing a single JSON value into an instance of the type specified by a generic type parameter. + The JSON text to parse. + Options to control the behavior during parsing. + The target type of the UTF-8 encoded text. + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the span beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the UTF-8 encoded text representing a single JSON value into a . + JSON text to parse. + Metadata about the type to convert. + The type to deserialize the JSON value into. + The JSON is invalid, is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the text representing a single JSON value into an instance of the type specified by a generic type parameter. + The JSON text to parse. + Options to control the behavior during parsing. + The type to deserialize the JSON value into. + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the span beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the text representing a single JSON value into a . + JSON text to parse. + Metadata about the type to convert. + The type to deserialize the JSON value into. + + is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the text representing a single JSON value into an instance of the type specified by a generic type parameter. + The JSON text to parse. + Options to control the behavior during parsing. + The target type of the JSON value. + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Parses the text representing a single JSON value into a . + JSON text to parse. + Metadata about the type to convert. + The type to deserialize the JSON value into. + + is . + +-or- + + is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the string beyond a single JSON value. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + Options to control the behavior during parsing. + The type to deserialize the JSON value into. + + is . + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + Metadata about the type to convert. + The type to deserialize the JSON value into. + + is . + +-or- + + is . + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + Options to control the behavior during parsing. + The type to deserialize the JSON value into. + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + Metadata about the type to convert. + The type to deserialize the JSON value into. + + is . + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + Options to control the behavior during parsing. + The type to deserialize the JSON value into. + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the representing a single JSON value into a . + The to convert. + Metadata about the type to convert. + The type to deserialize the JSON value into. + + is . + + is not compatible with the JSON. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads one JSON value (including objects or arrays) from the provided reader into an instance of the type specified by a generic type parameter. + The reader to read the JSON from. + Options to control serializer behavior during reading. + The target type of the JSON value. + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +A value could not be read from the reader. + + uses unsupported options. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads one JSON value (including objects or arrays) from the provided reader into a . + The reader to read. + Metadata about the type to convert. + The type to deserialize the JSON value into. + The JSON is invalid, is not compatible with the JSON, or a value could not be read from the reader. + + is using unsupported options. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into an instance specified by the . + The Stream will be read to completion. + JSON data to parse. + Metadata about the type to convert. + The that can be used to cancel the read operation. + + or is . + The JSON is invalid, + or when there is remaining data in the Stream. + A representation of the JSON value. + + + Asynchronously reads the UTF-8 encoded text representing a single JSON value into an instance of a specified type. The stream will be read to completion. + The JSON data to parse. + The type of the object to convert to and return. + Options to control the behavior during reading. + A cancellation token that may be used to cancel the read operation. + + or is . + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the stream. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into a . + The Stream will be read to completion. + JSON data to parse. + The type of the object to convert to and return. + A metadata provider for serializable types. + The that can be used to cancel the read operation. + + , , or is . + The JSON is invalid, the is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + The method on the provided did not return a compatible for . + A representation of the JSON value. + + + Asynchronously reads the UTF-8 encoded text representing a single JSON value into an instance of a type specified by a generic type parameter. The stream will be read to completion. + The JSON data to parse. + Options to control the behavior during reading. + A token that may be used to cancel the read operation. + The target type of the JSON value. + The JSON is invalid. + +-or- + + is not compatible with the JSON. + +-or- + +There is remaining data in the stream. + There is no compatible for or its serializable members. + + is . + A representation of the JSON value. + + + Reads the UTF-8 encoded text representing a single JSON value into a . + The Stream will be read to completion. + JSON data to parse. + Metadata about the type to convert. + The which may be used to cancel the read operation. + The type to deserialize the JSON value into. + + or is . + The JSON is invalid, is not compatible with the JSON, or there is remaining data in the Stream. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Wraps the UTF-8 encoded text into an that can be used to deserialize root-level JSON arrays in a streaming manner. + JSON data to parse. + Options to control the behavior during reading. + The which may be used to cancel the read operation. + The element type to deserialize asynchronously. + + is . + An representation of the provided JSON array. + + + Wraps the UTF-8 encoded text into an that can be used to deserialize root-level JSON arrays in a streaming manner. + JSON data to parse. + Metadata about the element type to convert. + The that can be used to cancel the read operation. + The element type to deserialize asynchronously. + + or is . + An representation of the provided JSON array. + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + Metadata about the type to convert. + + is . + + does not match the type of . + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + The type of the to convert. + Options to control the conversion behavior. + + is not compatible with . + + or is . + There is no compatible for or its serializable members. + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + + is not compatible with . + + , , or is . + There is no compatible for or its serializable members. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + + is . + + does not match the type of . + A representation of the value. + + + Converts the value of a specified type into a JSON string. + The value to convert. + The type of the to convert. + Options to control the conversion behavior. + + is not compatible with . + + is . + There is no compatible for or its serializable members. + The JSON string representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + + or is . + A representation of the value. + + + Writes one JSON value (including objects or arrays) to the provided writer. + The writer to write. + The value to convert and write. + Metadata about the type to convert. + + or is . + + does not match the type of . + + + Writes the JSON representation of the specified type to the provided writer. + The JSON writer to write to. + The value to convert and write. + The type of the to convert. + Options to control serialization behavior. + + is not compatible with + + or is . + There is no compatible for or its serializable members. + + + Writes one JSON value (including objects or arrays) to the provided writer. + A JSON writer to write to. + The value to convert and write. + The type of the to convert. + A metadata provider for serializable types. + + is not compatible with . + + or is . + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + + + Converts the value of a type specified by a generic type parameter into a JSON string. + The value to convert. + Options to control serialization behavior. + The type of the value to serialize. + There is no compatible for or its serializable members. + A JSON string representation of the value. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + The type of the value to serialize. + There is no compatible for or its serializable members. + + is . + A representation of the value. + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + Options to control the conversion behavior. + The type of the value to serialize. + + is . + There is no compatible for or its serializable members. + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + Metadata about the type to convert. + The type of the value to serialize. + + is . + There is no compatible for or its serializable members. + + + Writes the JSON representation of a type specified by a generic type parameter to the provided writer. + A JSON writer to write to. + The value to convert and write. + Options to control serialization behavior. + The type of the value to serialize. + + is . + There is no compatible for or its serializable members. + + + Writes one JSON value (including objects or arrays) to the provided writer. + The writer to write. + The value to convert and write. + Metadata about the type to convert. + The type of the value to serialize. + + or is . + There is no compatible for or its serializable members. + + + Converts the provided value to UTF-8 encoded JSON text and writes it to the . + The UTF-8 to write to. + The value to convert. + Metadata about the type to convert. + The that can be used to cancel the write operation. + + is . + + does not match the type of . + A task that represents the asynchronous write operation. + + + Asynchronously converts the value of a specified type to UTF-8 encoded JSON text and writes it to the specified stream. + The UTF-8 stream to write to. + The value to convert. + The type of the to convert. + Options to control serialization behavior. + A token that may be used to cancel the write operation. + + is not compatible with . + + or is . + There is no compatible for or its serializable members. + A task that represents the asynchronous write operation. + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + The that can be used to cancel the write operation. + + is not compatible with . + + , , or is . + There is no compatible for or its serializable members. + A task that represents the asynchronous write operation. + + + Asynchronously converts a value of a type specified by a generic type parameter to UTF-8 encoded JSON text and writes it to a stream. + The UTF-8 stream to write to. + The value to convert. + Options to control serialization behavior. + A token that may be used to cancel the write operation. + The type of the value to serialize. + + is . + There is no compatible for or its serializable members. + A task that represents the asynchronous write operation. + + + Converts the provided value to UTF-8 encoded JSON text and write it to the . + The UTF-8 to write to. + The value to convert. + Metadata about the type to convert. + The that can be used to cancel the write operation. + The type of the value to serialize. + + is . + There is no compatible for or its serializable members. + A task that represents the asynchronous write operation. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + + is . + + does not match the type of . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + Options to control the conversion behavior. + + is not compatible with . + + is . + There is no compatible for or its serializable members. + A representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + + or is . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + Options to control the conversion behavior. + The type of the value to serialize. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + The type of the value to serialize. + There is no compatible for or its serializable members. + + is . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + + is . + + does not match the type of . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + Options to control the conversion behavior. + + is not compatible with . + + is . + There is no compatible for or its serializable members. + A representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + + or is . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + Options to control the conversion behavior. + The type of the value to serialize. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + The type of the value to serialize. + There is no compatible for or its serializable members. + + is . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + + is . + + does not match the type of . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + Options to control the conversion behavior. + + is not compatible with . + + is . + There is no compatible for or its serializable members. + A representation of the value. + + + Converts the provided value into a . + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + + or is . + A representation of the value. + + + Converts the provided value into a . + The value to convert. + Options to control the conversion behavior. + The type of the value to serialize. + There is no compatible for or its serializable members. + A representation of the JSON value. + + + Converts the provided value into a . + The value to convert. + Metadata about the type to convert. + The type of the value to serialize. + There is no compatible for or its serializable members. + + is . + A representation of the value. + + + Converts the provided value into a array. + The value to convert. + Metadata about the type to convert. + + is . + + does not match the type of . + A UTF-8 representation of the value. + + + Converts a value of the specified type into a JSON string, encoded as UTF-8 bytes. + The value to convert. + The type of the to convert. + Options to control the conversion behavior. + + is not compatible with . + + is . + There is no compatible for or its serializable members. + A JSON string representation of the value, encoded as UTF-8 bytes. + + + Converts the provided value into a array. + The value to convert. + The type of the to convert. + A metadata provider for serializable types. + + is not compatible with . + + is . + There is no compatible for or its serializable members. + The method of the provided returns for the type to convert. + A UTF-8 representation of the value. + + + Converts the value of a type specified by a generic type parameter into a JSON string, encoded as UTF-8 bytes. + The value to convert. + Options to control the conversion behavior. + The type of the value. + There is no compatible for or its serializable members. + A JSON string representation of the value, encoded as UTF-8 bytes. + + + Converts the provided value into a array. + The value to convert. + Metadata about the type to convert. + The type of the value to serialize. + There is no compatible for or its serializable members. + + is . + A UTF-8 representation of the value. + + + Indicates whether unconfigured instances should be set to use the reflection-based . + + + Specifies scenario-based default serialization options that can be used to construct a instance. + + + + General-purpose option values. These are the same settings that are applied if a member isn't specified. + For information about the default property values that are applied, see JsonSerializerOptions properties. + + + + + Option values appropriate to Web-based scenarios. + This member implies that: + - Property names are treated as case-insensitive. + - "camelCase" name formatting should be employed. + - Quoted numbers (JSON strings for number properties) are allowed. + + + + Provides options to be used with . + + + Initializes a new instance of the class. + + + Constructs a new instance with a predefined set of options determined by the specified . + The to reason about. + + + Copies the options from a instance to a new instance. + The options instance to copy options from. + + is . + + + Appends a new to the metadata resolution of the current instance. + The generic definition of the specified context type. + + + Returns the converter for the specified type. + The type to return a converter for. + The configured for returned an invalid converter. + There is no compatible for or its serializable members. + The first converter that supports the given type. + + + Gets the contract metadata resolved by the current instance. + The type to resolve contract metadata for. + + is . + + is not valid for serialization. + The contract metadata resolved for . + + + Marks the current instance as read-only to prevent any further user modification. + The instance does not specify a setting. + + + Marks the current instance as read-only preventing any further user modification. + Populates unconfigured properties with the reflection-based default. + + The instance does not specify a setting. Thrown when is . + -or- + The feature switch has been turned off. + + + + Tries to get the contract metadata resolved by the current instance. + The type to resolve contract metadata for. + When this method returns, contains the resolved contract metadata, or if the contract could not be resolved. + + is . + + is not valid for serialization. + + if a contract for was found, or otherwise. + + + Get or sets a value that indicates whether an extra comma at the end of a list of JSON values in an object or array is allowed (and ignored) within the JSON payload being deserialized. + This property was set after serialization or deserialization has occurred. + + if an extra comma at the end of a list of JSON values in an object or array is allowed (and ignored); otherwise. + + + Gets the list of user-defined converters that were registered. + The list of custom converters. + + + Gets a read-only, singleton instance of that uses the default configuration. + + + Gets or sets the default buffer size, in bytes, to use when creating temporary buffers. + The buffer size is less than 1. + This property was set after serialization or deserialization has occurred. + The default buffer size in bytes. + + + Gets or sets a value that determines when properties with default values are ignored during serialization or deserialization. + The default value is . + This property is set to . + This property is set after serialization or deserialization has occurred. + +-or- + + has been set to . These properties cannot be used together. + + + Gets or sets the policy used to convert a key's name to another format, such as camel-casing. + The policy used to convert a key's name to another format. + + + Gets or sets the encoder to use when escaping strings, or to use the default encoder. + The JavaScript character encoding. + + + Gets or sets a value that indicates whether values are ignored during serialization and deserialization. The default value is . + This property was set after serialization or deserialization has occurred. + +-or- + + has been set to a non-default value. These properties cannot be used together. + + if null values are ignored during serialization and deserialization; otherwise, . + + + Gets or sets a value that indicates whether read-only fields are ignored during serialization. A field is read-only if it is marked with the keyword. The default value is . + This property is set after serialization or deserialization has occurred. + + if read-only fields are ignored during serialization; otherwise. + + + Gets a value that indicates whether read-only properties are ignored during serialization. The default value is . + This property was set after serialization or deserialization has occurred. + + if read-only properties are ignored during serialization; otherwise, . + + + Gets or sets a value that indicates whether fields are handled during serialization and deserialization. + The default value is . + This property is set after serialization or deserialization has occurred. + + if fields are included during serialization; otherwise, . + + + Gets a value that indicates whether the current instance has been locked for user modification. + + + Gets or sets the maximum depth allowed when serializing or deserializing JSON, with the default value of 0 indicating a maximum depth of 64. + This property was set after serialization or deserialization has occurred. + The max depth is set to a negative value. + The maximum depth allowed when serializing or deserializing JSON. + + + Gets or sets an object that specifies how number types should be handled when serializing or deserializing. + This property is set after serialization or deserialization has occurred. + + + Gets or sets the preferred object creation handling for properties when deserializing JSON. + When set to , all properties that are capable of reusing the existing instance will be populated. + + + Gets or sets a value that indicates whether a property's name uses a case-insensitive comparison during deserialization. The default value is . + + if property names are compared case-insensitively; otherwise, . + + + Gets or sets a value that specifies the policy used to convert a property's name on an object to another format, such as camel-casing, or to leave property names unchanged. + A property naming policy, or to leave property names unchanged. + + + Gets or sets a value that defines how comments are handled during deserialization. + This property was set after serialization or deserialization has occurred. + The comment handling enum is set to a value that is not supported (or not within the enum range). + A value that indicates whether comments are allowed, disallowed, or skipped. + + + Gets or sets an object that specifies how object references are handled when reading and writing JSON. + + + Gets or sets the contract resolver used by this instance. + The property is set after serialization or deserialization has occurred. + + + Gets the list of chained contract resolvers used by this instance. + + + Gets or sets an object that specifies how deserializing a type declared as an is handled during deserialization. + + + Gets or sets an object that specifies how handles JSON properties that cannot be mapped to a specific .NET member when deserializing object types. + + + Gets or sets a value that indicates whether JSON should use pretty printing. By default, JSON is serialized without any extra white space. + This property was set after serialization or deserialization has occurred. + + if JSON is pretty printed on serialization; otherwise, . The default is . + + + Defines the various JSON tokens that make up a JSON text. + + + The token type is a comment string. + + + The token type is the end of a JSON array. + + + The token type is the end of a JSON object. + + + The token type is the JSON literal false. + + + There is no value (as distinct from ). This is the default token type if no data has been read by the . + + + The token type is the JSON literal null. + + + The token type is a JSON number. + + + The token type is a JSON property name. + + + The token type is the start of a JSON array. + + + The token type is the start of a JSON object. + + + The token type is a JSON string. + + + The token type is the JSON literal true. + + + Specifies the data type of a JSON value. + + + A JSON array. + + + The JSON value false. + + + The JSON value null. + + + A JSON number. + + + A JSON object. + + + A JSON string. + + + The JSON value true. + + + There is no value (as distinct from ). + + + Allows the user to define custom behavior when writing JSON using the . + + + Gets or sets the encoder to use when escaping strings, or to use the default encoder. + The JavaScript character encoder used to override the escaping behavior. + + + Gets or sets a value that indicates whether the should format the JSON output, which includes indenting nested JSON tokens, adding new lines, and adding white space between property names and values. + + if the JSON output is formatted; if the JSON is written without any extra white space. The default is . + + + Gets or sets the maximum depth allowed when writing JSON, with the default (that is, 0) indicating a max depth of 1000. + Thrown when the max depth is set to a negative value. + + + Gets or sets a value that indicates whether the should skip structural validation and allow the user to write invalid JSON. + + if structural validation is skipped and invalid JSON is allowed; if an is thrown on any attempt to write invalid JSON. + + + Represents a mutable JSON array. + + + Initializes a new instance of the class that is empty. + Options to control the behavior. + + + Initializes a new instance of the class that contains items from the specified array. + The items to add to the new . + + + Initializes a new instance of the class that contains items from the specified params array. + Options to control the behavior. + The items to add to the new . + + + Adds a to the end of the . + The to be added to the end of the . + + + Adds an object to the end of the . + The object to be added to the end of the . + The type of object to be added. + + + Removes all elements from the . + + + Determines whether an element is in the . + The object to locate in the . + + if is found in the ; otherwise, . + + + Initializes a new instance of the class that contains items from the specified . + The . + Options to control the behavior. + The is not a . + The new instance of the class that contains items from the specified . + + + Returns an enumerator that iterates through the . + An for the . + + + Returns an enumerable that wraps calls to . + The type of the value to obtain from the . + An enumerable iterating over values of the array. + + + The object to locate in the . + The to locate in the . + The index of item if found in the list; otherwise, -1. + + + Inserts an element into the at the specified index. + The zero-based index at which should be inserted. + The to insert. + + is less than 0 or is greater than . + + + Removes the first occurrence of a specific from the . + The to remove from the . + + if is successfully removed; otherwise, . + + + Removes the element at the specified index of the . + The zero-based index of the element to remove. + + is less than 0 or is greater than . + + + Copies the entire to a compatible one-dimensional array, starting at the specified index of the target array. + The one-dimensional that is the destination of the elements copied from . The Array must have zero-based indexing. + The zero-based index in at which copying begins. + + is . + + is less than 0. + The number of elements in the source ICollection is greater than the available space from to the end of the destination . + + + Returns an enumerator that iterates through the . + A for the . + + + Writes the into the provided as JSON. + The . + Options to control the serialization behavior. + + + Gets the number of elements contained in the . + The number of elements contained in the . + + + Returns . + + if the is read-only; otherwise, . + + + The base class that represents a single node within a mutable JSON document. + + + Casts to the derived type. + The node is not a . + A . + + + Casts to the derived type. + The node is not a . + A . + + + Casts to the derived type. + The node is not a . + A . + + + Creates a new instance of the class. All child nodes are recursively cloned. + A new cloned instance of the current node. + + + Compares the values of two nodes, including the values of all descendant nodes. + The to compare. + The to compare. + + if the tokens are equal; otherwise . + + + Returns the index of the current node from the parent . + The current parent is not a . + The index of the current node. + + + Gets the JSON path. + The JSON Path value. + + + Returns the property name of the current node from the parent object. + The current parent is not a . + The property name of the current node. + + + Gets the value for the current . + The type of the value to obtain from the . + The current cannot be represented as a {TValue}. + The current is not a or is not compatible with {TValue}. + A value converted from the instance. + + + Returns the of the current instance. + The json value kind of the current instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to an . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to an . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to an . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to an . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a specified nullable to a nullable . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an explicit conversion of a given to a . + A to explicitly convert. + A value converted from the instance. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a given to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a nullable . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Defines an implicit conversion of a specified nullable to a . + A to implicitly convert. + A instance converted from the parameter. + + + Parses a as UTF-8-encoded data representing a single JSON value into a . The Stream will be read to completion. + JSON text to parse. + Options to control the node behavior after parsing. + Options to control the document behavior during parsing. + + does not represent a valid single JSON value. + A representation of the JSON value. + + + Parses text representing a single JSON value. + JSON text to parse. + Options to control the node behavior after parsing. + Options to control the document behavior during parsing. + + does not represent a valid single JSON value. + A representation of the JSON value. + + + Parses text representing a single JSON value. + JSON text to parse. + Options to control the node behavior after parsing. + Options to control the document behavior during parsing. + + is . + + does not represent a valid single JSON value. + A representation of the JSON value. + + + Parses one JSON value (including objects or arrays) from the provided reader. + The reader to read. + Options to control the behavior. + + is using unsupported options. + The current token does not start or represent a value. + A value could not be read from the reader. + The from the reader. + + + Parses a as UTF-8 encoded data representing a single JSON value into a . The stream will be read to completion. + The JSON text to parse. + Options to control the node behavior after parsing. + Options to control the document behavior during parsing. + The token to monitor for cancellation requests. + + does not represent a valid single JSON value. + A to produce a representation of the JSON value. + + + Replaces this node with a new value. + The value that replaces this node. + The type of value to be replaced. + + + Converts the current instance to string in JSON format. + Options to control the serialization behavior. + JSON representation of current instance. + + + Gets a string representation for the current value appropriate to the node type. + A string representation for the current value appropriate to the node type. + + + Writes the into the provided as JSON. + The . + Options to control the serialization behavior. + The parameter is . + + + Gets or sets the element at the specified index. + The zero-based index of the element to get or set. + + is less than 0 or is greater than the number of properties. + The current is not a . + + + Gets or sets the element with the specified property name. + If the property is not found, is returned. + The name of the property to return. + + is . + The current is not a . + + + Gets the options to control the behavior. + + + Gets the parent . + If there is no parent, is returned. + A parent can either be a or a . + + + Gets the root . + + + Options to control behavior. + + + Gets or sets a value that indicates whether property names on are case insensitive. + + if property names are case insensitive; if property names are case sensitive. + + + Represents a mutable JSON object. + + + Initializes a new instance of the class that contains the specified . + The properties to be added. + Options to control the behavior. + + + Initializes a new instance of the class that is empty. + Options to control the behavior. + + + Adds the specified property to the . + The KeyValuePair structure representing the property name and value to add to the . + An element with the same property name already exists in the . + The property name of is . + + + Adds an element with the provided property name and value to the . + The property name of the element to add. + The value of the element to add. + + is . + An element with the same property name already exists in the . + + + Removes all elements from the . + + + Determines whether the contains an element with the specified property name. + The property name to locate in the . + + is . + + if the contains an element with the specified property name; otherwise, . + + + Initializes a new instance of the class that contains properties from the specified . + The . + Options to control the behavior. + The new instance of the class that contains properties from the specified . + + + Returns an enumerator that iterates through the . + An enumerator that iterates through the . + + + Removes the element with the specified property name from the . + The property name of the element to remove. + + is . + + if the element is successfully removed; otherwise, . + + + Determines whether the contains a specific property name and reference. + The element to locate in the . + + if the contains an element with the property name; otherwise, . + + + Copies the elements of the to an array of type KeyValuePair starting at the specified array index. + The one-dimensional Array that is the destination of the elements copied from . + The zero-based index in at which copying begins. + + is . + + is less than 0. + The number of elements in the source ICollection is greater than the available space from to the end of the destination . + + + Removes a key and value from the . + The KeyValuePair structure representing the property name and value to remove from the . + + if the element is successfully removed; otherwise, . + + + Gets the value associated with the specified property name. + The property name of the value to get. + When this method returns, contains the value associated with the specified property name, if the property name is found; otherwise, . + + is . + + if the contains an element with the specified property name; otherwise, . + + + Returns an enumerator that iterates through the . + An enumerator that iterates through the . + + + Returns the value of a property with the specified name. + The name of the property to return. + The JSON value of the property with the specified name. + + if a property with the specified name was found; otherwise, . + + + Writes the into the provided as JSON. + The . + Options to control the serialization behavior. + + + Gets the number of elements contained in . + The number of elements contained in the . + + + Returns . + + if the is read-only; otherwise, . + + + Gets a collection containing the property names in the . + An containing the keys of the object that implements . + + + Gets a collection containing the property values in the . + An containing the values in the object that implements . + + + Represents a mutable JSON value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The underlying value of the new instance. + Options to control the behavior. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The value to create. + Options to control the behavior. + The type of value to create. + The new instance of the class that contains the specified value. + + + Initializes a new instance of the class that contains the specified value. + The value to create. + The that will be used to serialize the value. + Options to control the behavior. + The type of value to create. + The new instance of the class that contains the specified value. + + + Tries to obtain the current JSON value and returns a value that indicates whether the operation succeeded. + When this method returns, contains the parsed value. + The type of value to obtain. + + if the value can be successfully obtained; otherwise, . + + + Specifies that the JSON type should have its method called after deserialization occurs. + + + The method that is called after deserialization. + + + Specifies that the type should have its method called before deserialization occurs. + + + The method that is called before deserialization. + + + Specifies that the type should have its method called after serialization occurs. + + + The method that is called after serialization. + + + Specifies that the type should have its method called before serialization occurs. + + + The method that is called before serialization. + + + Provides the base class for serialization attributes. + + + Creates a new instance of the . + + + When placed on a constructor, indicates that the constructor should be used to create instances of the type on deserialization. + + + Initializes a new instance of . + + + Converts an object or value to or from JSON. + + + When overridden in a derived class, determines whether the converter instance can convert the specified object type. + The type of the object to check whether it can be converted by this converter instance. + + if the instance can convert the specified object type; otherwise, . + + + Gets the type being converted by the current converter instance. + + + Converts an object or value to or from JSON. + The type of object or value handled by the converter. + + + Initializes a new instance. + + + Determines whether the specified type can be converted. + The type to compare against. + + if the type can be converted; otherwise, . + + + Reads and converts the JSON to type . + The reader. + The type to convert. + An object that specifies serialization options to use. + The converted value. + + + Reads a dictionary key from a JSON property name. + The to read from. + The type to convert. + The options to use when reading the value. + The value that was converted. + + + Writes a specified value as JSON. + The writer to write to. + The value to convert to JSON. + An object that specifies serialization options to use. + + + Writes a dictionary key as a JSON property name. + The to write to. + The value to convert. The value of determines if the converter handles values. + The options to use when writing the value. + + + Gets a value that indicates whether should be passed to the converter on serialization, and whether should be passed on deserialization. + + + Gets the type being converted by the current converter instance. + + + When placed on a property or type, specifies the converter type to use. + + + Initializes a new instance of . + + + Initializes a new instance of with the specified converter type. + The type of the converter. + + + When overridden in a derived class and is , allows the derived class to create a in order to pass additional state. + The type of the converter. + The custom converter. + + + Gets the type of the , or if it was created without a type. + The type of the , or if it was created without a type. + + + Supports converting several types by using a factory pattern. + + + When overridden in a derived class, initializes a new instance of the class. + + + Creates a converter for a specified type. + The type handled by the converter. + The serialization options to use. + A converter for which is compatible with . + + + Gets the type being converted by the current converter instance. + + + When placed on a type declaration, indicates that the specified subtype should be opted into polymorphic serialization. + + + Initializes a new attribute with specified parameters. + A derived type that should be supported in polymorphic serialization of the declared based type. + + + Initializes a new attribute with specified parameters. + A derived type that should be supported in polymorphic serialization of the declared base type. + The type discriminator identifier to be used for the serialization of the subtype. + + + Initializes a new attribute with specified parameters. + A derived type that should be supported in polymorphic serialization of the declared base type. + The type discriminator identifier to be used for the serialization of the subtype. + + + A derived type that should be supported in polymorphic serialization of the declared base type. + + + The type discriminator identifier to be used for the serialization of the subtype. + + + When placed on a property of type , any properties that do not have a matching member are added to that dictionary during deserialization and written during serialization. + + + Initializes a new instance of the class. + + + Prevents a property from being serialized or deserialized. + + + Initializes a new instance of . + + + Gets or sets the condition that must be met before a property will be ignored. + + + Controls how the ignores properties on serialization and deserialization. + + + Property is always ignored. + + + Property is always serialized and deserialized, regardless of configuration. + + + Property is ignored only if it equals the default value for its type. + + + Property is ignored if its value is . This is applied only to reference-type properties and fields. + + + Indicates that the member should be included for serialization and deserialization. + The attribute is applied to a non-public property. + + + Initializes a new instance of . + + + The to be used at run time. + + + Specifies that the built-in be used to convert JSON property names. + + + Specifies that the built-in be used to convert JSON property names. + + + Specifies that the built-in policy be used to convert JSON property names. + + + Specifies that the built-in policy be used to convert JSON property names. + + + Specifies that the built-in policy be used to convert JSON property names. + + + Specifies that JSON property names should not be converted. + + + Converter to convert enums to and from numeric values. + The enum type that this converter targets. + + + Initializes a new instance of . + + + When overridden in a derived class, determines whether the converter instance can convert the specified object type. + The type of the object to check whether it can be converted by this converter instance. + + true if the instance can convert the specified object type; otherwise, false. + + + Creates a converter for a specified type. + The type handled by the converter. + The serialization options to use. + A converter for which T is compatible with typeToConvert. + + + Determines how handles numbers when serializing and deserializing. + + + The "NaN", "Infinity", and "-Infinity" tokens can be read as floating-point constants, and the and values for these constants will be written as their corresponding JSON string representations. + + + Numbers can be read from tokens. Does not prevent numbers from being read from token. + + + Numbers will only be read from tokens and will only be written as JSON numbers (without quotes). + + + Numbers will be written as JSON strings (with quotes), not as JSON numbers. + + + When placed on a type, property, or field, indicates what settings should be used when serializing or deserializing numbers. + + + Initializes a new instance of . + A bitwise combination of the enumeration values that specify how number types should be handled when serializing or deserializing. + + + Indicates what settings should be used when serializing or deserializing numbers. + An object that determines the number serialization and deserialization settings. + + + Determines how deserialization will handle object creation for fields or properties. + + + Attempt to populate any instances already found on a deserialized field or property. + + + A new instance will always be created when deserializing a field or property. + + + Determines how deserialization handles object creation for fields or properties. + + + Initializes a new instance of . + The handling to apply to the current member. + + + Gets the configuration to use when deserializing members. + + + When placed on a type, indicates that the type should be serialized polymorphically. + + + Creates a new instance. + + + Gets or sets a value that indicates whether the deserializer should ignore any unrecognized type discriminator IDs and revert to the contract of the base type. + + to instruct the deserializer to ignore any unrecognized type discriminator IDs and revert to the contract of the base type; to fail the deserialization for unrecognized type discriminator IDs. + + + Gets or sets a custom type discriminator property name for the polymorhic type. + Uses the default '$type' property name if left unset. + + + Gets or sets the behavior when serializing an undeclared derived runtime type. + + + Specifies the property name that is present in the JSON when serializing and deserializing. This overrides any naming policy specified by . + + + Initializes a new instance of with the specified property name. + The name of the property. + + + Gets the name of the property. + The name of the property. + + + Specifies the property order that is present in the JSON when serializing. Lower values are serialized first. + If the attribute is not specified, the default value is 0. + + + Initializes a new instance of with the specified order. + The order of the property. + + + Gets the serialization order of the property. + The serialization order of the property. + + + Indicates that the annotated member must bind to a JSON property on deserialization. + + + Initializes a new instance of . + + + Instructs the System.Text.Json source generator to generate source code to help optimize performance when serializing and deserializing instances of the specified type and types in its object graph. + + + Initializes a new instance of with the specified type. + The type to generate source code for. + + + Gets or sets the mode that indicates what the source generator should generate for the type. If the value is , then the setting specified on will be used. + + + Gets or sets the name of the property for the generated for the type on the generated, derived type. + + + Provides metadata about a set of types that is relevant to JSON serialization. + + + Creates an instance of and binds it with the indicated . + The run time provided options for the context instance. + + + Gets metadata for the specified type. + The type to fetch metadata for. + The metadata for the specified type, or if the context has no metadata for the type. + + + Resolves a contract for the requested type and options. + The type to be resolved. + The configuration to use when resolving the metadata. + A instance matching the requested type, or if no contract could be resolved. + + + Gets the default run-time options for the context. + + + Gets the run-time specified options of the context. If no options were passed when instantiating the context, then a new instance is bound and returned. + + + The generation mode for the System.Text.Json source generator. + + + When specified on , indicates that both type-metadata initialization logic and optimized serialization logic should be generated for all types. When specified on , indicates that the setting on should be used. + + + Instructs the JSON source generator to generate type-metadata initialization logic. + + + Instructs the JSON source generator to generate optimized serialization logic. + + + Instructs the System.Text.Json source generator to assume the specified options will be used at run time via . + + + Initializes a new instance of . + + + Constructs a new instance with a predefined set of options determined by the specified . + The to reason about. + + is invalid. + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets the default ignore condition. + + + Gets or sets the default value of . + + + Gets or sets the source generation mode for types that don't explicitly set the mode with . + + + Gets or sets a value that indicates whether to ignore read-only fields. + + + Gets or sets a value that indicates whether to ignore read-only properties. + + + Gets or sets a value that indicates whether to include fields for serialization and deserialization. + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets a built-in naming policy to convert JSON property names with. + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets the default value of . + + + Gets or sets a value that indicates whether the source generator defaults to instead of numeric serialization for all enum types encountered in its type graph. + + + Gets or sets a value that indicates whether JSON output is pretty-printed. + + + Converts enumeration values to and from strings. + + + Initializes an instance of the class with the default naming policy that allows integer values. + + + Initializes an instance of the class with a specified naming policy and a value that indicates whether undefined enumeration values are allowed. + The optional naming policy for writing enum values. + + to allow undefined enum values; otherwise, . When , if an enum value isn't defined, it will output as a number rather than a string. + + + Determines whether the specified type can be converted to an enum. + The type to be checked. + + true if the type can be converted; otherwise, false. + + + Creates a converter for the specified type. + The type handled by the converter. + The serialization options to use. + A converter for which T is compatible with typeToConvert. + + + Converter to convert enums to and from strings. + The enum type that this converter targets. + + + Initializes a new instance of with the default naming policy and that allows integer values. + + + Initializes a new instance of . + Optional naming policy for writing enum values. + + to allow undefined enum values. When , if an enum value isn't defined, it outputs as a number rather than a string. + + + When overridden in a derived class, determines whether the converter instance can convert the specified object type. + The type of the object to check whether it can be converted by this converter instance. + + true if the instance can convert the specified object type; otherwise, false. + + + Creates a converter for a specified type. + The type handled by the converter. + The serialization options to use. + A converter for which T is compatible with typeToConvert. + + + Defines how objects of a derived runtime type that has not been explicitly declared for polymorphic serialization should be handled. + + + An object of undeclared runtime type will fail polymorphic serialization. + + + An object of undeclared runtime type will fall back to the serialization contract of the base type. + + + An object of undeclared runtime type will revert to the serialization contract of the nearest declared ancestor type. + Certain interface hierarchies are not supported due to diamond ambiguity constraints. + + + Defines how deserializing a type declared as an is handled during deserialization. + + + A type declared as is deserialized as a . + + + A type declared as is deserialized as a . + + + Determines how handles JSON properties that cannot be mapped to a specific .NET member when deserializing object types. + + + Throws an exception when an unmapped property is encountered. + + + Silently skips any unmapped properties. This is the default behavior. + + + When placed on a type, determines the configuration for the specific type, overriding the global setting. + + + Initializes a new instance of . + The handling to apply to the current member. + + + Gets the unmapped member handling setting for the attribute. + + + Defines the default, reflection-based JSON contract resolver used by System.Text.Json. + + + Creates a mutable instance. + + + Resolves a JSON contract for a given and configuration. + The type for which to resolve a JSON contract. + A instance used to determine contract configuration. + + or is . + A defining a reflection-derived JSON contract for . + + + Gets a list of user-defined callbacks that can be used to modify the initial contract. + + + Used to resolve the JSON serialization contract for requested types. + + + Resolves a contract for the requested type and options. + Type to be resolved. + Configuration used when resolving the metadata. + A instance matching the requested type, or if no contract could be resolved. + + + Provides serialization metadata about a collection type. + The collection type. + + + + A instance representing the element type. + + + If a dictionary type, the instance representing the key type. + + + The option to apply to number collection elements. + + + A to create an instance of the collection when deserializing. + + + An optimized serialization implementation assuming pre-determined defaults. + + + Represents a supported derived type defined in the metadata of a polymorphic type. + + + Initializes a new instance of the class that represents a supported derived type without a type discriminator. + The derived type to be supported by the polymorphic type metadata. + + + Initializes a new instance of the class that represents a supported derived type with an integer type discriminator. + The derived type to be supported by the polymorphic type metadata. + The type discriminator to be associated with the derived type. + + + Initializes a new instance of the class that represents a supported derived type with a string type discriminator. + The derived type to be supported by the polymorphic type metadata. + The type discriminator to be associated with the derived type. + + + Gets a derived type that should be supported in polymorphic serialization of the declared base type. + + + Gets the type discriminator identifier to be used for the serialization of the subtype. + + + Provides helpers to create and initialize metadata for JSON-serializable types. + + + Creates serialization metadata for an array. + The serialization and deserialization options to use. + Provides serialization metadata about the collection type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The serialization and deserialization options to use. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the key type. + The generic definition of the value type. + Serialization metadata for the given type. + + + Creates serialization metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the key type. + The generic definition of the value type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for and types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + A method to create an immutable dictionary instance. + The generic definition of the type. + The generic definition of the key type. + The generic definition of the value type. + Serialization metadata for the given type. + + + Creates metadata for non-dictionary immutable collection types. + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + A method to create an immutable dictionary instance. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the key type. + The generic definition of the value type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates serialization metadata for . + The to use. + Provides serialization metadata about the collection type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for a complex class or struct. + The to use for serialization and deserialization. + Provides serialization metadata about an object type with constructors, properties, and fields. + The type of the class or struct. + + or is . + A instance representing the class or struct. + + + Creates metadata for a property or field. + The to use for serialization and deserialization. + Provides serialization metadata about the property or field. + The type that the converter for the property returns or accepts when converting JSON data. + A instance initialized with the provided metadata. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + A method for adding elements to the collection when using the serializer's code-paths. + The generic definition of the type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates serialization metadata for . + The to use. + Provides serialization metadata about the collection type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + A method for adding elements to the collection when using the serializer's code-paths. + The generic definition of the type. + Serialization metadata for the given type. + + + Creates metadata for types assignable to . + The to use for serialization and deserialization. + Provides serialization metadata about the collection type. + The generic definition of the type. + The generic definition of the element type. + Serialization metadata for the given type. + + + Creates metadata for a primitive or a type with a custom converter. + The to use for serialization and deserialization. + + The generic type definition. + A instance representing the type. + + + Creates a instance that converts values. + The to use for serialization and deserialization. + The generic definition for the enum type. + A instance that converts values. + + + Creates a instance that converts values. + The to use for serialization and deserialization. + The generic definition for the underlying nullable type. + A instance that converts values + + + Creates a instance that converts values. + Serialization metadata for the underlying nullable type. + The generic definition for the underlying nullable type. + A instance that converts values + + + Gets a type converter that throws a . + The generic definition for the type. + A instance that throws + + + Gets an object that converts values. + + + Gets an object that converts byte array values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Returns a instance that converts values. + + + Gets an object that converts values. + An instance that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Returns a instance that converts values. + + + Returns a instance that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Returns a instance that converts values. + + + Gets a JSON converter that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Returns a instance that converts values. + + + Gets an object that converts values. + + + Returns a instance that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Returns a instance that converts values. + + + Gets a JSON converter that converts values. + + + Returns a instance that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Gets an object that converts values. + + + Provides serialization metadata about an object type with constructors, properties, and fields. + The object type to serialize or deserialize. + + + + Provides a mechanism to initialize metadata for a parameterized constructor of the class or struct to be used when deserializing. + + + Gets or sets an object that specifies how number properties and fields should be processed when serializing and deserializing. + + + Gets or sets a mechanism to create an instance of the class or struct using a parameterless constructor during deserialization. + + + Gets or sets a mechanism to create an instance of the class or struct using a parameterized constructor during deserialization. + + + Gets or sets a mechanism to initialize metadata for properties and fields of the class or struct. + + + Gets or sets a serialization implementation for instances of the class or struct that assumes options specified by . + + + Provides information about a constructor parameter required for JSON deserialization. + + + + Gets or sets the default value of the parameter. + + + Gets or sets a value that specifies whether a default value was specified for the parameter. + + + Gets or sets the name of the parameter. + + + Gets or sets the type of the parameter. + + + Gets or sets the zero-based position of the parameter in the formal parameter list. + + + Defines polymorphic configuration for a specified base type. + + + Creates an empty instance. + + + Gets the list of derived types supported in the current polymorphic type configuration. + + + Gets or sets a value that indicates whether the serializer should ignore any unrecognized type discriminator IDs and revert to the contract of the base type. + The parent instance has been locked for further modification. + + if the serializer should ignore any unrecognized type discriminator IDs and revert to the contract of the base type; if the deserialization should fail when an unrecognized type discriminator ID is encountered. + + + Gets or sets a custom type discriminator property name for the polymorhic type. + Uses the default '$type' property name if left unset. + The parent instance has been locked for further modification. + + + Gets or sets the behavior when serializing an undeclared derived runtime type. + The parent instance has been locked for further modification. + + + Provides JSON serialization-related metadata about a property or field. + + + Gets or sets the custom attribute provider for the current property. + The instance has been locked for further modification. + + + Gets or sets a custom converter override for the current property. + The instance has been locked for further modification. + + + Gets or sets a getter delegate for the property. + The instance has been locked for further modification. + + + Gets or sets a value that indicates whether the current property is a special extension data property. + The instance has been locked for further modification. + +-or- + +The current is not valid for use with extension data. + + + Gets or sets a value that indicates whether the current property is required for deserialization to be successful. + The instance has been locked for further modification. + + + Gets or sets the JSON property name used when serializing the property. + + is . + The instance has been locked for further modification. + + + Gets or sets the applied to the current property. + The instance has been locked for further modification. + + + Gets or sets a value indicating if the property or field should be replaced or populated during deserialization. + + + Gets the value associated with the current contract instance. + + + Gets or sets the serialization order for the current property. + The instance has been locked for further modification. + + + Gets the type of the current property. + + + Gets or sets a setter delegate for the property. + The instance has been locked for further modification. + + + Gets or sets a predicate that determines whether the current property value should be serialized. + The instance has been locked for further modification. + + + Provides serialization metadata about a property or field. + The type to convert of the for the property. + + + + A for the property or field, specified by . + + + The declaring type of the property or field. + + + Provides a mechanism to get the property or field's value. + + + Whether the property was annotated with . + + + Specifies a condition for the member to be ignored. + + + Whether the property was annotated with . + + + If , indicates that the member is a property, otherwise indicates the member is a field. + + + Whether the property or field is public. + + + Whether the property or field is a virtual property. + + + The name to be used when processing the property or field, specified by . + + + If the property or field is a number, specifies how it should processed when serializing and deserializing. + + + The name of the property or field. + + + The info for the property or field's type. + + + Provides a mechanism to set the property or field's value. + + + Provides JSON serialization-related metadata about a type. + + + Creates a blank instance for the current . + The declared type for the property. + The property name used in JSON serialization and deserialization. + + or is . + + cannot be used for serialization. + The instance has been locked for further modification. + A blank instance. + + + Creates a blank instance. + The type for which contract metadata is specified. + The instance the metadata is associated with. + + or is . + + cannot be used for serialization. + A blank instance. + + + Creates a blank instance. + The instance the metadata is associated with. + The type for which contract metadata is specified. + + is . + A blank instance. + + + Locks the current instance for further modification. + + + Gets the associated with the current type. + + + Gets or sets a parameterless factory to be used on deserialization. + The instance has been locked for further modification. + +-or- + +A parameterless factory is not supported for the current metadata . + + + Gets a value that indicates whether the current instance has been locked for modification. + + + Gets a value that describes the kind of contract metadata that the current instance specifies. + + + Gets or sets the type-level override. + The instance has been locked for further modification. + An invalid value was specified. + + + Gets or sets a callback to be invoked after deserialization occurs. + The instance has been locked for further modification. + +-or- + +Serialization callbacks are only supported for metadata. + + + Gets or sets a callback to be invoked before deserialization occurs. + The instance has been locked for further modification. + +-or- + +Serialization callbacks are only supported for metadata. + + + Gets or sets a callback to be invoked after serialization occurs. + The instance has been locked for further modification. + +-or- + +Serialization callbacks are only supported for metadata. + + + Gets or sets a callback to be invoked before serialization occurs. + The instance has been locked for further modification. + +-or- + +Serialization callbacks are only supported for metadata. + + + Gets the value associated with the current instance. + + + Gets or sets the from which this metadata instance originated. + The instance has been locked for further modification. + + + Gets or sets a configuration object specifying polymorphism metadata. + + has been associated with a different instance. + The instance has been locked for further modification. + +-or- + +Polymorphic serialization is not supported for the current metadata . + + + Gets or sets the preferred value for properties contained in the type. + The instance has been locked for further modification. + +-or- + +Unmapped member handling is only supported for JsonTypeInfoKind.Object. + Specified an invalid value. + + + Gets the list of metadata corresponding to the current type. + + + Gets the for which the JSON serialization contract is being defined. + + + Gets or sets the type-level override. + The instance has been locked for further modification. + +-or- + +Unmapped member handling is only supported for . + An invalid value was specified. + + + Provides JSON serialization-related metadata about a type. + The generic definition of the type. + + + Gets or sets a parameterless factory to be used on deserialization. + The instance has been locked for further modification. + +-or- + +A parameterless factory is not supported for the current metadata . + + + Serializes an instance of using values specified at design time. + + + Describes the kind of contract metadata a specifies. + + + Type is serialized as a dictionary with key/value pair entries. + + + Type is serialized as a collection with elements. + + + Type is either a simple value or uses a custom converter. + + + Type is serialized as an object with properties. + + + Contains utilities and combinators acting on . + + + Combines multiple sources into one. + Sequence of contract resolvers to be queried for metadata. + + is . + A combining results from . + + + Creates a resolver and applies modifications to the metadata generated by the source . + The source resolver generating metadata. + The delegate that modifies non- results. + A new instance with modifications applied. + + + Defines how the deals with references on serialization and deserialization. + + + Initializes a new instance of the class. + + + Returns the used for each serialization call. + The resolver to use for serialization and deserialization. + + + Gets an object that indicates whether an object is ignored when a reference cycle is detected during serialization. + + + Gets an object that indicates whether metadata properties are honored when JSON objects and arrays are deserialized into reference types, and written when reference types are serialized. This is necessary to create round-trippable JSON from objects that contain cycles or duplicate references. + + + Defines how the deals with references on serialization and deserialization. + The type of the to create on each serialization or deserialization call. + + + Initializes a new instance of the generic class that can create a instance of the specified type. + + + Creates a new of type used for each serialization call. + The new resolver to use for serialization and deserialization. + + + Defines how the deals with references on serialization and deserialization. + Defines the core behavior of preserving references on serialization and deserialization. + + + Initializes a new instance of the class. + + + Adds an entry to the bag of references using the specified id and value. + This method gets called when an $id metadata property from a JSON object is read. + The identifier of the JSON object or array. + The value of the CLR reference type object that results from parsing the JSON object. + + + Gets the reference identifier of the specified value if exists; otherwise a new id is assigned. + This method gets called before a CLR object is written so we can decide whether to write $id and enumerate the rest of its properties or $ref and step into the next object. + The value of the CLR reference type object to get an id for. + When this method returns, if a reference to value already exists; otherwise, . + The reference id for the specified object. + + + Returns the CLR reference type object related to the specified reference id. + This method gets called when $ref metadata property is read. + The reference id related to the returned object. + The reference type object related to the specified reference id. + + + Provides a high-performance API for forward-only, read-only access to UTF-8 encoded JSON text. + + + Initializes a new instance of the structure that processes a read-only sequence of UTF-8 encoded text and indicates whether the input contains all the text to process. + The UTF-8 encoded JSON text to process. + + to indicate that the input sequence contains the entire data to process; to indicate that the input span contains partial data with more data to follow. + The reader state. If this is the first call to the constructor, pass the default state; otherwise, pass the value of the property from the previous instance of the . + + + Initializes a new instance of the structure that processes a read-only sequence of UTF-8 encoded text using the specified options. + The UTF-8 encoded JSON text to process. + Options that define customized behavior of the that differs from the JSON RFC (for example, how to handle comments or maximum depth allowed when reading). By default, the follows the JSON RFC strictly; comments within the JSON are invalid, and the maximum depth is 64. + + + Initializes a new instance of the structure that processes a read-only span of UTF-8 encoded text and indicates whether the input contains all the text to process. + The UTF-8 encoded JSON text to process. + + to indicate that the input sequence contains the entire data to process; to indicate that the input span contains partial data with more data to follow. + The reader state. If this is the first call to the constructor, pass the default state; otherwise, pass the value of the property from the previous instance of the . + + + Initializes a new instance of the structure that processes a read-only span of UTF-8 encoded text using the specified options. + The UTF-8 encoded JSON text to process. + Options that define customized behavior of the that differs from the JSON RFC (for example, how to handle comments or maximum depth allowed when reading). By default, the follows the JSON RFC strictly; comments within the JSON are invalid, and the maximum depth is 64. + + + Copies the current JSON token value from the source, unescaped, as UTF-8 bytes to a buffer. + A buffer to write the unescaped UTF-8 bytes into. + The JSON token is not a string, that is, it's not or . + +-or- + +The JSON string contains invalid UTF-8 bytes or invalid UTF-16 surrogates. + The destination buffer is too small to hold the unescaped value. + The number of bytes written to . + + + Copies the current JSON token value from the source, unescaped, as UTF-16 characters to a buffer. + A buffer to write the transcoded UTF-16 characters into. + The JSON token is not a string, that is, it's not or . + +-or- + +The JSON string contains invalid UTF-8 bytes or invalid UTF-16 surrogates. + The destination buffer is too small to hold the unescaped value. + The number of characters written to . + + + Reads the next JSON token value from the source as a . + The value of the JSON token isn't a Boolean value (that is, or ). + + if the is ; if the is . + + + Parses the current JSON token value from the source as a . + The value of the JSON token is not a . + The numeric format of the JSON token value is incorrect (for example, it contains a fractional value or is written in scientific notation). + +-or- + +The JSON token value represents a number less than Byte.MinValue or greater than Byte.MaxValue. + The value of the UTF-8 encoded token. + + + Parses the current JSON token value from the source and decodes the Base64 encoded JSON string as a byte array. + The type of the JSON token is not a . + The value is not encoded as Base64 text, so it can't be decoded to bytes. + +-or- + +The value contains invalid or more than two padding characters. + +-or- + +The value is incomplete. That is, the JSON string length is not a multiple of 4. + The byte array that represents the current JSON token value. + + + Parses the current JSON token value from the source as a comment and transcodes it as a . + The JSON token is not a comment. + The comment that represents the current JSON token value. + + + Reads the next JSON token value from the source and parses it to a . + The value of the JSON token isn't a . + The JSON token value cannot be read as a . + +-or- + +The entire UTF-8 encoded token value cannot be parsed to a value. + +-or- + +The JSON token value is of an unsupported format. + The date and time value, if the entire UTF-8 encoded token value can be successfully parsed. + + + Reads the next JSON token value from the source and parses it to a . + The value of the JSON token isn't a . + The JSON token value cannot be read as a . + +-or- + +The entire UTF-8 encoded token value cannot be parsed to a value. + +-or- + +The JSON token value is of an unsupported format. + The date and time offset, if the entire UTF-8 encoded token value can be successfully parsed. + + + Reads the next JSON token value from the source and parses it to a . + The JSON token value isn't a . + The JSON token value represents a number less than Decimal.MinValue or greater than Decimal.MaxValue. + The UTF-8 encoded token value parsed to a . + + + Reads the next JSON token value from the source and parses it to a . + The JSON token value isn't a . + The JSON token value represents a number less than Double.MinValue or greater than Double.MaxValue. + The UTF-8 encoded token value parsed to a . + + + Reads the next JSON token value from the source and parses it to a . + The value of the JSON token isn't a . + The JSON token value is in an unsupported format for a Guid. + +-or- + +The entire UTF-8 encoded token value cannot be parsed to a value. + The GUID value, if the entire UTF-8 encoded token value can be successfully parsed. + + + Parses the current JSON token value from the source as a . + The value of the JSON token is not a . + The numeric format of the JSON token value is incorrect (for example, it contains a fractional value or is written in scientific notation). + +-or- + +The JSON token value represents a number less than Int16.MinValue or greater than Int16.MaxValue. + The UTF-8 encoded token value parsed to an . + + + Reads the next JSON token value from the source and parses it to an . + The JSON token value isn't a . + The JSON token value is of the incorrect numeric format. For example, it contains a decimal or is written in scientific notation. + +-or- + +The JSON token value represents a number less than Int32.MinValue or greater than Int32.MaxValue. + The UTF-8 encoded token value parsed to an . + + + Reads the next JSON token value from the source and parses it to an . + The JSON token value isn't a . + The JSON token value is of the incorrect numeric format. For example, it contains a decimal or is written in scientific notation. + +-or- + +The JSON token value represents a number less than Int64.MinValue or greater than Int64.MaxValue. + The UTF-8 encoded token value parsed to an . + + + Parses the current JSON token value from the source as an . + The value of the JSON token is not a . + The numeric format of the JSON token value is incorrect (for example, it contains a fractional value or is written in scientific notation). + +-or- + +The JSON token value represents a number less than SByte.MinValue or greater than SByte.MaxValue. + The UTF-8 encoded token value parsed to an . + + + Reads the next JSON token value from the source and parses it to a . + The JSON token value isn't a . + The JSON token value represents a number less than Single.MinValue or greater than Single.MaxValue. + The UTF-8 encoded token value parsed to a . + + + Reads the next JSON token value from the source unescaped and transcodes it as a string. + The JSON token value isn't a string (that is, not a , , or ). + +-or- + +The JSON string contains invalid UTF-8 bytes or invalid UTF-16 surrogates. + The token value parsed to a string, or if is . + + + Parses the current JSON token value from the source as a . + The value of the JSON token is not a . + The numeric format of the JSON token value is incorrect (for example, it contains a fractional value or is written in scientific notation). + +-or- + +The JSON token value represents a number less than UInt16.MinValue or greater than UInt16.MaxValue. + The UTF-8 encoded token value parsed to a . + + + Reads the next JSON token value from the source and parses it to a . + The JSON token value isn't a . + The JSON token value is of the incorrect numeric format. For example, it contains a decimal or is written in scientific notation. + +-or- + +The JSON token value represents a number less than UInt32.MinValue or greater than UInt32.MaxValue. + The UTF-8 encoded token value parsed to a . + + + Reads the next JSON token value from the source and parses it to a . + The JSON token value isn't a . + The JSON token value is of the incorrect numeric format. For example, it contains a decimal or is written in scientific notation. + +-or- + +The JSON token value represents a number less than UInt64.MinValue or greater than UInt64.MaxValue. + The UTF-8 encoded token value parsed to a . + + + Reads the next JSON token from the input source. + An invalid JSON token according to the JSON RFC is encountered. + +-or- + +The current depth exceeds the recursive limit set by the maximum depth. + + if the token was read successfully; otherwise, . + + + Skips the children of the current JSON token. + The reader was given partial data with more data to follow (that is, is ). + An invalid JSON token was encountered while skipping, according to the JSON RFC. + +-or- + +The current depth exceeds the recursive limit set by the maximum depth. + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the byte equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source and decodes the Base64 encoded JSON string as a byte array and returns a value that indicates whether the operation succeeded. + When this method returns, contains the decoded binary representation of the Base64 text. + The JSON token is not a . + + if the entire token value is encoded as valid Base64 text and can be successfully decoded to bytes; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the date and time value equivalent to the current JSON string if the conversion succeeded, or if the conversion failed. + The value of the JSON token isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the date and time value equivalent to the current JSON string if the conversion succeeded, or if the conversion failed. + The value of the JSON token isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the decimal equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains a double-precision floating point value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the GUID equivalent to the current JSON string if the conversion succeeded, or if the conversion failed. + The value of the JSON token isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as an and returns a value that indicates whether the operation succeeded. + When this method returns, contains the 16-bit integer value equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as an and returns a value that indicates whether the operation succeeded. + When this method returns, contains the 32-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to an value; otherwise, . + + + Tries to parse the current JSON token value from the source as an and returns a value that indicates whether the operation succeeded. + When this method returns, contains the 64-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to an value; otherwise, . + + + Tries to parse the current JSON token value from the source as an and returns a value that indicates whether the operation succeeded. + When this method returns, contains the signed byte equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to an value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the single-precision floating point value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to an value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains the unsigned 16-bit integer value equivalent of the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains unsigned 32-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to parse the current JSON token value from the source as a and returns a value that indicates whether the operation succeeded. + When this method returns, contains unsigned 64-bit integer value equivalent to the current JSON number if the conversion succeeded, or 0 if the conversion failed. + The JSON token value isn't a . + + if the entire UTF-8 encoded token value can be successfully parsed to a value; otherwise, . + + + Tries to skip the children of the current JSON token. + An invalid JSON token was encountered while skipping, according to the JSON RFC. + +-or - + +The current depth exceeds the recursive limit set by the maximum depth. + + if there was enough data for the children to be skipped successfully; otherwise, . + + + Compares the UTF-8 encoded text in a read-only byte span to the unescaped JSON token value in the source and returns a value that indicates whether they match. + The UTF-8 encoded text to compare against. + The JSON token is not a JSON string (that is, it is not or ). + + if the JSON token value in the source matches the UTF-8 encoded lookup text; otherwise, . + + + Compares the text in a read-only character span to the unescaped JSON token value in the source and returns a value that indicates whether they match. + The text to compare against. + The JSON token is not a JSON string (that is, it is not or ). + + if the JSON token value in the source matches the lookup text; otherwise, . + + + Compares the string text to the unescaped JSON token value in the source and returns a value that indicates whether they match. + The text to compare against. + The JSON token is not a JSON string (that is, it is not or ). + + if the JSON token value in the source matches the lookup text; otherwise, . + + + Gets the total number of bytes consumed so far by this instance of the . + The total number of bytes consumed so far. + + + Gets the depth of the current token. + The depth of the current token. + + + Gets the current state to pass to a constructor with more data. + The current reader state. + + + Gets a value that indicates which Value property to use to get the token value. + + if should be used to get the token value; if should be used instead. + + + Gets a value that indicates whether all the JSON data was provided or there is more data to come. + + if the reader was constructed with the input span or sequence containing the entire JSON data to process; if the reader was constructed with an input span or sequence that may contain partial JSON data with more data to follow. + + + Gets the current within the provided UTF-8 encoded input ReadOnlySequence<byte> or a default if the struct was constructed with a ReadOnlySpan<byte>. + The current within the provided UTF-8 encoded input ReadOnlySequence<byte> or a default if the struct was constructed with a ReadOnlySpan<byte>. + + + Gets the index that the last processed JSON token starts at (within the given UTF-8 encoded input text), skipping any white space. + The starting index of the last processed JSON token within the given UTF-8 encoded input text. + + + Gets the type of the last processed JSON token in the UTF-8 encoded JSON text. + The type of the last processed JSON token. + + + Gets a value that indicates whether the current or properties contain escape sequences per RFC 8259 section 7, and therefore require unescaping before being consumed. + + + Gets the raw value of the last processed token as a ReadOnlySequence<byte> slice of the input payload, only if the token is contained within multiple segments. + A byte read-only sequence. + + + Gets the raw value of the last processed token as a ReadOnlySpan<byte> slice of the input payload, if the token fits in a single segment or if the reader was constructed with a JSON payload contained in a ReadOnlySpan<byte>. + A read-only span of bytes. + + + Provides a high-performance API for forward-only, non-cached writing of UTF-8 encoded JSON text. + + + Initializes a new instance of the class using the specified to write the output to and customization options. + The destination for writing JSON text. + Defines the customized behavior of the . By default, it writes minimized JSON (with no extra white space) and validates that the JSON being written is structurally valid according to the JSON RFC. + + is . + + + Initializes a new instance of the class using the specified stream to write the output to and customization options. + The destination for writing JSON text. + Defines the customized behavior of the . By default, it writes minimized JSON (with no extra white space) and validates that the JSON being written is structurally valid according to the JSON RFC. + + is . + + + Commits any leftover JSON text that has not yet been flushed and releases all resources used by the current instance. + + + Asynchronously commits any leftover JSON text that has not yet been flushed and releases all resources used by the current instance. + A task representing the asynchronous dispose operation. + + + Commits the JSON text written so far, which makes it visible to the output destination. + This instance has been disposed. + + + Asynchronously commits the JSON text written so far, which makes it visible to the output destination. + The token to monitor for cancellation requests. The default value is . + This instance has been disposed. + A task representing the asynchronous flush operation. + + + Resets the internal state of this instance so that it can be reused. + This instance has been disposed. + + + Resets the internal state of this instance so that it can be reused with a new instance of . + The destination for writing JSON text. + + is . + This instance has been disposed. + + + Resets the internal state of this instance so that it can be reused with a new instance of . + The destination for writing JSON text. + + is . + This instance has been disposed. + + + Writes the property name and raw bytes value (as a Base64 encoded JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded name of the property to write. + The binary data to write as Base64 encoded text. + The specified property name or value is too large. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the property name and raw bytes value (as a Base64 encoded JSON string) as part of a name/value pair of a JSON object. + The property name of the JSON object to be transcoded and written as UTF-8. + The binary data to write as Base64 encoded text. + The specified property name or value is too large. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the property name and raw bytes value (as a Base64 encoded JSON string) as part of a name/value pair of a JSON object. + The property name of the JSON object to be transcoded and written as UTF-8. + The binary data to write as Base64 encoded text. + The specified property name or value is too large. + Validation is enabled, and this method would result in writing invalid JSON. + The parameter is . + + + Writes the pre-encoded property name and raw bytes value (as a Base64 encoded JSON string) as part of a name/value pair of a JSON object. + The JSON-encoded name of the property to write. + The binary data to write as Base64 encoded text. + The specified value is too large. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the raw bytes value as a Base64 encoded JSON string as an element of a JSON array. + The binary data to be written as a Base64 encoded JSON string element of a JSON array. + The specified value is too large. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes a property name specified as a read-only span of bytes and a value (as a JSON literal true or false) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON literal true or false as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON literal true or false) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON literal true or false as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a property name specified as a string and a value (as a JSON literal true or false) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON literal true or false as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the operation would result in writing invalid JSON. + The parameter is . + + + Writes the pre-encoded property name and value (as a JSON literal true or false) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON literal true or false as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes a value (as a JSON literal true or false) as an element of a JSON array. + The value to be written as a JSON literal true or false as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a UTF-8 text value as a JSON comment. + The UTF-8 encoded value to be written as a JSON comment within /*..*/. + The specified value is too large. + +-or- + + contains a comment delimiter (that is, */). + + + Writes a UTF-16 text value as a JSON comment. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON comment within /*..*/. + The specified value is too large. + +-or- + + contains a comment delimiter (that is, */). + + + Writes a string text value as a JSON comment. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON comment within /*..*/. + The specified value is too large. + +-or- + + contains a comment delimiter (that is, */). + The parameter is . + + + Writes the end of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes the end of a JSON object. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a property name specified as a read-only span of bytes and the JSON literal null as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and the JSON literal null as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a string and the JSON literal null as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes the pre-encoded property name and the JSON literal null as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the JSON literal null as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a property name specified as a read-only span of bytes and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only span of bytes and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only span of bytes and an value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only span of bytes and an value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only span of bytes and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only span of bytes and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only span of bytes and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and an value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and an value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a string and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and an value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and an value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a value (as a JSON number) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON number) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON number as part of the name/value pair. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes a value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes an value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes an value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a value (as a JSON number) as an element of a JSON array. + The value to be written as a JSON number as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes the UTF-8 property name (as a JSON string) as the first part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The specified property name is too large. + Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the property name (as a JSON string) as the first part of a name/value pair of a JSON object. + The property name of the JSON object to be transcoded and written as UTF-8. + The specified property name is too large. + Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the property name (as a JSON string) as the first part of a name/value pair of a JSON object. + The property name of the JSON object to be transcoded and written as UTF-8. + The specified property name is too large. + Validation is enabled, and this write operation would produce invalid JSON. + + is . + + + Writes the pre-encoded property name (as a JSON string) as the first part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the input as JSON content. It is expected that the input content is a single complete JSON value. + The raw JSON content to write. + + to validate if the input is an RFC 8259-compliant JSON payload; to skip validation. + The length of the input is zero or equal to Int32.MaxValue. + + is , and the input + is not a valid, complete, single JSON value according to the JSON RFC + or the input JSON exceeds a recursive depth of 64. + + + Writes the input as JSON content. It is expected that the input content is a single complete JSON value. + The raw JSON content to write. + + to validate if the input is an RFC 8259-compliant JSON payload; otherwise. + The length of the input is zero or equal to Int32.MaxValue. + + is , and the input is not a valid, complete, single JSON value according to the JSON RFC, or the input JSON exceeds a recursive depth of 64. + + + Writes the input as JSON content. It is expected that the input content is a single complete JSON value. + The raw JSON content to write. + + to validate if the input is an RFC 8259-compliant JSON payload; otherwise. + The length of the input is zero or greater than 715,827,882 (Int32.MaxValue / 3). + + is , and the input is not a valid, complete, single JSON value according to the JSON RFC, or the input JSON exceeds a recursive depth of 64. + + + Writes the input as JSON content. It is expected that the input content is a single complete JSON value. + The raw JSON content to write. + + to validate if the input is an RFC 8259-compliant JSON payload; otherwise. + + is . + The length of the input is zero or greater than 715,827,882 (Int32.MaxValue / 3). + + is , and the input is not a valid, complete, single JSON value according to the JSON RFC, or the input JSON exceeds a recursive depth of 64. + + + Writes the beginning of a JSON array. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the beginning of a JSON array with a property name specified as a read-only span of bytes as the key. + The UTF-8 encoded property name of the JSON array to be written. + The specified property name is too large. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the beginning of a JSON array with a property name specified as a read-only character span as the key. + The UTF-16 encoded property name of the JSON array to be transcoded and written as UTF-8. + The specified property name is too large. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the beginning of a JSON array with a property name specified as a string as the key. + The UTF-16 encoded property name of the JSON array to be transcoded and written as UTF-8. + The specified property name is too large. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + The parameter is . + + + Writes the beginning of a JSON array with a pre-encoded property name as the key. + The JSON encoded property name of the JSON array to be transcoded and written as UTF-8. + The depth of the JSON has exceeded the maximum depth of 1,000. + +-or- + +Validation is enabled, and this method would result in writing invalid JSON. + + + Writes the beginning of a JSON object. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes the beginning of a JSON object with a property name specified as a read-only span of bytes as the key. + The UTF-8 encoded property name of the JSON object to be written. + The specified property name is too large. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the beginning of a JSON object with a property name specified as a read-only character span as the key. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The specified property name is too large. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + + + Writes the beginning of a JSON object with a property name specified as a string as the key. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The specified property name is too large. + The depth of the JSON exceeds the maximum depth of 1,000. + +-or- + +Validation is enabled, and this write operation would produce invalid JSON. + The parameter is . + + + Writes the beginning of a JSON object with a pre-encoded property name as the key. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The depth of the JSON has exceeded the maximum depth of 1,000. + +-or- + +Validation is enabled, and this method would result in writing invalid JSON. + + + Writes a UTF-8 property name and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-8 property name and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-8 property name and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-8 property name and UTF-8 text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The UTF-8 encoded value to be written as a JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-8 property name and UTF-16 text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-8 property name and string text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the UTF-8 property name and pre-encoded value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-8 encoded property name of the JSON object to be written. + The JSON encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and this method would result in writing invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a read-only character span and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-16 property name and UTF-8 text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-8 encoded value to be written as a JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-16 property name and UTF-16 text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-16 property name and string text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the property name and pre-encoded value (as a JSON string) as part of a name/value pair of a JSON object. + The property name of the JSON object to be transcoded and written as UTF-8. + The JSON encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a property name specified as a string and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a UTF-8 text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-8 encoded value to be written as a JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a UTF-16 text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes a property name specified as a string and a string text value (as a JSON string) as part of a name/value pair of a JSON object. + The UTF-16 encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name or value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes the property name and pre-encoded value (as a JSON string) as part of a name/value pair of a JSON object. + The property name of the JSON object to be transcoded and written as UTF-8. + The JSON encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified property name is too large. + Validation is enabled, and the write operation would produce invalid JSON. + The parameter is . + + + Writes the pre-encoded property name and value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded property name and value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a JSON string as part of the name/value pair. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded property name and UTF-8 text value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The UTF-8 encoded value to be written as a JSON string as part of the name/value pair. + The specified value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded property name and text value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded property name and string text value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + The specified value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded property name and pre-encoded value (as a JSON string) as part of a name/value pair of a JSON object. + The JSON encoded property name of the JSON object to be transcoded and written as UTF-8. + The JSON encoded value to be written as a UTF-8 transcoded JSON string as part of the name/value pair. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a value (as a JSON string) as an element of a JSON array. + The value to be written as a JSON string as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a value (as a JSON string) as an element of a JSON array. + The value to be written as a JSON string as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a value (as a JSON string) as an element of a JSON array. + The value to be written as a JSON string as an element of a JSON array. + Validation is enabled, and the operation would result in writing invalid JSON. + + + Writes a UTF-8 text value (as a JSON string) as an element of a JSON array. + The UTF-8 encoded value to be written as a JSON string element of a JSON array. + The specified value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a UTF-16 text value (as a JSON string) as an element of a JSON array. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string element of a JSON array. + The specified value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes a string text value (as a JSON string) as an element of a JSON array. + The UTF-16 encoded value to be written as a UTF-8 transcoded JSON string element of a JSON array. + The specified value is too large. + Validation is enabled, and the write operation would produce invalid JSON. + + + Writes the pre-encoded text value (as a JSON string) as an element of a JSON array. + The JSON encoded value to be written as a UTF-8 transcoded JSON string element of a JSON array. + Validation is enabled, and the write operation would produce invalid JSON. + + + Gets the total number of bytes committed to the output by the current instance so far. + The total number of bytes committed to the output by the so far. + + + Gets the number of bytes written by the so far that have not yet been flushed to the output and committed. + The number of bytes written so far by the that have not yet been flushed to the output and committed. + + + Gets the depth of the current token. + The depth of the current token. + + + Gets the custom behavior when writing JSON using this instance, which indicates whether to format the output while writing, whether to skip structural JSON validation, and which characters to escape. + The custom behavior of this instance of the writer for formatting, validating, and escaping. + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.Threading.Tasks.Extensions.dll b/TS SE Tool/libs/System.Threading.Tasks.Extensions.dll new file mode 100644 index 00000000..eeec9285 Binary files /dev/null and b/TS SE Tool/libs/System.Threading.Tasks.Extensions.dll differ diff --git a/TS SE Tool/libs/System.Threading.Tasks.Extensions.xml b/TS SE Tool/libs/System.Threading.Tasks.Extensions.xml new file mode 100644 index 00000000..5e02a99d --- /dev/null +++ b/TS SE Tool/libs/System.Threading.Tasks.Extensions.xml @@ -0,0 +1,166 @@ + + + System.Threading.Tasks.Extensions + + + + + + + + + + + + + + + + + + + Provides a value type that wraps a and a TResult, only one of which is used. + The result. + + + Initializes a new instance of the class using the supplied task that represents the operation. + The task. + The task argument is null. + + + Initializes a new instance of the class using the supplied result of a successful operation. + The result. + + + Retrieves a object that represents this . + The object that is wrapped in this if one exists, or a new object that represents the result. + + + Configures an awaiter for this value. + true to attempt to marshal the continuation back to the captured context; otherwise, false. + The configured awaiter. + + + Creates a method builder for use with an async method. + The created builder. + + + Determines whether the specified object is equal to the current object. + The object to compare with the current object. + true if the specified object is equal to the current object; otherwise, false. + + + Determines whether the specified object is equal to the current object. + The object to compare with the current object. + true if the specified object is equal to the current object; otherwise, false. + + + Creates an awaiter for this value. + The awaiter. + + + Returns the hash code for this instance. + The hash code for the current object. + + + Gets a value that indicates whether this object represents a canceled operation. + true if this object represents a canceled operation; otherwise, false. + + + Gets a value that indicates whether this object represents a completed operation. + true if this object represents a completed operation; otherwise, false. + + + Gets a value that indicates whether this object represents a successfully completed operation. + true if this object represents a successfully completed operation; otherwise, false. + + + Gets a value that indicates whether this object represents a failed operation. + true if this object represents a failed operation; otherwise, false. + + + Compares two values for equality. + The first value to compare. + The second value to compare. + true if the two values are equal; otherwise, false. + + + Determines whether two values are unequal. + The first value to compare. + The seconed value to compare. + true if the two values are not equal; otherwise, false. + + + Gets the result. + The result. + + + Returns a string that represents the current object. + A string that represents the current object. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TS SE Tool/libs/System.ValueTuple.dll b/TS SE Tool/libs/System.ValueTuple.dll new file mode 100644 index 00000000..4ce28fde Binary files /dev/null and b/TS SE Tool/libs/System.ValueTuple.dll differ diff --git a/TS SE Tool/libs/System.ValueTuple.xml b/TS SE Tool/libs/System.ValueTuple.xml new file mode 100644 index 00000000..1151832f --- /dev/null +++ b/TS SE Tool/libs/System.ValueTuple.xml @@ -0,0 +1,8 @@ + + + + System.ValueTuple + + + + diff --git a/TS SE Tool/libs/Translation.info b/TS SE Tool/libs/Translation.info new file mode 100644 index 00000000..7e0daa10 --- /dev/null +++ b/TS SE Tool/libs/Translation.info @@ -0,0 +1,15 @@ +Languages included in package: +de-DE - Deutsch - Translated by RattleSnK (UI) +en-US - English - Translated by LIPtoH (All) +es-ES - Español - Translated by tHernandez (UI) +fr-FR - Français - Translated by Bruno Gaudry (UI) +it-IT - Italiano - Translated by Ilmondoemio (UI, Countries and Cities) +ja-JP - 日本語 - Translated by k-es (UI, Countries, Cities and Cargo) +ko-KR - 한국어(대한민국) - Translated by tjrl81 (UI, Countries and Cities) +nl-NL - Nederlands - Translated by tec09 (UI, Countries and Cities) +pl-PL - Polski - Translated by jepi789 (UI, Countries and Cities) +pt-BR - Português (Brasil) - Translated by 3L0N (All) +pt-PT - Português (Portugal) - Translated by The Rock (UI) +ru-RU - Русский - Translated by LIPtoH (All) +tr-TR - Türkçe - Translated by Kimmer (UI, Countries) +zh-CN - 中文 (Simplified) - Translated by All Man Are Bros, Antileech (UI, Countries, Cities and Cargo) \ No newline at end of file diff --git a/TS SE Tool/libs/aa-ER/TS SE Tool.resources.dll b/TS SE Tool/libs/aa-ER/TS SE Tool.resources.dll new file mode 100644 index 00000000..5b76d633 Binary files /dev/null and b/TS SE Tool/libs/aa-ER/TS SE Tool.resources.dll differ diff --git a/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest b/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest new file mode 100644 index 00000000..47bd4a04 --- /dev/null +++ b/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest @@ -0,0 +1,6 @@ + + + + + Vy8CgQgbu3qH5JHTK0op4kR8114= QTJu3Gttpt8hhCktGelNeXj4Yp8= 1ruqF7/L+m1tqnJVscaOtNRNHIE= + \ No newline at end of file diff --git a/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/README_ENU.txt b/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/README_ENU.txt new file mode 100644 index 00000000..fc38b368 Binary files /dev/null and b/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/README_ENU.txt differ diff --git a/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/msvcr90.dll b/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/msvcr90.dll new file mode 100644 index 00000000..c95e1bf2 Binary files /dev/null and b/TS SE Tool/libs/amd64/Microsoft.VC90.CRT/msvcr90.dll differ diff --git a/TS SE Tool/libs/amd64/sqlceca40.dll b/TS SE Tool/libs/amd64/sqlceca40.dll new file mode 100644 index 00000000..d5d4c204 Binary files /dev/null and b/TS SE Tool/libs/amd64/sqlceca40.dll differ diff --git a/TS SE Tool/libs/amd64/sqlcecompact40.dll b/TS SE Tool/libs/amd64/sqlcecompact40.dll new file mode 100644 index 00000000..ed061ade Binary files /dev/null and b/TS SE Tool/libs/amd64/sqlcecompact40.dll differ diff --git a/TS SE Tool/libs/amd64/sqlceer40EN.dll b/TS SE Tool/libs/amd64/sqlceer40EN.dll new file mode 100644 index 00000000..e19eed9b Binary files /dev/null and b/TS SE Tool/libs/amd64/sqlceer40EN.dll differ diff --git a/TS SE Tool/libs/amd64/sqlceme40.dll b/TS SE Tool/libs/amd64/sqlceme40.dll new file mode 100644 index 00000000..c67fc9e6 Binary files /dev/null and b/TS SE Tool/libs/amd64/sqlceme40.dll differ diff --git a/TS SE Tool/libs/amd64/sqlceqp40.dll b/TS SE Tool/libs/amd64/sqlceqp40.dll new file mode 100644 index 00000000..df444033 Binary files /dev/null and b/TS SE Tool/libs/amd64/sqlceqp40.dll differ diff --git a/TS SE Tool/libs/amd64/sqlcese40.dll b/TS SE Tool/libs/amd64/sqlcese40.dll new file mode 100644 index 00000000..af2de5ec Binary files /dev/null and b/TS SE Tool/libs/amd64/sqlcese40.dll differ diff --git a/TS SE Tool/libs/fileData.txt b/TS SE Tool/libs/fileData.txt new file mode 100644 index 00000000..b58195d5 --- /dev/null +++ b/TS SE Tool/libs/fileData.txt @@ -0,0 +1 @@ +TS.SE.Tool.0.3.11.0.zip 90F40CCB5F06ABC94C85FEF88C921EFFAE34DA83BBF663C22E3088C5CF448C79B1B2C527183E793685D6EF4D51F2B96EAA4FF67F15B2CC9F9564AAD4FB54474C \ No newline at end of file diff --git a/TS SE Tool/packages.config b/TS SE Tool/packages.config index 02fed02f..bde3f40c 100644 --- a/TS SE Tool/packages.config +++ b/TS SE Tool/packages.config @@ -1,11 +1,21 @@  + + + + + + + + + + \ No newline at end of file diff --git a/TS SE Tool/updater/Error b/TS SE Tool/updater/Error new file mode 100644 index 00000000..e69de29b diff --git a/TS SE Tool/updater/updater.exe b/TS SE Tool/updater/updater.exe new file mode 100644 index 00000000..0fa122df Binary files /dev/null and b/TS SE Tool/updater/updater.exe differ diff --git a/TS SE Tool/updater/updater.exe.config b/TS SE Tool/updater/updater.exe.config new file mode 100644 index 00000000..56efbc7b --- /dev/null +++ b/TS SE Tool/updater/updater.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file