From e194ff983bfd29a54c1b648bbc9019da7ee63793 Mon Sep 17 00:00:00 2001 From: hbeham Date: Sun, 31 Mar 2013 14:09:38 +0200 Subject: [PATCH] initial import --- .gitignore | 29 + ChanSort.Api/ChanSort.Api.csproj | 124 + ChanSort.Api/Controller/ChlFileSerializer.cs | 98 + ChanSort.Api/Controller/CsvFileSerializer.cs | 127 + ChanSort.Api/Controller/Editor.cs | 276 ++ ChanSort.Api/Controller/ISerializerPlugin.cs | 21 + ChanSort.Api/Controller/SerializerBase.cs | 38 + ChanSort.Api/Lookup.csv | 476 ++++ ChanSort.Api/Model/ChannelInfo.cs | 205 ++ ChanSort.Api/Model/ChannelList.cs | 176 ++ ChanSort.Api/Model/DataRoot.cs | 82 + ChanSort.Api/Model/Enums.cs | 36 + ChanSort.Api/Model/LookupData.cs | 198 ++ ChanSort.Api/Model/NetworkInfo.cs | 9 + ChanSort.Api/Model/Satellite.cs | 25 + ChanSort.Api/Model/Transponder.cs | 22 + ChanSort.Api/Properties/AssemblyInfo.cs | 36 + ChanSort.Api/Resources.Designer.cs | 81 + ChanSort.Api/Resources.de.Designer.cs | 0 ChanSort.Api/Resources.de.resx | 126 + ChanSort.Api/Resources.resx | 126 + ChanSort.Api/Utils/ChannelMappingBase.cs | 151 ++ ChanSort.Api/Utils/Crc32.cs | 60 + ChanSort.Api/Utils/CsvFile.cs | 44 + ChanSort.Api/Utils/DataMapping.cs | 204 ++ ChanSort.Api/Utils/DvbChannelMappingBase.cs | 125 + ChanSort.Api/Utils/DvbStringDecoder.cs | 196 ++ ChanSort.Api/Utils/IniFile.cs | 164 ++ ChanSort.Api/Utils/MappingPool.cs | 33 + ChanSort.Api/Utils/Tools.cs | 27 + .../AnalogChannelDataMapping.cs | 72 + .../ChanSort.Plugin.ScmFile.csproj | 98 + .../ChanSort.Plugin.ScmFile.ini | 334 +++ .../DvbCtChannelDataMapping.cs | 63 + .../DvbSChannelDataMapping.cs | 83 + ChanSort.Plugin.ScmFile/ModelConstants.cs | 34 + .../Properties/AssemblyInfo.cs | 36 + ChanSort.Plugin.ScmFile/ScmSerializer.cs | 740 +++++ .../ScmSerializerPlugin.cs | 15 + ChanSort.Plugin.ScmFile/ScmStructures.cs | 97 + .../ActChannelDataMapping.cs | 219 ++ .../ChanSort.Plugin.TllFile.csproj | 138 + .../ChanSort.Plugin.TllFile.ini | 331 +++ ChanSort.Plugin.TllFile/ChannelDataMapping.cs | 23 + .../DvbsChannelDataMapping.cs | 197 ++ .../FirmwareDataMapping.cs | 64 + ChanSort.Plugin.TllFile/ModelConstants.cs | 49 + .../Properties/AssemblyInfo.cs | 38 + .../Properties/licenses.licx | 4 + ChanSort.Plugin.TllFile/Resource.Designer.cs | 117 + .../Resource.de.Designer.cs | 0 ChanSort.Plugin.TllFile/Resource.de.resx | 138 + ChanSort.Plugin.TllFile/Resource.resx | 119 + ChanSort.Plugin.TllFile/TllFileSerializer.cs | 1001 +++++++ .../TllFileSerializer.sql.cs | 208 ++ .../TllFileSerializerPlugin.cs | 185 ++ ChanSort.Plugin.TllFile/TllStructures.cs | 169 ++ .../TvSettingsForm.Designer.cs | 223 ++ ChanSort.Plugin.TllFile/TvSettingsForm.cs | 73 + .../TvSettingsForm.de.resx | 325 +++ ChanSort.Plugin.TllFile/TvSettingsForm.resx | 569 ++++ ChanSort.Ui/AboutForm.Designer.cs | 241 ++ ChanSort.Ui/AboutForm.cs | 48 + ChanSort.Ui/AboutForm.de.resx | 164 ++ ChanSort.Ui/AboutForm.resx | 546 ++++ ChanSort.Ui/ChanSort.Ui.csproj | 215 ++ ChanSort.Ui/CharsetForm.Designer.cs | 171 ++ ChanSort.Ui/CharsetForm.cs | 100 + ChanSort.Ui/CharsetForm.de.resx | 132 + ChanSort.Ui/CharsetForm.resx | 367 +++ ChanSort.Ui/InfoBox.Designer.cs | 91 + ChanSort.Ui/InfoBox.cs | 35 + ChanSort.Ui/InfoBox.resx | 120 + ChanSort.Ui/MainForm.Designer.cs | 1481 ++++++++++ ChanSort.Ui/MainForm.cs | 1712 ++++++++++++ ChanSort.Ui/MainForm.de.resx | 693 +++++ ChanSort.Ui/MainForm.resx | 2375 +++++++++++++++++ ChanSort.Ui/Program.cs | 22 + ChanSort.Ui/Properties/AssemblyInfo.cs | 38 + .../DataSources/ChannelInfo.datasource | 10 + .../System.Text.EncodingInfo.datasource | 10 + ChanSort.Ui/Properties/Resources.Designer.cs | 337 +++ .../Properties/Resources.de.Designer.cs | 0 ChanSort.Ui/Properties/Resources.de.resx | 230 ++ ChanSort.Ui/Properties/Resources.resx | 229 ++ ChanSort.Ui/Properties/Settings.Designer.cs | 266 ++ ChanSort.Ui/Properties/Settings.settings | 66 + ChanSort.Ui/Properties/licenses.licx | 7 + ChanSort.Ui/Resources/Donate.bmp | Bin 0 -> 3382 bytes ChanSort.Ui/Resources/btn_donateCC_LG.gif | Bin 0 -> 2858 bytes ChanSort.Ui/Resources/btn_donateCC_LG_de.gif | Bin 0 -> 2378 bytes ChanSort.Ui/Resources/paypal-button.txt | 19 + ChanSort.Ui/Settings.cs | 28 + ChanSort.Ui/WaitForm1.Designer.cs | 80 + ChanSort.Ui/WaitForm1.cs | 37 + ChanSort.Ui/WaitForm1.de.resx | 126 + ChanSort.Ui/WaitForm1.resx | 256 ++ ChanSort.Ui/app.config | 114 + ChanSort.Ui/app.ico | Bin 0 -> 99678 bytes ChanSort.Ui/icons/flag_austria.png | Bin 0 -> 541 bytes ChanSort.Ui/icons/flag_germany.png | Bin 0 -> 619 bytes ChanSort.Ui/icons/flag_great_britain.png | Bin 0 -> 801 bytes ChanSort.sdf | Bin 0 -> 2183168 bytes ChanSort.sln | 53 + DLL/ICSharpCode.SharpZipLib.dll | Bin 0 -> 200704 bytes .../Properties/AssemblyInfo.cs | 35 + .../Test.Plugin.TllFile.csproj | 93 + Test.Plugin.TllFile/UnitTest1.cs | 197 ++ makeDistribZip.cmd | 35 + readme.txt | 226 ++ 110 files changed, 20082 insertions(+) create mode 100644 .gitignore create mode 100644 ChanSort.Api/ChanSort.Api.csproj create mode 100644 ChanSort.Api/Controller/ChlFileSerializer.cs create mode 100644 ChanSort.Api/Controller/CsvFileSerializer.cs create mode 100644 ChanSort.Api/Controller/Editor.cs create mode 100644 ChanSort.Api/Controller/ISerializerPlugin.cs create mode 100644 ChanSort.Api/Controller/SerializerBase.cs create mode 100644 ChanSort.Api/Lookup.csv create mode 100644 ChanSort.Api/Model/ChannelInfo.cs create mode 100644 ChanSort.Api/Model/ChannelList.cs create mode 100644 ChanSort.Api/Model/DataRoot.cs create mode 100644 ChanSort.Api/Model/Enums.cs create mode 100644 ChanSort.Api/Model/LookupData.cs create mode 100644 ChanSort.Api/Model/NetworkInfo.cs create mode 100644 ChanSort.Api/Model/Satellite.cs create mode 100644 ChanSort.Api/Model/Transponder.cs create mode 100644 ChanSort.Api/Properties/AssemblyInfo.cs create mode 100644 ChanSort.Api/Resources.Designer.cs create mode 100644 ChanSort.Api/Resources.de.Designer.cs create mode 100644 ChanSort.Api/Resources.de.resx create mode 100644 ChanSort.Api/Resources.resx create mode 100644 ChanSort.Api/Utils/ChannelMappingBase.cs create mode 100644 ChanSort.Api/Utils/Crc32.cs create mode 100644 ChanSort.Api/Utils/CsvFile.cs create mode 100644 ChanSort.Api/Utils/DataMapping.cs create mode 100644 ChanSort.Api/Utils/DvbChannelMappingBase.cs create mode 100644 ChanSort.Api/Utils/DvbStringDecoder.cs create mode 100644 ChanSort.Api/Utils/IniFile.cs create mode 100644 ChanSort.Api/Utils/MappingPool.cs create mode 100644 ChanSort.Api/Utils/Tools.cs create mode 100644 ChanSort.Plugin.ScmFile/AnalogChannelDataMapping.cs create mode 100644 ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.csproj create mode 100644 ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.ini create mode 100644 ChanSort.Plugin.ScmFile/DvbCtChannelDataMapping.cs create mode 100644 ChanSort.Plugin.ScmFile/DvbSChannelDataMapping.cs create mode 100644 ChanSort.Plugin.ScmFile/ModelConstants.cs create mode 100644 ChanSort.Plugin.ScmFile/Properties/AssemblyInfo.cs create mode 100644 ChanSort.Plugin.ScmFile/ScmSerializer.cs create mode 100644 ChanSort.Plugin.ScmFile/ScmSerializerPlugin.cs create mode 100644 ChanSort.Plugin.ScmFile/ScmStructures.cs create mode 100644 ChanSort.Plugin.TllFile/ActChannelDataMapping.cs create mode 100644 ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.csproj create mode 100644 ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.ini create mode 100644 ChanSort.Plugin.TllFile/ChannelDataMapping.cs create mode 100644 ChanSort.Plugin.TllFile/DvbsChannelDataMapping.cs create mode 100644 ChanSort.Plugin.TllFile/FirmwareDataMapping.cs create mode 100644 ChanSort.Plugin.TllFile/ModelConstants.cs create mode 100644 ChanSort.Plugin.TllFile/Properties/AssemblyInfo.cs create mode 100644 ChanSort.Plugin.TllFile/Properties/licenses.licx create mode 100644 ChanSort.Plugin.TllFile/Resource.Designer.cs create mode 100644 ChanSort.Plugin.TllFile/Resource.de.Designer.cs create mode 100644 ChanSort.Plugin.TllFile/Resource.de.resx create mode 100644 ChanSort.Plugin.TllFile/Resource.resx create mode 100644 ChanSort.Plugin.TllFile/TllFileSerializer.cs create mode 100644 ChanSort.Plugin.TllFile/TllFileSerializer.sql.cs create mode 100644 ChanSort.Plugin.TllFile/TllFileSerializerPlugin.cs create mode 100644 ChanSort.Plugin.TllFile/TllStructures.cs create mode 100644 ChanSort.Plugin.TllFile/TvSettingsForm.Designer.cs create mode 100644 ChanSort.Plugin.TllFile/TvSettingsForm.cs create mode 100644 ChanSort.Plugin.TllFile/TvSettingsForm.de.resx create mode 100644 ChanSort.Plugin.TllFile/TvSettingsForm.resx create mode 100644 ChanSort.Ui/AboutForm.Designer.cs create mode 100644 ChanSort.Ui/AboutForm.cs create mode 100644 ChanSort.Ui/AboutForm.de.resx create mode 100644 ChanSort.Ui/AboutForm.resx create mode 100644 ChanSort.Ui/ChanSort.Ui.csproj create mode 100644 ChanSort.Ui/CharsetForm.Designer.cs create mode 100644 ChanSort.Ui/CharsetForm.cs create mode 100644 ChanSort.Ui/CharsetForm.de.resx create mode 100644 ChanSort.Ui/CharsetForm.resx create mode 100644 ChanSort.Ui/InfoBox.Designer.cs create mode 100644 ChanSort.Ui/InfoBox.cs create mode 100644 ChanSort.Ui/InfoBox.resx create mode 100644 ChanSort.Ui/MainForm.Designer.cs create mode 100644 ChanSort.Ui/MainForm.cs create mode 100644 ChanSort.Ui/MainForm.de.resx create mode 100644 ChanSort.Ui/MainForm.resx create mode 100644 ChanSort.Ui/Program.cs create mode 100644 ChanSort.Ui/Properties/AssemblyInfo.cs create mode 100644 ChanSort.Ui/Properties/DataSources/ChannelInfo.datasource create mode 100644 ChanSort.Ui/Properties/DataSources/System.Text.EncodingInfo.datasource create mode 100644 ChanSort.Ui/Properties/Resources.Designer.cs create mode 100644 ChanSort.Ui/Properties/Resources.de.Designer.cs create mode 100644 ChanSort.Ui/Properties/Resources.de.resx create mode 100644 ChanSort.Ui/Properties/Resources.resx create mode 100644 ChanSort.Ui/Properties/Settings.Designer.cs create mode 100644 ChanSort.Ui/Properties/Settings.settings create mode 100644 ChanSort.Ui/Properties/licenses.licx create mode 100644 ChanSort.Ui/Resources/Donate.bmp create mode 100644 ChanSort.Ui/Resources/btn_donateCC_LG.gif create mode 100644 ChanSort.Ui/Resources/btn_donateCC_LG_de.gif create mode 100644 ChanSort.Ui/Resources/paypal-button.txt create mode 100644 ChanSort.Ui/Settings.cs create mode 100644 ChanSort.Ui/WaitForm1.Designer.cs create mode 100644 ChanSort.Ui/WaitForm1.cs create mode 100644 ChanSort.Ui/WaitForm1.de.resx create mode 100644 ChanSort.Ui/WaitForm1.resx create mode 100644 ChanSort.Ui/app.config create mode 100644 ChanSort.Ui/app.ico create mode 100644 ChanSort.Ui/icons/flag_austria.png create mode 100644 ChanSort.Ui/icons/flag_germany.png create mode 100644 ChanSort.Ui/icons/flag_great_britain.png create mode 100644 ChanSort.sdf create mode 100644 ChanSort.sln create mode 100644 DLL/ICSharpCode.SharpZipLib.dll create mode 100644 Test.Plugin.TllFile/Properties/AssemblyInfo.cs create mode 100644 Test.Plugin.TllFile/Test.Plugin.TllFile.csproj create mode 100644 Test.Plugin.TllFile/UnitTest1.cs create mode 100644 makeDistribZip.cmd create mode 100644 readme.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0bc8230 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ + +#ignore thumbnails created by windows +Thumbs.db +#Ignore files build by Visual Studio +*.obj +*.exe +*.pdb +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.lib +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ +[Tt]est[Rr]esult* diff --git a/ChanSort.Api/ChanSort.Api.csproj b/ChanSort.Api/ChanSort.Api.csproj new file mode 100644 index 0000000..b6b6db8 --- /dev/null +++ b/ChanSort.Api/ChanSort.Api.csproj @@ -0,0 +1,124 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {DCCFFA08-472B-4D17-BB90-8F513FC01392} + Library + Properties + ChanSort.Api + ChanSort.Api + v3.5 + 512 + Client + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + ..\Debug\ + DEBUG;TRACE + full + x86 + prompt + true + true + true + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + true + true + false + + + + + + + + + + + + + + + + + + + + + + True + True + Resources.de.resx + + + True + True + Resources.resx + + + + + + + + + + + + + + + + + + Always + + + + + ResXFileCodeGenerator + Resources.de.Designer.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + \ No newline at end of file diff --git a/ChanSort.Api/Controller/ChlFileSerializer.cs b/ChanSort.Api/Controller/ChlFileSerializer.cs new file mode 100644 index 0000000..04b3bf4 --- /dev/null +++ b/ChanSort.Api/Controller/ChlFileSerializer.cs @@ -0,0 +1,98 @@ +using System.IO; +using System.Linq; + +namespace ChanSort.Api +{ + /// + /// Reader for SamToolBox reference lists (*.chl) + /// The file has no header, each line represents a channel and fields are separated by semi-colon: + /// Number;Channel Name[;Transponder Index] + /// + public class ChlFileSerializer + { + private static readonly char[] Separators = new[] { ';' }; + private readonly System.Text.StringBuilder warnings = new System.Text.StringBuilder(); + private int lineNumber; + private DataRoot dataRoot; + private ChannelList channelList; + + #region Load() + public string Load(string fileName, DataRoot root, ChannelList list) + { + this.lineNumber = 0; + this.dataRoot = root; + this.channelList = list; + this.warnings.Remove(0, this.warnings.Length); + + foreach (var channel in this.channelList.Channels) + channel.NewProgramNr = 0; + + using (var stream = new StreamReader(fileName, System.Text.Encoding.Default)) + { + ReadChannelsFromStream(stream); + } + return this.warnings.ToString(); + } + #endregion + + #region ReadChannelsFromStream() + + private void ReadChannelsFromStream(TextReader stream) + { + string line; + while ((line = stream.ReadLine()) != null) + { + ++lineNumber; + ParseChannel(line); + } + } + + #endregion + + #region ParseChannel() + + private void ParseChannel(string line) + { + var parts = line.Split(Separators); + if (parts.Length < 2) return; + int progNr; + Transponder transponder = null; + if (!int.TryParse(parts[0], out progNr)) return; + if (parts.Length >= 3) + { + int transponderIndex; + if (int.TryParse(parts[2], out transponderIndex)) + { + transponder = this.dataRoot.Transponder.TryGet(transponderIndex); + if (transponder == null) + warnings.AppendFormat("Line #{0,4}: invalid transponder index {1}\r\n", this.lineNumber, transponderIndex); + } + } + + string name = parts[1].Replace("\"", ""); + if (name.Trim().Length == 0) + return; + + int found = 0; + var channels = channelList.GetChannelByName(name); + if (transponder != null) + channels = channels.Where(chan => chan.Transponder == transponder); + + foreach(var channel in channels) + { + if (channel.NewProgramNr != 0) + continue; + ++found; + if (found > 1) + break; + channel.NewProgramNr = progNr; + } + + if (found == 0) + this.warnings.AppendFormat("Line {0,4}: Pr# {1,4}, channel '{2}' could not be found\r\n", this.lineNumber, progNr, name); + if (found > 1) + this.warnings.AppendFormat("Line {0,4}: Pr# {1,4}, channel '{2}' found multiple times\r\n", this.lineNumber, progNr, name); + } + #endregion + } +} diff --git a/ChanSort.Api/Controller/CsvFileSerializer.cs b/ChanSort.Api/Controller/CsvFileSerializer.cs new file mode 100644 index 0000000..f36e021 --- /dev/null +++ b/ChanSort.Api/Controller/CsvFileSerializer.cs @@ -0,0 +1,127 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace ChanSort.Api +{ + public class CsvFileSerializer + { + private static readonly char[] Separators = new[] { ',', ';', '\t' }; + + #region Load() + public void Load(string fileName, DataRoot dataRoot) + { + foreach (var list in dataRoot.ChannelLists) + { + foreach (var channel in list.Channels) + channel.NewProgramNr = 0; + } + + using (var stream = new StreamReader(fileName)) + { + ReadChannelsFromStream(stream, dataRoot); + } + } + #endregion + + #region ReadChannelsFromStream() + + public static void ReadChannelsFromStream(TextReader stream, DataRoot dataRoot) + { + string line; + while ((line = stream.ReadLine()) != null) + { + ParseChannel(line, dataRoot); + } + } + + #endregion + + #region ParseChannel() + + private static void ParseChannel(string line, DataRoot dataRoot) + { + var parts = line.Split(Separators); + if (parts.Length < 5) return; + int index, slot, transportStreamId; + if (!int.TryParse(parts[0], out index)) return; + if (!int.TryParse(parts[1], out slot)) return; + if (!int.TryParse(parts[2], out transportStreamId)) return; + string uid = parts[3].Replace("\"", ""); + SignalSource signalSource; + switch (uid[0]) + { + case 'S': signalSource = SignalSource.DvbS; break; + case 'C': signalSource = SignalSource.DvbCT; break; + case 'A': signalSource = SignalSource.AnalogCT; break; + case 'H': signalSource = SignalSource.HdPlusD; break; + default: return; + } + var signalType = slot < 0x4000 ? SignalType.Tv : SignalType.Radio; + var channelList = dataRoot.GetChannelList(signalSource, signalType, true); + string name = parts[4].Replace("\"", ""); + IEnumerable channels = FindChannels(channelList, name, uid); + var channel = channels == null ? null : channels.FirstOrDefault(c => c.NewProgramNr == 0); + if (channel != null) + channel.NewProgramNr = slot & 0x3FFF; + else + { + channel = new ChannelInfo(signalSource, signalType, uid, slot, name); + channel.TransportStreamId = transportStreamId; + channelList.AddChannel(channel); + } + } + #endregion + + #region FindChannels() + private static IEnumerable FindChannels(ChannelList channelList, string name, string uid) + { + IList list = channelList.GetChannelByName(name).ToList(); + if (list.Count == 1) + return list; + + string[] uidParts; + if (uid.StartsWith("C") && (uidParts = uid.Split('-')).Length <= 4) + { + // older CSV files didn't use the Transponder as part of the UID, which is necessary + // to distinguish between identical channels (onid,tsid,sid) received on multiple transponders + // (e.g. from differnt regional DVB-T transmitters) + int onid = int.Parse(uidParts[1]); + int tsid = int.Parse(uidParts[2]); + int sid = int.Parse(uidParts[3]); + return channelList.Channels.Where(c => + c.OriginalNetworkId == onid && + c.TransportStreamId == tsid && + c.ServiceId == sid + ).ToList(); + } + + var byUidList = channelList.GetChannelByUid(uid); + return byUidList; + } + #endregion + + #region Save() + public void Save(string fileName, DataRoot dataRoot, UnsortedChannelMode unsortedChannelMode) + { + using (StreamWriter stream = new StreamWriter(fileName)) + { + foreach (var channelList in dataRoot.ChannelLists) + { + int radioMask = channelList.SignalType == SignalType.Radio ? 0x4000 : 0; + foreach (var channel in channelList.Channels.Where(ch => ch.NewProgramNr != 0).OrderBy(ch => ch.NewProgramNr)) + { + string line = string.Format("{0},{1},{2},{3},\"{4}\"", + channel.RecordIndex, + channel.NewProgramNr | radioMask, + channel.TransportStreamId, + channel.Uid, + channel.Name); + stream.WriteLine(line); + } + } + } + } + #endregion + } +} diff --git a/ChanSort.Api/Controller/Editor.cs b/ChanSort.Api/Controller/Editor.cs new file mode 100644 index 0000000..c9143b5 --- /dev/null +++ b/ChanSort.Api/Controller/Editor.cs @@ -0,0 +1,276 @@ +using System.Collections.Generic; +using System.Linq; + +namespace ChanSort.Api +{ + public class Editor + { + public DataRoot DataRoot; + public ChannelList ChannelList; + +#if false + #region LoadDvbViewerFiles() + private void LoadDvbViewerFiles() + { + List fileList; + Dictionary satPosition; + if (!LoadSatMappingFile(out satPosition, out fileList)) + return; + + foreach (var file in fileList) + { + try + { + string fullPath = Path.IsPathRooted(file) + ? file + : Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), file); + this.LoadDvbViewerChannelFile(fullPath, satPosition); + } + catch + { + } + } + } + #endregion + + #region LoadSatMappingFile() + private static bool LoadSatMappingFile(out Dictionary satPosition, out List fileList) + { + satPosition = null; + fileList = null; + string satMappingFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "sat-mapping.ini"); + if (!File.Exists(satMappingFile)) + return false; + + fileList = new List(); + satPosition = new Dictionary(); + string section = null; + using (var stream = new StreamReader(satMappingFile, Encoding.UTF8)) + { + string line; + while ((line = stream.ReadLine()) != null) + { + line = line.Trim(); + if (line.Length == 0 || line.StartsWith(";")) + continue; + if (line.StartsWith("[") && line.EndsWith("]")) + { + section = line; + continue; + } + if (section == "[Satellites]") + { + var parts = line.Split(new[] { '=' }, 2); + if (parts.Length == 2) + satPosition[parts[0].ToLower()] = parts[1].ToUpper(); + } + else if (section == "[DvbViewerChannelFiles]") + { + fileList.Set(line); + } + } + } + return true; + } + #endregion + + #region LoadDvbViewerChannelFile() + private void LoadDvbViewerChannelFile(string file, IDictionary satPosition) + { + string[] unencrypted = { "18", "19", "26", "146", "154" }; + + using (var stream = new StreamReader(file, Encoding.Default)) + { + string line; + bool first = true; + while ((line = stream.ReadLine()) != null) + { + if (first) + { + first = false; + continue; + } + var col = line.Split(new[] { '\t' }); + if (col.Length < 21) + continue; + + string satId; + if (!satPosition.TryGetValue(col[0].ToLower(), out satId)) + continue; + + StringBuilder uid = new StringBuilder(); + uid.Append("S").Append(satId).Append("-").Append(col[20]).Append("-").Append(col[18]).Append("-").Append(col[17]); + + ChannelInfo channel; + if (!TvChannelByUid.TryGetValue(uid.ToString(), out channel)) + continue; + channel.Encrypted = Array.IndexOf(unencrypted, col[19]) < 0; + } + } + } + #endregion +#endif + + #region AddChannels() + + public ChannelInfo AddChannels(IList channels) + { + int count = channels.Count(channel => channel.NewProgramNr == 0); + if (count == 0) return null; + + ChannelInfo lastInsertedChannel = null; + int progNr = this.ChannelList.InsertProgramNumber; + int relativeChannelNumber = 0; + foreach(var channel in this.ChannelList.Channels) + { + if (channel.NewProgramNr != 0 && channel.NewProgramNr >= progNr) + { + int gap = count - (channel.NewProgramNr - progNr - relativeChannelNumber); + if (gap <= 0) + break; + channel.NewProgramNr += gap; + ++relativeChannelNumber; + } + } + + foreach (var channel in channels) + { + if (channel.NewProgramNr != 0) + { + // TODO notify user + continue; + } + + channel.NewProgramNr = progNr++; + lastInsertedChannel = channel; + } + this.ChannelList.InsertProgramNumber += count; + + this.DataRoot.NeedsSaving |= lastInsertedChannel != null; + return lastInsertedChannel; + } + #endregion + + #region RemoveChannels() + + public void RemoveChannels(IList channels) + { + if (channels.Count == 0) return; + + this.ChannelList.InsertProgramNumber = channels[0].NewProgramNr; + foreach (var channel in channels) + { + if (channel.NewProgramNr == 0) + continue; + int prevNr = channel.NewProgramNr; + foreach (var channel2 in this.ChannelList.Channels) + { + if (channel2.NewProgramNr > channel.NewProgramNr) + { + if (prevNr != -1 && channel2.NewProgramNr != prevNr + 1) // don't pull down numbers after a gap + break; + prevNr = channel2.NewProgramNr; + --channel2.NewProgramNr; + } + } + channel.NewProgramNr = 0; + } + + this.DataRoot.NeedsSaving = true; + } + + #endregion + + #region MoveChannels() + + public void MoveChannels(List channels, bool up) + { + if (channels.Count == 0) + return; + if (up && channels[0].NewProgramNr < 2) + return; + + int delta = (up ? - 1 : +1); + foreach (var channel in channels) + { + int newProgramNr = channel.NewProgramNr + delta; + ChannelInfo channelAtNewProgramNr = this.ChannelList.Channels.FirstOrDefault(ch => ch.NewProgramNr == newProgramNr); + if (channelAtNewProgramNr != null) + channelAtNewProgramNr.NewProgramNr -= delta; + channel.NewProgramNr += delta; + } + this.DataRoot.NeedsSaving = true; + } + + #endregion + + #region SortSelectedChannels(), ChannelComparerForSortingByName() + public void SortSelectedChannels(List selectedChannels) + { + if (selectedChannels.Count == 0) return; + var sortedChannels = new List(selectedChannels); + sortedChannels.Sort(this.ChannelComparerForSortingByName); + var programNumbers = selectedChannels.Select(ch => ch.NewProgramNr).ToList(); + for (int i = 0; i < sortedChannels.Count; i++) + sortedChannels[i].NewProgramNr = programNumbers[i]; + + this.DataRoot.NeedsSaving = true; + } + + private int ChannelComparerForSortingByName(ChannelInfo channel1, ChannelInfo channel2) + { + return channel1.Name.CompareTo(channel2.Name); + } + #endregion + + #region SetSlotNumber() + public void SetSlotNumber(IList channels, int slot, bool swap) + { + if (channels.Count == 0) return; + if (swap) + { + foreach (var channel in channels) + { + if (slot != 0) + { + var others = this.ChannelList.GetChannelByNewProgNr(slot); + foreach (var other in others) + other.NewProgramNr = channel.NewProgramNr; + } + channel.NewProgramNr = slot++; + } + } + else + { + this.RemoveChannels(channels); + this.ChannelList.InsertProgramNumber = slot; + this.AddChannels(channels); + } + this.DataRoot.NeedsSaving = true; + } + #endregion + + #region RenumberChannels() + public void RenumberChannels(List channels) + { + if (channels.Count == 0) return; + int progNr = channels.Min(ch => ch.NewProgramNr); + foreach(var channel in channels) + { + if (channel.NewProgramNr == progNr) + { + ++progNr; + continue; + } + + var list = new List(); + list.Add(channel); + this.RemoveChannels(list); + this.ChannelList.InsertProgramNumber = progNr++; + this.AddChannels(list); + this.DataRoot.NeedsSaving = true; + } + } + #endregion + } +} diff --git a/ChanSort.Api/Controller/ISerializerPlugin.cs b/ChanSort.Api/Controller/ISerializerPlugin.cs new file mode 100644 index 0000000..40e6f56 --- /dev/null +++ b/ChanSort.Api/Controller/ISerializerPlugin.cs @@ -0,0 +1,21 @@ +namespace ChanSort.Api +{ + public interface ISerializerPlugin + { + /// + /// Name of the plugin, as displayed in the OpenFileDialog file-type selection combo box + /// + string PluginName { get; } + + /// + /// Semicolon separated list of supported file types (e.g. "xxLM*.TTL;xxLV*.TTL") + /// + string FileFilter { get; } + + /// + /// Create an object that can read/write the file + /// + /// file is not of any supported type + SerializerBase CreateSerializer(string inputFile); + } +} diff --git a/ChanSort.Api/Controller/SerializerBase.cs b/ChanSort.Api/Controller/SerializerBase.cs new file mode 100644 index 0000000..5d9f28e --- /dev/null +++ b/ChanSort.Api/Controller/SerializerBase.cs @@ -0,0 +1,38 @@ +using System.Text; + +namespace ChanSort.Api +{ + public abstract class SerializerBase + { + private Encoding defaultEncoding; + + public string FileName { get; set; } + public DataRoot DataRoot { get; protected set; } + + protected SerializerBase(string inputFile) + { + this.FileName = inputFile; + this.DataRoot = new DataRoot(); + this.defaultEncoding = Encoding.GetEncoding("iso-8859-9"); + } + + public abstract string DisplayName { get; } + public abstract void Load(); + public abstract void Save(string tvOutputFile, string csvOutputFile, UnsortedChannelMode unsortedChannelMode); + + public virtual Encoding DefaultEncoding + { + get { return this.defaultEncoding; } + set { this.defaultEncoding = value; } + } + + public bool SupportsEraseChannelData { get; protected set; } + public virtual void EraseChannelData() { } + + public virtual string GetFileInformation() { return ""; } + + public virtual void ShowDeviceSettingsForm(object parentWindow) { } + + public bool SupportsChannelNameEdit { get; protected set; } + } +} diff --git a/ChanSort.Api/Lookup.csv b/ChanSort.Api/Lookup.csv new file mode 100644 index 0000000..265cf15 --- /dev/null +++ b/ChanSort.Api/Lookup.csv @@ -0,0 +1,476 @@ +ONID;Start;End;Name;Operator +ONID;0x0000;0x0000;(Reserved);(Reserved) +ONID;0x0001;0x0001;Société Européenne des Satellites;Société Européenne des Satellites +ONID;0x0002;0x0002;Société Européenne des Satellites;Société Européenne des Satellites +ONID;0x0003;0x0019;Société Européenne des Satellites;Société Européenne des Satellites +ONID;0x001A;0x001A;Quiero Televisión  ;Quiero Televisión   +ONID;0x001B;0x001B;RAI;RAI +ONID;0x001C;0x001C;Hellas-Sat S.A.;Hellas-Sat S.A. +ONID;0x001D;0x001D;TELECOM ITALIA MEDIA BROADCASTING SRL;TELECOM ITALIA MEDIA BROADCASTING SRL +ONID;0x001F;0x001F;Europe Online Networks S.A  ;Europe Online Networks S.A   +ONID;0x0020;0x0020;Société Européenne des Satellites;Société Européenne des Satellites +ONID;0x0021;0x0021;Hispasat S.A .;Hispasat S.A . +ONID;0x0022;0x0022;Hispasat S.A .;Hispasat S.A . +ONID;0x0023;0x0023;Hispasat S.A .;Hispasat S.A . +ONID;0x0024;0x0024;Hispasat S.A .;Hispasat S.A . +ONID;0x0025;0x0025;Hispasat S.A .;Hispasat S.A . +ONID;0x0026;0x0026;Hispasat S.A .;Hispasat S.A . +ONID;0x0027;0x0027;Hispasat FSS;Hispasat FSS +ONID;0x0028;0x0028;Hispasat DBS;Hispasat DBS +ONID;0x0029;0x0029;Hispasat America;Hispasat America +ONID;0x002A;0x002A;Päijät-Hämeen Puhelin Oyj;Päijät-Hämeen Puhelin Oyj +ONID;0x002B;0x002B;Digita Oy;Digita Oy +ONID;0x002E;0x002E;Xantic BU Broadband;Xantic BU Broadband +ONID;0x002F;0x002F;TVNZ  ;TVNZ   +ONID;0x0030;0x0030;Canal+ SA (for Intelsat 601-325°E);Canal+ SA (for Intelsat 601-325°E) +ONID;0x0031;0x0031;Hispasat S.A.;Hispasat S.A. +ONID;0x0032;0x0032;Hispasat S.A.;Hispasat S.A. +ONID;0x0033;0x0033;Hispasat S.A.;Hispasat S.A. +ONID;0x0034;0x0034;Hispasat S.A.;Hispasat S.A. +ONID;0x0035;0x0035;NetHold IMS;NetHold IMS +ONID;0x0036;0x0036;TV Cabo Portugal  ;TV Cabo Portugal   +ONID;0x0037;0x0037;France Telecom, CNES and DGA;France Telecom, CNES and DGA +ONID;0x0038;0x0038;Hellenic Telecommunications Organization S.A .;Hellenic Telecommunications Organization S.A . +ONID;0x0039;0x0039;Broadcast Australia Pty.;Broadcast Australia Pty. +ONID;0x003A;0x003A;GeoTelecom Satellite Services;GeoTelecom Satellite Services +ONID;0x003B;0x003B;BBC;BBC +ONID;0x003C;0x003C;KPN Broadcast Services;KPN Broadcast Services +ONID;0x003D;0x003D;Skylogic Italia S.A.;Skylogic Italia S.A. +ONID;0x003E;0x003E;Eutelsat S.A.;Eutelsat S.A. +ONID;0x003F;0x003F;Eutelsat S.A.;Eutelsat S.A. +ONID;0x0040;0x0040;Hrvatski Telekom d.d;Hrvatski Telekom d.d +ONID;0x0041;0x0041;Mindport  ;Mindport   +ONID;0x0042;0x0042;DTV haber ve Gorsel yayýncilik;DTV haber ve Gorsel yayýncilik +ONID;0x0043;0x0043;arena Sport Rechte und Marketing GmbH;arena Sport Rechte und Marketing GmbH +ONID;0x0044;0x0044;VisionTV LLC;VisionTV LLC +ONID;0x0045;0x0045;SES-Sirius;SES-Sirius +ONID;0x0046;0x0046;Telenor ;Telenor  +ONID;0x0047;0x0047;Telenor;Telenor +ONID;0x0048;0x0048;STAR DIGITAL A.S .;STAR DIGITAL A.S . +ONID;0x0049;0x0049;Sentech  ;Sentech   +ONID;0x004A;0x004B;Rambouillet ES;Rambouillet ES +ONID;0x004C;0x004C;Skylogic S.A.;Skylogic S.A. +ONID;0x004D;0x004D;Skylogic S.A.;Skylogic S.A. +ONID;0x004E;0x004F;Eutelsat S.A.;Eutelsat S.A. +ONID;0x0050;0x0050;HRT – Croatian Radio and Television;HRT – Croatian Radio and Television +ONID;0x0051;0x0051;Havas ;Havas  +ONID;0x0052;0x0052;StarGuide Digital Networks ;StarGuide Digital Networks  +ONID;0x0053;0x0053;PT Comunicações;PT Comunicações +ONID;0x0054;0x0054;Teracom AB Satellite Services;Teracom AB Satellite Services +ONID;0x0055;0x0055;NSAB (Teracom);NSAB (Teracom) +ONID;0x0056;0x0056;Viasat Satellite Services AB;Viasat Satellite Services AB +ONID;0x0058;0x0058;UBC Thailand ;UBC Thailand  +ONID;0x0059;0x0059;Bharat Business Channel Limited;Bharat Business Channel Limited +ONID;0x005A;0x005A;ICO Satellite Services G.P.;ICO Satellite Services G.P. +ONID;0x005B;0x005B;ZON;ZON +ONID;0x005E;0x005E;NSAB ;NSAB  +ONID;0x005F;0x005F;NSAB ;NSAB  +ONID;0x0060;0x0060;Kabel Deutschland ;Kabel Deutschland  +ONID;0x0064;0x0064;T-Kábel;T-Kábel Magyarország Kft. +ONID;0x0065;0x0065;France Telecom Orange;France Telecom Orange +ONID;0x0066;0x0066;Zweites Deutsches Fernsehen - ZDF (cable contribution);Zweites Deutsches Fernsehen - ZDF +ONID;0x0069;0x0069;Optus B3 156°E;Optus Communications +ONID;0x0070;0x0070;BONUM1 36 Degrees East;NTV+ +ONID;0x0073;0x0073;PanAmSat 4 68.5°E;Pan American Satellite System +ONID;0x007D;0x007D;Skylogic;Skylogic Italia +ONID;0x007E;0x007F;Eutelsat Satellite System at 7°E;EUTELSAT – European Telecommunications Satellite Organization  +ONID;0x0085;0x0085;BetaTechnik;BetaTechnik +ONID;0x0090;0x0090;National network;TDF +ONID;0x009A;0x009B;Eutelsat satellite system at 9°East;Rambouillet ES +ONID;0x009C;0x009D;Eutelsat satellite system at 9°East;Skylogic S.A. +ONID;0x009E;0x009F;Eutelsat satellite system at 9°East;Eutelsat S.A. +ONID;0x00A0;0x00A0;National Cable Network;News Datacom +ONID;0x00A1;0x00A1;DigiSTAR;STAR Television Productions Ltd (HK) (NDS) +ONID;0x00A2;0x00A2;Sky Entertainment Services;NetSat Serviços Ltda (Brazil), Innova S. de R. L. (Mexico) and Multicountry Partnership L. P. (NDS) +ONID;0x00A3;0x00A3;NDS Director systems;Various (product only sold by Tandberg TV) (NDS) +ONID;0x00A4;0x00A4;ISkyB;STAR Television Productions Ltd (HK) (NDS) +ONID;0x00A5;0x00A5;Indovision;PT. Matahari Lintas Cakrawala (MLC) (NDS) +ONID;0x00A6;0x00A6;ART;ART (NDS) +ONID;0x00A7;0x00A7;Globecast;France Telecom (NDS) +ONID;0x00A8;0x00A8;Foxtel;Foxtel (Australia) (NDS) +ONID;0x00A9;0x00A9;Sky New Zealand;Sky Network Television Ltd (NDS) +ONID;0x00AA;0x00AA;OTE;OTE (Greece) (NDS) +ONID;0x00AB;0x00AB;Yes Satellite Services;DBS (Israel) (NDS) +ONID;0x00AC;0x00AC;(NDS satellite services);(NDS to be allocated) +ONID;0x00AD;0x00AD;SkyLife;Korea Digital Broadcasting +ONID;0x00AE;0x00AF;(NDS satellite services);(NDS to be allocated) +ONID;0x00B0;0x00B3;TPS;La Télévision Par Satellite +ONID;0x00B4;0x00B4;Telesat 107.3°W;Telesat Canada +ONID;0x00B5;0x00B5;Telesat 111.1°W;Telesat Canada +ONID;0x00B6;0x00B6;Telstra Saturn;TelstraSaturn Limited   +ONID;0x00BA;0x00BA;Satellite Express – 6 (80°E);Satellite Express  +ONID;0x00C0;0x00CD;Canal +;Canal+ +ONID;0x00D0;0x00D0;CCTV;China Central Television (NDS) +ONID;0x00D1;0x00D1;Galaxy;Galaxy Satellite Broadcasting, Hong Kong (NDS) +ONID;0x00D2;0x00DF;(NDS satellite services);(NDS to be allocated) +ONID;0x00EB;0x00EB;Eurovision Network;European Broadcasting Union   +ONID;0x0100;0x0100;ExpressVu;ExpressVu Inc. +ONID;0x0101;0x0101;Bulsatcom AD;Bulsatcom AD +ONID;0x0104;0x0104;MagtiSat;Magticom Ltd. +ONID;0x010D;0x010D;Skylogic;Skylogic Italia +ONID;0x010E;0x010F;Eutelsat Satellite System at 10°E;European Telecommunications Satellite Organization +ONID;0x0110;0x0110;Mediaset;Mediaset  +ONID;0x011F;0x011F;visAvision Network;European Telecommunications Satellite Organization +ONID;0x013D;0x013D;Skylogic;Skylogic Italia +ONID;0x013E;0x013F;Eutelsat Satellite System 13°E;European Telecommunications Satellite Organization +ONID;0x016D;0x016D;Skylogic;Skylogic Italia +ONID;0x016E;0x016F;Eutelsat Satellite System at 16°E;European Telecommunications Satellite Organization +ONID;0x0170;0x0170;Audio Visual Global Joint Stock Company;Audio Visual Global Joint Stock Company +ONID;0x01F4;0x01F4;MediaKabel B.V; +ONID;0x022D;0x022D;Skylogic;Skylogic Italia +ONID;0x022E;0x022F;Eutelsat Satellite System at 21.5°E;EUTELSAT – European Telecommunications Satellite Organization  +ONID;0x026D;0x026D;Skylogic;Skylogic Italia +ONID;0x026E;0x026F;Eutelsat Satellite System at 25.5°E;EUTELSAT – European Telecommunications Satellite Organization  +ONID;0x029D;0x029D;Skylogic;Skylogic Italia +ONID;0x029E;0x029F;Eutelsat Satellite System at 29°E;European Telecommunications Satellite Organization +ONID;0x02BE;0x02BE;ARABSAT;ARABSAT - Arab Satellite Communications Organization +ONID;0x02C0;0x02C0;MTV Networks Europe;MTV Networks Europe +ONID;0x033D;0x033D;Skylogic at 33°E;Skylogic Italia +ONID;0x033E;0x033F;Eutelsat Satellite System at 33°E;Eutelsat +ONID;0x034E;0x034E;IRIB;IRIB +ONID;0x036D;0x036D;Skylogic;Skylogic Italia +ONID;0x036E;0x036F;Eutelsat Satellite System at 36°E;European Telecommunications Satellite Organization +ONID;0x03E8;0x03E8;Telia;Telia, Sweden +ONID;0x045D;0x045F;Eutelsat satellite system at 15°West;Eutelsat S.A. +ONID;0x047D;0x047D;Skylogic;Skylogic Italia +ONID;0x047E;0x047F;Eutelsat Satellite System at 12.5°W;EUTELSAT – European Telecommunications Satellite Organization  +ONID;0x048D;0x048D;Skylogic;Skylogic Italia +ONID;0x048E;0x048F;Eutelsat Satellite System at 48°E;European Telecommunications Satellite Organization +ONID;0x049D;0x049F;Eutelsat satellite system at 11°West;Eutelsat S.A. +ONID;0x0500;0x0500;Vinasat Center;Vinasat Center +ONID;0x0510;0x0510;Almajd;Almajd Satellite Broadcasting FZ LLC +ONID;0x052D;0x052D;Skylogic;Skylogic Italia +ONID;0x052E;0x052F;Eutelsat Satellite System at 8°W;EUTELSAT – European Telecommunications Satellite Organization  +ONID;0x053D;0x053F;Eutelsat satellite system at 53°East;Eutelsat S.A. +ONID;0x055D;0x055D;Skylogic at 5°W;Skylogic Italia +ONID;0x055E;0x055F;Eutelsat Satellite System at 5°W;Eutelsat +ONID;0x0600;0x0600;UPC Satellite;UPC   +ONID;0x0601;0x0601;UPC Cable;UPC   +ONID;0x0602;0x0602;Tevel;Tevel Cable (Israel ) +ONID;0x071D;0x071D;Skylogic at 70.5°E;Skylogic Italia +ONID;0x071E;0x071F;Eutelsat Satellite System at 70.5°E;Eutelsat S.A. +ONID;0x077D;0x077D;Skylogic Satellite System at 7°W;Skylogic Italia +ONID;0x077E;0x077F;Eutelsat Satellite System at 7°W;Eutelsat S.A. +ONID;0x0800;0x0801;Nilesat 101;Nilesat +ONID;0x0880;0x0880;MEASAT 1, 91.5°E;MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia) +ONID;0x0882;0x0882;MEASAT 2, 91.5°E;MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia) +ONID;0x0883;0x0883;MEASAT 2, 148.0°E;Hsin Chi Broadcast Company Ltd . +ONID;0x088F;0x088F;MEASAT 3;MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia) +ONID;0x08A0;0x08A0;Mainland Television Limited;Mainland Television Limited +ONID;0x0E26;0x0E26;IRIB;IRIB +ONID;0x0FFF;0x0FFF;Optus Networks;Optus Networks +ONID;0x1000;0x1000;Optus B3 156°E;Optus Communications +ONID;0x1001;0x1001;DISH Network;Echostar Communications +ONID;0x1002;0x1002;Dish Network 61.5 W;Echostar Communications +ONID;0x1003;0x1003;Dish Network 83 W;Echostar Communications +ONID;0x1004;0x1004;Dish Network 119 W;Echostar Communications +ONID;0x1005;0x1005;Dish Network 121 W;Echostar Communications +ONID;0x1006;0x1006;Dish Network 148 W;Echostar Communications +ONID;0x1007;0x1007;Dish Network 175 W;Echostar Communications +ONID;0x1008;0x100B;Dish Network W - Z;Echostar Communications +ONID;0x1010;0x1010;ABC TV;Australian Broadcasting Corporation   +ONID;0x1011;0x1011;SBS;SBS Australia   +ONID;0x1012;0x1012;Nine Network Australia;Nine Network Australia   +ONID;0x1013;0x1013;Seven Network Australia;Seven Network Limited   +ONID;0x1014;0x1014;Network TEN Australia;Network TEN Limited   +ONID;0x1015;0x1015;WIN Television Australia;WIN Television Pty Ltd   +ONID;0x1016;0x1016;Prime Television Australia;Prime Television Limited   +ONID;0x1017;0x1017;Southern Cross Broadcasting Australia;Southern Cross Broadcasting (Australia) Limited   +ONID;0x1018;0x1018;Telecasters Australia;Telecasters Australia Limited   +ONID;0x1019;0x1019;NBN Australia;NBN Limited   +ONID;0x101A;0x101A;Imparja Television Australia;Imparja Television Australia  +ONID;0x101B;0x101F;(Reserved for Australian broadcaster);(Reserved for Australian broadcasters) +ONID;0x1100;0x1100;GE Americom;GE American Communications +ONID;0x1101;0x1101;MiTV Networks Broadcast Terrestrial Network - DVB-H;MiTV Networks Sdn Bhd Malaysia +ONID;0x1102;0x1102;Dream Mobile TV;Philippines Multimedia System, Inc. +ONID;0x1103;0x1103;PT MAC;PT. Mediatama Anugrah Citra +ONID;0x1104;0x1104;Levira Mobile TV;Levira AS +ONID;0x1105;0x1105;Mobision;Alsumaria TV +ONID;0x1106;0x1106;Trenmobile;PT. Citra Karya Investasi +ONID;0x1107;0x1107;VTC Mobile TV;VTC Mobile TV +ONID;0x1700;0x1700;Echostar 2A;EchoStar Communications +ONID;0x1701;0x1701;Echostar 2B;EchoStar Communications +ONID;0x1702;0x1702;Echostar 2C;EchoStar Communications +ONID;0x1703;0x1703;Echostar 2D;EchoStar Communications +ONID;0x1704;0x1704;Echostar 2E;EchoStar Communications +ONID;0x1705;0x1705;Echostar 2F;EchoStar Communications +ONID;0x1706;0x1706;Echostar 2G;EchoStar Communications +ONID;0x1707;0x1707;Echostar 2H;EchoStar Communications +ONID;0x1708;0x1708;Echostar 2I;EchoStar Communications +ONID;0x1709;0x1709;Echostar 2J;EchoStar Communications +ONID;0x170A;0x170A;Echostar 2K;EchoStar Communications +ONID;0x170B;0x170B;Echostar 2L;EchoStar Communications +ONID;0x170C;0x170C;Echostar 2M;EchoStar Communications +ONID;0x170D;0x170D;Echostar 2N;EchoStar Communications +ONID;0x170E;0x170E;Echostar 2O;EchoStar Communications +ONID;0x170F;0x170F;Echostar 2P;EchoStar Communications +ONID;0x1710;0x1710;Echostar 2Q;EchoStar Communications +ONID;0x1711;0x1711;Echostar 2R;EchoStar Communications +ONID;0x1712;0x1712;Echostar 2S;EchoStar Communications +ONID;0x1713;0x1713;Echostar 2T;EchoStar Communications +ONID;0x1714;0x1714;Platforma HD;Platforma HD Ltd. +ONID;0x1715;0x1715;Profit Group Terrestrial;Profit Group SpA +ONID;0x1716;0x1716;JSC Mostelekom;JSC Mostelekom +ONID;0x2000;0x2000;Thiacom 1 & 2 co-located 78.5°E;Shinawatra Satellite +ONID;0x2014;0x2014;DTT - Andorran Digital Terrestrial Television;STA +ONID;0x2024;0x2024;Australian Digital Terrestrial Television;Australian Broadcasting Authority  +ONID;0x2028;0x2028;Austrian Digital Terrestrial Television;ORS - Austrian Broadcasting Services +ONID;0x2038;0x2038;Belgian Digital Terrestrial Television;BIPT +ONID;0x209E;0x209E;Taiwanese Digital Terrestrial Television;Directorate General of Telecommunications +ONID;0x20AA;0x20AA;Comision Nacional de Television de Colombia;Comision Nacional de Television de Colombia +ONID;0x20BF;0x20BF;Croatian Post and Electronic Communications Agency (HAKOM);Croatian Post and Electronic Communications Agency (HAKOM) +ONID;0x20C4;0x20C4;Office Of the Commissioner of Electronic Communications and Postal Regulation;Office Of the Commissioner of Electronic Communications and Postal Regulation +ONID;0x20CB;0x20CB;Czech Republic Digital Terrestrial Television;Czech Digital Group   +ONID;0x20D0;0x20D0;Danish Digital Terrestrial Television;National Telecom Agency Denmark   +ONID;0x20E9;0x20E9;Estonian Digital Terrestrial Television;Estonian National Communications Board +ONID;0x20F6;0x20F6;Finnish Digital Terrestrial Television;Telecommunicatoins Administratoin Centre, Finland   +ONID;0x20FA;0x20FA;French Digital Terrestrial Television;Conseil Superieur de l'AudioVisuel +ONID;0x2114;0x2114;German Digital Terrestrial Television;IRT on behalf of the German DVB-T broadcasts  +ONID;0x2124;0x2124;Gibraltar Regulatory Authority;Gibraltar Regulatory Authority +ONID;0x2168;0x2168;Digital Terrestrial Network of Indonesia;Ministry of Communication and Information Technology of the Republic of Indonesia +ONID;0x2174;0x2174;Irish Digital Terrestrial Television;Irish Telecommunications Regulator   +ONID;0x2178;0x2178;Israeli Digital Terrestrial Television;BEZEQ (The Israel Telecommunication Corp Ltd .) +ONID;0x217C;0x217C;Italian Digital Terrestrial Television; +ONID;0x21AC;0x21AC;DTT - Latvian Digital Terrestrial Television;Electronic Communications Office +ONID;0x21B8;0x21B8;DTT Lithuania;Communications Regulatory Authority +ONID;0x21CA;0x21CA;Malaysian Technical Standards Forum Bhd (MTFSB);Malaysian Technical Standards Forum Bhd (MTFSB) +ONID;0x2210;0x2210;Netherlands Digital Terrestrial Television;Nozema   +ONID;0x2213;0x2213;DTT for Country of Curacao;Bureau Telecommunicatie en Post +ONID;0x222A;0x222A;DTT - New Zealand Digial Terrestrial Television;TVNZ on behalf of Freeview New Zealand +ONID;0x2242;0x2242;Norwegian Digital Terrestrial Television;Norwegian Regulator +ONID;0x224F;0x224F;Autoridad Nacional de los Servicios Públicos;Autoridad Nacional de los Servicios Públicos +ONID;0x2260;0x2260;DTT - Philippines Digital Terrestrial Television;NTA (porivionally ABS-CBN) +ONID;0x2268;0x2268;DTT Poland;Office of Electronic Communications +ONID;0x2283;0x2283;DTT - Russian Federation;RTRN +ONID;0x22B0;0x22B0;DTT - Serbia JP Emisiona Tehnika i Veze;JP Emisiona Tehnika i Veze +ONID;0x22BE;0x22BE;Singapore Digital Terrestrial Television;Singapore Broadcasting Authority   +ONID;0x22BF;0x22BF;Telecommunications office of the Slovak republic;Telecommunications office of the Slovak republic +ONID;0x22C1;0x22C1;DTT - Slovenian Digital Terrestrial Television;APEK +ONID;0x22C6;0x22C6;DTT - South African Digital Terrestrial Television;South African Broadcasting Corporation Ltd. (SABC), pending formation of DZONGA +ONID;0x22C7;0x22C7;DTT- Hungarian Digital Terrestrial Television;National Communications Authority, Hungary +ONID;0x22C8;0x22C8;DTT- Portugal Digital Terrestrial Television;ANACOM- National Communications Authority +ONID;0x22D4;0x22D4;Spanish Digital Terrestrial Television;“Spanish Broadcasting Regulator  +ONID;0x22F1;0x22F1;Swedish Digital Terrestrial Television;“Swedish Broadcasting Regulator ” +ONID;0x22F4;0x22F4;Swiss Digital Terrestrial Television;OFCOM +ONID;0x233A;0x233A;UK Digital Terrestrial Television;Independent Television Commission  +ONID;0x2B00;0x2B00;DTT – Sky New Zealand;Sky Network Television Limited +ONID;0x3000;0x3000;PanAmSat 4 68.5°E;Pan American Satellite System +ONID;0x5000;0x5000;Irdeto Mux System;Irdeto Test Laboratories +ONID;0x616D;0x616D;BellSouth Entertainment;BellSouth Entertainment, Atlanta, GA, USA   +ONID;0x6600;0x6600;UPC Satellite;UPC   +ONID;0x6601;0x6601;UPC Cable;UPC   +ONID;0x6602;0x6602;Comcast Media Center;Comcast Media Center +ONID;0xA011;0xA011;Sichuan Cable TV Network;Sichuan Cable TV Network (PRC) +ONID;0xA012;0xA012;China Network Systems;STAR Koos Finance Company (Taiwan) +ONID;0xA013;0xA013;Versatel;Versatel (Russia) +ONID;0xA014;0xA014;Chongqing Cable;Chongqing Municipality, PRC +ONID;0XA015;0XA015;Guizhou Cable;Guizhou Province, PRC +ONID;0xA016;0xA016;Hathway Cable;Hathway Cable and Datacom, India +ONID;0xA017;0xA017;RCN;Rogers Cable Network, USA +ONID;0xA018;0xA040;(NDS satellite services);(NDS to be allocated) +ONID;0xA401;0xA401;ARD;ARD-Sternpunkte +ONID;0xA509;0xA509;Welho Cable Network Helsinki;Welho +ONID;0xA600;0xA600;Madritel;Madritel (Spain) +ONID;0xA602;0xA602;Tevel;Tevel (Israel) (NDS) +ONID;0xA603;0xA603;Globo Cabo (to be recycled);Globo Cabo (Brazil) (NDS) +ONID;0xA604;0xA604;Cablemas (to be recycled);Cablemas (Mexico) (NDS) +ONID;0xA605;0xA605;INC National Cable Network;Information Network Centre of SARFT (PRC) (NDS) +ONID;0xA606;0xA607;Pepcom GmbH;Pepcom GmbH +ONID;0xA900;0xA900;M-net Telekommunikations GmbH;M-net Telekommunikations GmbH +ONID;0xF000;0xF000;SMALL CABLE NETWORKS;(Small cable network network operators) +ONID;0xF001;0xF001;Deutsche Telekom;Deutsche Telekom AG +ONID;0xF010;0xF010;Telefónica Cable;Telefónica Cable SA +ONID;0xF020;0xF020;Cable and Wireless Communication;Cable and Wireless Communications +ONID;0xF100;0xF100;Casema;Casema N.V . +ONID;0xF750;0xF750;Telewest Communications Cable Network;Telewest Communications Plc   +ONID;0xF751;0xF751;OMNE Communications;OMNE Communications Ltd. +ONID;0xFBFC;0xFBFC;MATAV;MATAV (Israel ) (NDS) +ONID;0xFBFD;0xFBFD;Com Hem ab;Com Hem ab +ONID;0xFBFE;0xFBFE;TPS;La Télévision Par Satellite +ONID;0xFBFF;0xFBFF;Sky Italia;Sky Italia Spa. +ONID;0xFC10;0xFC10;Rhône Vision Cable;Rhône Vision Cable +ONID;0xFC41;0xFC41;France Telecom Cable;France Telecom   +ONID;0xFD00;0xFD00;National Cable Network;Lyonnaise Communications +ONID;0xFE00;0xFE00;TeleDenmark Cable TV;TeleDenmark +ONID;0xFEC0;0xFEFF;Network Interface Modules;Common Interface   +ONID;0xFF00;0xFFFA;Private_temporary_use;ETSI + +TRANSP;Number;MHz +TRANSP;49;10714 +TRANSP;50;10729 +TRANSP;51;10744 +TRANSP;52;10758 +TRANSP;53;10773 +TRANSP;54;10788 +TRANSP;55;10803 +TRANSP;56;10818 +TRANSP;57;10832 +TRANSP;58;10847 +TRANSP;59;10862 +TRANSP;60;10876 +TRANSP;61;10891 +TRANSP;62;10906 +TRANSP;63;10921 +TRANSP;64;10936 +TRANSP;33;10964 +TRANSP;34;10979 +TRANSP;35;10994 +TRANSP;36;11009 +TRANSP;37;11023 +TRANSP;38;11038 +TRANSP;39;11053 +TRANSP;40;11067 +TRANSP;41;11082 +TRANSP;42;11097 +TRANSP;43;11112 +TRANSP;44;11127 +TRANSP;45;11141 +TRANSP;46;11156 +TRANSP;47;11171 +TRANSP;48;11186 +TRANSP;1;11214 +TRANSP;2;11229 +TRANSP;3;11244 +TRANSP;4;11258 +TRANSP;5;11273 +TRANSP;6;11288 +TRANSP;7;11303 +TRANSP;8;11318 +TRANSP;9;11332 +TRANSP;10;11347 +TRANSP;11;11362 +TRANSP;12;11376 +TRANSP;13;11391 +TRANSP;14;11406 +TRANSP;15;11421 +TRANSP;16;11436 +TRANSP;17;11464 +TRANSP;18;11479 +TRANSP;19;11494 +TRANSP;20;11509 +TRANSP;21;11523 +TRANSP;22;11538 +TRANSP;23;11553 +TRANSP;24;11568 +TRANSP;25;11582 +TRANSP;26;11597 +TRANSP;27;11612 +TRANSP;28;11627 +TRANSP;29;11641 +TRANSP;30;11656 +TRANSP;31;11671 +TRANSP;32;11686 +TRANSP;65;11720 +TRANSP;66;11739 +TRANSP;67;11758 +TRANSP;68;11778 +TRANSP;69;11798 +TRANSP;70;11817 +TRANSP;71;11836 +TRANSP;72;11856 +TRANSP;73;11876 +TRANSP;74;11895 +TRANSP;75;11914 +TRANSP;76;11934 +TRANSP;77;11954 +TRANSP;78;11973 +TRANSP;79;11992 +TRANSP;80;12012 +TRANSP;81;12032 +TRANSP;82;12051 +TRANSP;83;12070 +TRANSP;84;12090 +TRANSP;85;12110 +TRANSP;86;12129 +TRANSP;87;12148 +TRANSP;88;12168 +TRANSP;89;12188 +TRANSP;90;12207 +TRANSP;91;12226 +TRANSP;92;12246 +TRANSP;93;12266 +TRANSP;94;12285 +TRANSP;95;12304 +TRANSP;96;12324 +TRANSP;97;12344 +TRANSP;98;12363 +TRANSP;99;12382 +TRANSP;100;12402 +TRANSP;101;12422 +TRANSP;102;12441 +TRANSP;103;12460 +TRANSP;104;12480 +TRANSP;105;12515 +TRANSP;106;12522 +TRANSP;107;12545 +TRANSP;108;12552 +TRANSP;109;12574 +TRANSP;110;12581 +TRANSP;111;12604 +TRANSP;112;12610 +TRANSP;113;12633 +TRANSP;114;12640 +TRANSP;115;12663 +TRANSP;116;12670 +TRANSP;117;12692 +TRANSP;118;12699 +TRANSP;119;12722 +TRANSP;120;12728 + +SERVICETYPE;Number;Description +SERVICETYPE;01;SD-TV +SERVICETYPE;02;Radio +SERVICETYPE;12;Daten/Test +SERVICETYPE;25;HD-TV +SERVICETYPE;211;Sky Select + +DVBT;Channel;MHz +DVBT;21;474 +DVBT;22;482 +DVBT;23;490 +DVBT;24;498 +DVBT;25;506 +DVBT;26;514 +DVBT;27;522 +DVBT;28;530 +DVBT;29;538 +DVBT;30;546 +DVBT;31;554 +DVBT;32;562 +DVBT;33;570 +DVBT;34;578 +DVBT;35;586 +DVBT;36;594 +DVBT;37;602 +DVBT;38;610 +DVBT;39;618 +DVBT;40;626 +DVBT;41;634 +DVBT;42;642 +DVBT;43;650 +DVBT;44;658 +DVBT;45;666 +DVBT;46;674 +DVBT;47;682 +DVBT;48;690 +DVBT;49;698 +DVBT;50;706 +DVBT;51;714 +DVBT;52;722 +DVBT;53;730 +DVBT;54;738 +DVBT;55;746 +DVBT;56;754 +DVBT;57;762 +DVBT;58;770 +DVBT;59;778 +DVBT;60;786 +DVBT;61;794 +DVBT;62;802 +DVBT;63;810 +DVBT;64;818 +DVBT;65;826 +DVBT;66;834 +DVBT;67;842 +DVBT;68;850 +DVBT;69;858 diff --git a/ChanSort.Api/Model/ChannelInfo.cs b/ChanSort.Api/Model/ChannelInfo.cs new file mode 100644 index 0000000..02eeba4 --- /dev/null +++ b/ChanSort.Api/Model/ChannelInfo.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; + +namespace ChanSort.Api +{ + public class ChannelInfo + { + private string uid; + /// + /// List of channels that have the same UID as this channel and were not added to the channel list directly + /// + public readonly List Duplicates = new List(); + + public SignalSource SignalSource { get; private set; } + public SignalType SignalType { get; private set; } + public int RecordIndex { get; set; } + public int RecordOrder { get; set; } + public int OldProgramNr { get; set; } + public int NewProgramNr { get; set; } + public string Name { get; set; } + public string ShortName { get; set; } + public Favorites Favorites { get; set; } + public bool Skip { get; set; } + public bool Lock { get; set; } + public bool Hidden { get; set; } + public bool? Encrypted { get; set; } + public string ChannelOrTransponder { get; set; } + public string Satellite { get; set; } + public decimal FreqInMhz { get; set; } + public char Polarity { get; set; } + public int ServiceId { get; set; } + public int VideoPid { get; set; } + public int AudioPid { get; set; } + public int OriginalNetworkId { get; set; } + public int TransportStreamId { get; set; } + public int SymbolRate { get; set; } + public int ServiceType { get; set; } + public string Debug { get; private set; } + public string SatPosition { get; set; } + public Transponder Transponder { get; set; } + + public bool IsNameModified { get; set; } + + #region ctor() + /// + /// Constructor for exiting TV channel + /// + public ChannelInfo(SignalSource source, SignalType type, int index, int oldProgNr, string name) + { + this.SignalSource = source; + this.SignalType = type; + this.RecordIndex = index; + this.RecordOrder = index; + this.OldProgramNr = oldProgNr; + this.Name = name; + this.Encrypted = null; + } + + /// + /// Constructor for reference list channels which no longer exist in TV list + /// + /// + /// + /// + /// + /// + public ChannelInfo(SignalSource source, SignalType type, string uid, int newProgNr, string name) + { + this.SignalSource = source; + this.SignalType = type; + this.Uid = uid; + this.NewProgramNr = newProgNr; + this.Name = name; + this.Encrypted = null; + } + #endregion + + #region Uid + public string Uid + { + get + { + if (this.uid == null) + { + if ((this.SignalSource & SignalSource.Digital) == 0) + this.uid = "A-0-" + (int)(this.FreqInMhz*20) + "-0"; + else if (this.SignalSource == SignalSource.DvbS) + this.uid = "S" + this.SatPosition + "-" + this.OriginalNetworkId + "-" + this.TransportStreamId + "-" + this.ServiceId; + else if (this.SignalSource == SignalSource.HdPlusD) + this.uid = "H" + this.OriginalNetworkId + "-" + this.ServiceId; + else + this.uid = "C-" + this.OriginalNetworkId + "-" + this.TransportStreamId + "-" + this.ServiceId + "-" + this.ChannelOrTransponder; + } + return this.uid; + } + set { this.uid = value; } + } + #endregion + + #region ToString(), Equals(), GetHashCode() + + public override string ToString() + { + return this.Name; + } + + public override bool Equals(object obj) + { + //ChannelInfo that = obj as ChannelInfo; + //return that != null && this.Uid == that.Uid && this.OldProgramNr == that.OldProgramNr; + return ReferenceEquals(this, obj); + } + + public override int GetHashCode() + { + return this.Uid.GetHashCode() + this.OldProgramNr; + } + + #endregion + + #region NetworkName, NetworkOperator + public string NetworkName + { + get + { + var network = LookupData.Instance.GetNetwork(this.OriginalNetworkId); + return network == null ? null : network.Name; + } + } + + public string NetworkOperator + { + get + { + var network = LookupData.Instance.GetNetwork(this.OriginalNetworkId); + return network == null ? null : network.Operator; + } + } + #endregion + + #region ServiceTypeName + public string ServiceTypeName { get { return LookupData.Instance.GetServiceTypeDescription(this.ServiceType); } } + #endregion + + #region GetFavString() + public static string GetFavString(Favorites favorites) + { + string sep = ""; + string text = ""; + foreach (Favorites favMask in Enum.GetValues(typeof(Favorites))) + { + if ((favorites & favMask) != 0) + { + text += sep + favMask.ToString(); + sep = ","; + } + } + return text; + } + #endregion + + #region ParseFavString() + public static Favorites ParseFavString(string value) + { + Favorites favMask = 0; + foreach (Favorites fav in Enum.GetValues(typeof (Favorites))) + { + foreach (char c in value) + { + if (c == fav.ToString()[0]) + { + favMask |= fav; + break; + } + } + } + return favMask; + } + #endregion + + #region AddDebug() + public void AddDebug(byte val) + { + if (this.Debug == null) + this.Debug = val.ToString("x2"); + else + this.Debug += " " + val.ToString("x2"); + } + + public void AddDebug(ushort val) + { + if (this.Debug == null) + this.Debug = val.ToString("x2"); + else + this.Debug += " " + val.ToString("x4"); + } + + public unsafe void AddDebug(byte* ptr, int len) + { + for (int i = 0; i < len; i++) + this.AddDebug(ptr[i]); + } + #endregion + } +} diff --git a/ChanSort.Api/Model/ChannelList.cs b/ChanSort.Api/Model/ChannelList.cs new file mode 100644 index 0000000..48211f2 --- /dev/null +++ b/ChanSort.Api/Model/ChannelList.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Linq; + +namespace ChanSort.Api +{ + public class ChannelList + { + private readonly SignalSource source; + private readonly SignalType type; + private readonly IList channels = new List(); + private readonly Dictionary> channelByUid = new Dictionary>(); + private readonly Dictionary channelByProgNr = new Dictionary(); + private readonly Dictionary> channelByName = new Dictionary>(); + private int insertProgramNr = 1; + private int duplicateUidCount; + private int duplicateProgNrCount; + + public ChannelList(SignalSource source, SignalType type) + { + this.source = source; + this.type = type; + } + + public SignalSource SignalSource { get { return this.source; } } + public SignalType SignalType { get { return this.type; } } + public IList Channels { get { return this.channels; } } + public int Count { get { return channels.Count; } } + public int DuplicateUidCount { get { return duplicateUidCount; } } + public int DuplicateProgNrCount { get { return duplicateProgNrCount; } } + + #region ShortCaption + public string ShortCaption + { + get + { + StringBuilder sb = new StringBuilder(); + switch (this.source) + { + case SignalSource.AnalogC: sb.Append("Analog Cable"); break; + case SignalSource.AnalogT: sb.Append("Analog Antenna"); break; + case SignalSource.AnalogCT: sb.Append("Analog Cable/Antenna"); break; + case SignalSource.DvbC: sb.Append("DVB-C"); break; + case SignalSource.DvbT: sb.Append("DVB-T"); break; + case SignalSource.DvbCT: sb.Append("DVB-C/T"); break; + case SignalSource.DvbS: sb.Append("DVB-S"); break; + case SignalSource.HdPlusD: sb.Append("Astra HD Plus"); break; + default: sb.Append(this.source.ToString()); break; + } + switch (this.type) + { + case SignalType.Tv: sb.Append(" - TV"); break; + case SignalType.Radio: sb.Append(" - Radio"); break; + case SignalType.Mixed: break; + default: sb.Append(this.type.ToString()); break; + } + return sb.ToString(); + } + } + #endregion + + #region Caption + public string Caption + { + get + { + string cap = this.ShortCaption; + int validChannelCount = this.Channels.Count(ch => ch.OldProgramNr != 0); + return cap + " (" + validChannelCount + ")"; + } + } + #endregion + + #region InsertProgramNumber + public int InsertProgramNumber + { + get { return this.Count == 0 ? 1 : this.insertProgramNr; } + set { this.insertProgramNr = Math.Max(1, value); } + } + #endregion + + #region AddChannel() + public string AddChannel(ChannelInfo ci) + { + IList others; + if (this.channelByUid.TryGetValue(ci.Uid, out others)) + { + ++duplicateUidCount; + ChannelInfo twin = others.FirstOrDefault(c => c.OldProgramNr == ci.OldProgramNr); + if (twin != null) + { + string warning = null; + if (ci.OldProgramNr != 0) + { + warning = string.Format(Resources.ChannelList_AddChannel__DuplicateUid, + this.ShortCaption, ci.Name, twin.RecordIndex, twin.OldProgramNr, ci.RecordIndex, + ci.OldProgramNr); + } + twin.Duplicates.Add(ci); + ci.OldProgramNr = 0; + return warning; + } + } + else + { + others = new List(); + this.channelByUid.Add(ci.Uid, others); + others.Add(ci); + } + + string warning2 = null; + bool isDupeProgNr = false; + if (ci.OldProgramNr != 0) + { + ChannelInfo other; + this.channelByProgNr.TryGetValue(ci.OldProgramNr, out other); + if (other != null) + { + warning2 = string.Format(Resources.ChannelList_ProgramNrAssignedToMultipleChannels, + this.ShortCaption, ci.OldProgramNr, other.RecordIndex, other.Name, ci.RecordIndex, ci.Name); + ++duplicateProgNrCount; + isDupeProgNr = true; + } + } + + if (!isDupeProgNr) + this.channelByProgNr[ci.OldProgramNr] = ci; + + var lowerName = ci.Name.ToLower().Trim(); + var byNameList = this.channelByName.TryGet(lowerName); + if (byNameList == null) + { + byNameList = new List(); + this.channelByName[lowerName] = byNameList; + } + byNameList.Add(ci); + + this.channels.Add(ci); + + return warning2; + } + #endregion + + #region GetChannelByUid() + public IList GetChannelByUid(string uid) + { + IList channel; + this.channelByUid.TryGetValue(uid, out channel); + return channel ?? new List(0); + } + #endregion + + #region ToString() + public override string ToString() + { + return this.Caption; + } + #endregion + + #region GetChannelByName() + public IEnumerable GetChannelByName(string name) + { + var hits = this.channelByName.TryGet(name.ToLower().Trim()); + return hits ?? new List(); + } + #endregion + + #region GetChannelByNewProgNr() + public IList GetChannelByNewProgNr(int newProgNr) + { + return this.channels.Where(c => c.NewProgramNr == newProgNr).ToList(); + } + #endregion + } +} diff --git a/ChanSort.Api/Model/DataRoot.cs b/ChanSort.Api/Model/DataRoot.cs new file mode 100644 index 0000000..36a3a32 --- /dev/null +++ b/ChanSort.Api/Model/DataRoot.cs @@ -0,0 +1,82 @@ +using System.Collections.Generic; +using System.Text; + +namespace ChanSort.Api +{ + public class DataRoot + { + private readonly IDictionary satellites = new Dictionary(); + private readonly IDictionary transponder = new Dictionary(); + private readonly IList channelLists = new List(); + private readonly StringBuilder warnings = new StringBuilder(); + + public StringBuilder Warnings { get { return this.warnings; } } + public IDictionary Satellites { get { return this.satellites; } } + public IDictionary Transponder { get { return this.transponder; } } + public ICollection ChannelLists { get { return this.channelLists; } } + public bool IsEmpty { get { return this.channelLists.Count == 0; } } + public bool NeedsSaving { get; set; } + public Favorites SupportedFavorites { get; set; } + + public DataRoot() + { + this.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D; + } + + #region AddSatellite() + public virtual void AddSatellite(Satellite satellite) + { + this.satellites.Add(satellite.Id, satellite); + } + #endregion + + #region AddTransponder() + public virtual void AddTransponder(Satellite sat, Transponder trans) + { + trans.Satellite = sat; + if (this.transponder.ContainsKey(trans.Id)) + { + this.warnings.AppendFormat("Duplicate transponder data record for satellite #{0} with id {1}\r\n", sat.Id, trans.Id); + return; + } + sat.Transponder.Add(trans.Id, trans); + this.transponder.Add(trans.Id, trans); + } + #endregion + + #region AddChannelList() + public virtual void AddChannelList(ChannelList list) + { + this.channelLists.Add(list); + } + #endregion + + #region AddChannel() + public virtual void AddChannel(ChannelList list, ChannelInfo channel) + { + string warning = list.AddChannel(channel); + if (warning != null) + this.Warnings.AppendLine(warning); + } + #endregion + + + #region GetChannelList() + public ChannelList GetChannelList(SignalSource signalSource, SignalType signalType, bool createIfNotExists) + { + foreach (var list in this.channelLists) + { + if ((list.SignalSource&SignalSource.Digital) != (signalSource&SignalSource.Digital)) // match digital/analog + continue; + if (((int)list.SignalSource & 0x0F & (int)signalSource) == 0) // match any of cable/terrestrial/satellite + continue; + if (list.SignalType == signalType || list.SignalType == SignalType.Mixed) // match radio/tv/any + return list; + } + ChannelList newList = new ChannelList(signalSource, signalType); + this.AddChannelList(newList); + return newList; + } + #endregion + } +} diff --git a/ChanSort.Api/Model/Enums.cs b/ChanSort.Api/Model/Enums.cs new file mode 100644 index 0000000..fbde3bd --- /dev/null +++ b/ChanSort.Api/Model/Enums.cs @@ -0,0 +1,36 @@ +using System; + +namespace ChanSort.Api +{ + [Flags] + public enum SignalSource + { + Analog = 0x00, + Digital = 0x10, + + Cable = 0x01, + Antenna = 0x02, + Sat = 0x04, + HdPlus = 0x08, + + AnalogC=Analog + Cable, + AnalogT=Analog + Antenna, + AnalogCT=Analog + Cable + Antenna, + DvbC = Digital + Cable, + DvbT= Digital + Antenna, + DvbCT= Digital + Cable + Antenna, + DvbS= Digital + Sat, + HdPlusD = Digital + HdPlus + } + public enum SignalType { Tv, Radio, Mixed } + + [Flags] + public enum Favorites : byte { A = 0x01, B = 0x02, C = 0x04, D = 0x08, E = 0x10 } + + public enum UnsortedChannelMode + { + AppendInOrder, + AppendAlphabetically, + Hide + } +} diff --git a/ChanSort.Api/Model/LookupData.cs b/ChanSort.Api/Model/LookupData.cs new file mode 100644 index 0000000..e12ee80 --- /dev/null +++ b/ChanSort.Api/Model/LookupData.cs @@ -0,0 +1,198 @@ +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace ChanSort.Api +{ + public class LookupData + { + private readonly IDictionary networks = new Dictionary(); + private readonly IDictionary transponderNrByFreqInMhz = new Dictionary(); + private readonly IDictionary transponderFreqInMhzByNr = new Dictionary(); + private readonly IDictionary serviceTypeDescriptions = new Dictionary(); + private readonly IDictionary dvbtFreqInMhzByTransponder = new Dictionary(); + + public static readonly LookupData Instance = new LookupData(); + + private LookupData() + { + this.LoadDataFromCsvFile(); + } + + #region GetNetwork() + public NetworkInfo GetNetwork(int networkId) + { + NetworkInfo network; + this.networks.TryGetValue((ushort)networkId, out network); + return network; + } + #endregion + + #region GetTransponderNumber(), GetTransponderFrequency() + public int GetTransponderNumber(int frequencyInMhz) + { + int number; + bool found = this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz, out number) || + this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz - 1, out number) || + this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz + 1, out number) || + this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz - 2, out number) || + this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz + 2, out number); + return found ? number : 0; + } + + public int GetTransponderFrequency(int transponderNr) + { + return this.transponderNrByFreqInMhz.TryGet(transponderNr); + } + #endregion + + #region GetDvbtTransponderFrequency() + public int GetDvbtTransponderFrequency(int transponderNr) + { + return this.dvbtFreqInMhzByTransponder.TryGet(transponderNr); + } + #endregion + + #region GetServiceTypeDescription() + public string GetServiceTypeDescription(int serviceType) + { + string descr; + this.serviceTypeDescriptions.TryGetValue(serviceType, out descr); + return descr; + } + #endregion + + #region LoadDataFromCsvFile() + public void LoadDataFromCsvFile() + { + this.networks.Clear(); + this.transponderFreqInMhzByNr.Clear(); + this.transponderNrByFreqInMhz.Clear(); + this.serviceTypeDescriptions.Clear(); + this.dvbtFreqInMhzByTransponder.Clear(); + + string file = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "lookup.csv"); + if (!File.Exists(file)) + return; + using (var reader = new StreamReader(file, System.Text.Encoding.UTF8)) + { + string line; + while ((line = reader.ReadLine()) != null) + { + var fields = CsvFile.Parse(line, ';'); + if (fields.Count == 0) + continue; + switch (fields[0].ToLower()) + { + case "onid": this.ParseNetwork(fields); break; + case "dvbt": this.ParseDvbtTransponder(fields); break; + case "transp": this.ParseTransponder(fields); break; + case "servicetype": this.ParseServiceType(fields); break; + } + } + } + } + #endregion + + #region AddNetwork() + private void AddNetwork(NetworkInfo network) + { + this.networks[network.OriginalNetworkId] = network; + } + #endregion + + #region AddTransponderMapping() + private void AddTransponderMapping(int transponderNr, int frequencyInMhz) + { + this.transponderNrByFreqInMhz[frequencyInMhz] = transponderNr; + this.transponderFreqInMhzByNr[transponderNr] = frequencyInMhz; + } + #endregion + + #region AddDvbtTransponderMapping() + private void AddDvbtTransponderMapping(int transponderNr, int frequencyInMhz) + { + this.dvbtFreqInMhzByTransponder[transponderNr] = frequencyInMhz; + } + #endregion + + #region AddServiceType() + public void AddServiceType(int serviceType, string description) + { + this.serviceTypeDescriptions[serviceType] = description; + } + #endregion + + #region ParseNetwork() + private void ParseNetwork(IList fields) + { + if (fields.Count < 3) + return; + int start = ParseNumber(fields[1]); + int end = ParseNumber(fields[2]); + if (start == 0 || end == 0 || start > end) + return; + for (int onid = start; onid <= end; onid++) + { + var network = new NetworkInfo(); + network.OriginalNetworkId = onid; + if (fields.Count >= 4) + network.Name = fields[3]; + if (fields.Count >= 5) + network.Operator = fields[4]; + this.AddNetwork(network); + } + } + #endregion + + #region ParseNumber() + private int ParseNumber(string nr) + { + int number; + if (nr.StartsWith("0x")) + int.TryParse(nr.Substring(2), System.Globalization.NumberStyles.HexNumber, System.Globalization.NumberFormatInfo.InvariantInfo, out number); + else + int.TryParse(nr, System.Globalization.NumberStyles.Integer, System.Globalization.NumberFormatInfo.InvariantInfo, out number); + return number; + } + #endregion + + #region ParseTransponder() + private void ParseTransponder(IList fields) + { + if (fields.Count < 3) + return; + int nr, freq; + int.TryParse(fields[1], out nr); + int.TryParse(fields[2], out freq); + if (nr == 0 || freq == 0) + return; + this.AddTransponderMapping(nr, freq); + } + #endregion + + #region ParseTransponder() + private void ParseDvbtTransponder(IList fields) + { + if (fields.Count < 3) + return; + int nr, freq; + int.TryParse(fields[1], out nr); + int.TryParse(fields[2], out freq); + if (nr == 0 || freq == 0) + return; + this.AddDvbtTransponderMapping(nr, freq); + } + #endregion + + #region ParseServiceType() + private void ParseServiceType(IList fields) + { + if (fields.Count < 3) return; + int serviceType = this.ParseNumber(fields[1]); + if (serviceType <= 0) return; + this.AddServiceType(serviceType, fields[2]); + } + #endregion + } +} diff --git a/ChanSort.Api/Model/NetworkInfo.cs b/ChanSort.Api/Model/NetworkInfo.cs new file mode 100644 index 0000000..3adb984 --- /dev/null +++ b/ChanSort.Api/Model/NetworkInfo.cs @@ -0,0 +1,9 @@ +namespace ChanSort.Api +{ + public class NetworkInfo + { + public int OriginalNetworkId { get; set; } + public string Name { get; set; } + public string Operator { get; set; } + } +} diff --git a/ChanSort.Api/Model/Satellite.cs b/ChanSort.Api/Model/Satellite.cs new file mode 100644 index 0000000..a74c460 --- /dev/null +++ b/ChanSort.Api/Model/Satellite.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace ChanSort.Api +{ + public class Satellite + { + private readonly int id; + private readonly IDictionary transponder = new Dictionary(); + + public int Id { get { return this.id; } } + public string Name { get; set; } + public string OrbitalPosition { get; set; } + public IDictionary Transponder { get { return this.transponder; } } + + public Satellite(int id) + { + this.id = id; + } + + public override string ToString() + { + return Name; + } + } +} diff --git a/ChanSort.Api/Model/Transponder.cs b/ChanSort.Api/Model/Transponder.cs new file mode 100644 index 0000000..c1191d5 --- /dev/null +++ b/ChanSort.Api/Model/Transponder.cs @@ -0,0 +1,22 @@ +namespace ChanSort.Api +{ + public class Transponder + { + private readonly int id; + + public int Id { get { return id; } } + public Satellite Satellite { get; set; } + public decimal FrequencyInMhz { get; set; } + public int Number { get; set; } + public int SymbolRate { get; set; } + public char Polarity { get; set; } + public int OriginalNetworkId { get; set; } + public int TransportStreamId { get; set; } + + public Transponder(int id) + { + this.id = id; + } + + } +} diff --git a/ChanSort.Api/Properties/AssemblyInfo.cs b/ChanSort.Api/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..41ef729 --- /dev/null +++ b/ChanSort.Api/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("API")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("API")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5cd52683-ba04-4610-8435-ba409a37e08f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// 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("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ChanSort.Api/Resources.Designer.cs b/ChanSort.Api/Resources.Designer.cs new file mode 100644 index 0000000..8de5a0e --- /dev/null +++ b/ChanSort.Api/Resources.Designer.cs @@ -0,0 +1,81 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.586 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ChanSort.Api { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Api.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to {0}: Channel '{1}' has multiple data records: index {2}=Pr#{3} and index {4}=Pr#{5}. + /// + internal static string ChannelList_AddChannel__DuplicateUid { + get { + return ResourceManager.GetString("ChannelList_AddChannel__DuplicateUid", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} Program #{1} is assigned to multiple channels: index {2}='{3}' and index {4}='{5}'. + /// + internal static string ChannelList_ProgramNrAssignedToMultipleChannels { + get { + return ResourceManager.GetString("ChannelList_ProgramNrAssignedToMultipleChannels", resourceCulture); + } + } + } +} diff --git a/ChanSort.Api/Resources.de.Designer.cs b/ChanSort.Api/Resources.de.Designer.cs new file mode 100644 index 0000000..e69de29 diff --git a/ChanSort.Api/Resources.de.resx b/ChanSort.Api/Resources.de.resx new file mode 100644 index 0000000..97ce43a --- /dev/null +++ b/ChanSort.Api/Resources.de.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} Program #{1} ist mehreren Sendern zugeordnet: Index {2}='{3}' und Index {4}='{5}' + + + {0}: Sender '{1}' ist in mehreren Datensätzen enthalten: Index {2}=Pr#{3} und Index {4}=Pr#{5} + + \ No newline at end of file diff --git a/ChanSort.Api/Resources.resx b/ChanSort.Api/Resources.resx new file mode 100644 index 0000000..57683a7 --- /dev/null +++ b/ChanSort.Api/Resources.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} Program #{1} is assigned to multiple channels: index {2}='{3}' and index {4}='{5}' + + + {0}: Channel '{1}' has multiple data records: index {2}=Pr#{3} and index {4}=Pr#{5} + + \ No newline at end of file diff --git a/ChanSort.Api/Utils/ChannelMappingBase.cs b/ChanSort.Api/Utils/ChannelMappingBase.cs new file mode 100644 index 0000000..065c9d7 --- /dev/null +++ b/ChanSort.Api/Utils/ChannelMappingBase.cs @@ -0,0 +1,151 @@ +using System.Text; + +namespace ChanSort.Api +{ + public unsafe class ChannelMappingBase : DataMapping + { + protected const string offInUse = "offInUse"; + protected const string maskInUse = "maskInUse"; + protected const string offProgramNr = "offProgramNr"; + protected const string offName = "offName"; + protected const string offNameLength = "offNameLength"; + protected const string lenName = "lenName"; + protected const string offSkip = "offSkip"; + protected const string maskSkip = "maskSkip"; + protected const string offLock = "offLock"; + protected const string maskLock = "maskLock"; + protected const string offLockSkipHide = "offHide"; + protected const string maskHide = "maskHide"; + protected const string offFavorites = "offFavorites"; + private const string offDeleted = "offDeleted"; + private const string maskDeleted = "maskDeleted"; + + #region ctor() + public ChannelMappingBase(IniFile.Section settings, int length, Encoding stringEncoding) : + base(settings, length, stringEncoding) + { + } + #endregion + + #region InUse + public virtual bool InUse + { + get + { + var val = this.GetOffsets(offInUse); + return val.Length == 0 || this.GetFlag(offInUse, maskInUse); + } + } + #endregion + + #region ProgramNr + public virtual ushort ProgramNr + { + get { return this.GetWord(offProgramNr); } + set { this.SetWord(offProgramNr, value); } + } + #endregion + + #region NameLength + public virtual int NameLength + { + get + { + var off = this.GetOffsets(offNameLength); + if (off.Length > 0) + return this.GetWord(off[0]); + return MaxNameLength; + } + set { this.SetByte(offNameLength, (byte) value); } + } + #endregion + + #region MaxNameLength + public virtual int MaxNameLength + { + get + { + var off = this.GetOffsets(lenName); // not an offset! + return off.Length > 0 ? off[0] : 0; + } + } + #endregion + + #region Name + public virtual string Name + { + get { return this.GetString(offName, this.NameLength); } +// ReSharper disable ValueParameterNotUsed + set { } +// ReSharper restore ValueParameterNotUsed + } + #endregion + + #region NamePtr + + public virtual byte* NamePtr + { + get { return this.DataPtr + this.GetOffsets(offName)[0]; } + set + { + int maxLen = this.MaxNameLength - 1; + if (maxLen == 0) + maxLen = this.NameLength; + foreach (int off in this.GetOffsets(offName)) + { + int i; + for (i = 0; i < maxLen && value[i] != 0; i++) + this.DataPtr[off + i] = value[i]; + for (; i <= maxLen; i++) + this.DataPtr[off + i] = 0; + } + } + } + #endregion + + #region ShortName + public virtual string ShortName { get; set; } + #endregion + + #region Skip + public virtual bool Skip + { + get { return this.GetFlag(offSkip, maskSkip); } + set { this.SetFlag(offSkip, maskSkip, value); } + } + #endregion + + #region Lock + public virtual bool Lock + { + get { return this.GetFlag(offLock, maskLock); } + set { this.SetFlag(offLock, maskLock, value); } + } + #endregion + + #region Hide + public virtual bool Hide + { + get { return this.GetFlag(offLockSkipHide, maskHide); } + set { this.SetFlag(offLockSkipHide, maskHide, value); } + } + #endregion + + #region Favorites + public virtual Favorites Favorites + { + get { return (Favorites) this.GetByte(offFavorites); } + set { this.SetByte(offFavorites, (byte) value); } + } + #endregion + + #region IsDeleted + public virtual bool IsDeleted + { + get { return this.GetFlag(offDeleted, maskDeleted); } + set { this.SetFlag(offDeleted, maskDeleted, value); } + } + #endregion + } + +} diff --git a/ChanSort.Api/Utils/Crc32.cs b/ChanSort.Api/Utils/Crc32.cs new file mode 100644 index 0000000..43ae1c9 --- /dev/null +++ b/ChanSort.Api/Utils/Crc32.cs @@ -0,0 +1,60 @@ +namespace ChanSort.Api +{ + public static class Crc32 + { + private const uint CrcMask = 0xFFFFFFFF; + private const uint CrcPoly = 0xEDB88320; + + private static readonly uint[] crc32Table; + + static Crc32() + { + crc32Table = InitCrc32Table(); + } + + #region InitCrc32Table() + + private static uint[] InitCrc32Table() + { + var crcTable = new uint[256]; + for (uint i = 0; i < 256; i++) + { + uint r = i; + for (uint j = 8; j > 0; j--) + { + if ((r & 1) == 1) + r = ((r >> 1) ^ CrcPoly); + else + r >>= 1; + } + crcTable[i] = r; + } + return crcTable; + } + #endregion + + #region CalcCrc32() + public static unsafe uint CalcCrc32(byte* block, int length) + { + uint crc32 = CrcMask; + for (int i = 0; i < length; i++) + crc32 = crc32Table[(crc32 & 0xff) ^ block[i]] ^ (crc32 >> 8); + return crc32; + } + #endregion + + #region Crack() + public static unsafe int Crack(byte* block, int maxLen, uint checksum) + { + uint crc32 = CrcMask; + for (int i = 0; i < maxLen; i++) + { + if (crc32 == checksum) + return i; + crc32 = crc32Table[(crc32 & 0xff) ^ block[i]] ^ (crc32 >> 8); + } + return 0; + } + #endregion + } +} diff --git a/ChanSort.Api/Utils/CsvFile.cs b/ChanSort.Api/Utils/CsvFile.cs new file mode 100644 index 0000000..9ad4147 --- /dev/null +++ b/ChanSort.Api/Utils/CsvFile.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using System.Text; + +namespace ChanSort.Api +{ + public static class CsvFile + { + public static IList Parse(string line, char separator) + { + if (line.EndsWith("\n")) line = line.Substring(0, line.Length - 1); + if (line.EndsWith("\r")) line = line.Substring(0, line.Length - 1); + + List tokens = new List(); + if (line.Length == 0) + return tokens; + + bool inQuote = false; + StringBuilder token = new StringBuilder(); + for(int i = 0, len=line.Length; i 0 ? this.GetByte(offsets[0]) : (byte)0; + } + #endregion + + #region GetWord() + public ushort GetWord(int off) + { + return off < 0 ? (ushort)0 : *(ushort*) (this.DataPtr + off); + } + + public ushort GetWord(string key) + { + var offsets = settings.GetIntList(key); + return offsets.Length > 0 ? this.GetWord(offsets[0]) : (ushort)0; + } + #endregion + + #region GetDword() + public uint GetDword(int off) + { + return off < 0 ? 0 : *(uint*) (this.DataPtr + off); + } + + public uint GetDword(string key) + { + var offsets = settings.GetIntList(key); + return offsets.Length > 0 ? this.GetDword(offsets[0]) : 0; + } + #endregion + + #region GetFloat() + public float GetFloat(int off) + { + return off < 0 ? 0 : *(float*) (this.DataPtr + off); + } + + public float GetFloat(string key) + { + var offsets = settings.GetIntList(key); + return offsets.Length > 0 ? this.GetFloat(offsets[0]) : 0; + } + #endregion + + #region GetFlag() + public bool GetFlag(int offset, byte mask) + { + return offset >= 0 && (this.GetByte(offset) & mask) != 0; + } + + public bool GetFlag(string valueKey, string maskKey) + { + byte mask = (byte)settings.GetInt(maskKey); + var offsets = settings.GetIntList(valueKey); + return offsets.Length > 0 && this.GetFlag(offsets[0], mask); + } + #endregion + + #region GetString() + public string GetString(int offset, int maxByteLen) + { + if (offset < 0) return null; + byte[] buffer = new byte[maxByteLen]; + for (int i = 0; i < maxByteLen; i++) + buffer[i] = this.DataPtr[offset + i]; + return stringEncoding.GetString(buffer).TrimEnd('\0'); + } + + public string GetString(string key, int maxLen) + { + var offsets = settings.GetIntList(key); + return offsets.Length == 0 ? null : GetString(offsets[0], maxLen); + } + #endregion + + + #region SetByte() + public void SetByte(int off, byte value) + { + if (off >= 0) + this.DataPtr[off] = value; + } + + public void SetByte(string key, byte value) + { + var offsets = settings.GetIntList(key); + foreach(int offset in offsets) + this.SetByte(offset, value); + } + #endregion + + #region SetWord() + public void SetWord(int off, int value) + { + if (off >= 0) + *(ushort*) (this.DataPtr + off) = (ushort)value; + } + + public void SetWord(string key, int value) + { + var offsets = settings.GetIntList(key); + foreach (int offset in offsets) + this.SetWord(offset, value); + } + #endregion + + #region SetDword() + public void SetDword(int off, uint value) + { + if (off >= 0) + *(uint*) (this.DataPtr + off) = value; + } + + public void SetDword(string key, uint value) + { + var offsets = settings.GetIntList(key); + foreach (int offset in offsets) + this.SetDword(offset, value); + } + #endregion + + #region SetFloat() + public void SetFloat(int off, float value) + { + if (off >= 0) + *(float*)(this.DataPtr + off) = value; + } + + public void SetFloat(string key, float value) + { + var offsets = settings.GetIntList(key); + foreach (int offset in offsets) + this.SetFloat(offset, value); + } + #endregion + + #region SetFlag() + public void SetFlag(int offset, byte mask, bool set) + { + byte val = this.GetByte(offset); + this.SetByte(offset, (byte)(set ? val | mask : val & ~mask)); + } + + public void SetFlag(string valueKey, string maskKey, bool set) + { + byte mask = (byte)settings.GetInt(maskKey); + var offsets = settings.GetIntList(valueKey); + foreach (int offset in offsets) + this.SetFlag(offset, mask, set); + } + #endregion + } + +} diff --git a/ChanSort.Api/Utils/DvbChannelMappingBase.cs b/ChanSort.Api/Utils/DvbChannelMappingBase.cs new file mode 100644 index 0000000..d64c1aa --- /dev/null +++ b/ChanSort.Api/Utils/DvbChannelMappingBase.cs @@ -0,0 +1,125 @@ +using System.Text; + +namespace ChanSort.Api +{ + public class DvbChannelMappingBase : ChannelMappingBase + { + protected const string offChannelTransponder = "offChannelTransponder"; + protected const string offPcrPid = "offPcrPid"; + protected const string offVideoPid = "offVideoPid"; + protected const string offAudioPid = "offAudioPid"; + protected const string offServiceId = "offServiceId"; + protected const string offOriginalNetworkId = "offOriginalNetworkId"; + protected const string offTransportStreamId = "offTransportStreamId"; + protected const string offServiceType = "offServiceType"; + protected const string offSymbolRate = "offSymbolRate"; + protected const string offEncrypted = "offEncrypted"; + protected const string maskEncrypted = "maskEncrypted"; + protected const string offShortName = "offShortName"; + protected const string offShortNameLength = "offShortNameLength"; + protected const string lenShortName = "lenShortName"; + + + #region ctor() + public DvbChannelMappingBase(IniFile.Section settings, int dataLength, Encoding stringEncoding) + : base(settings, dataLength, stringEncoding) + { + } + #endregion + + #region ChannelOrTransponder + public virtual byte ChannelOrTransponder + { + get { return this.GetByte(offChannelTransponder); } + set { this.SetByte(offChannelTransponder, value); } + } + #endregion + + #region ShortName + public int ShortNameLength + { + get + { + var off = this.GetOffsets(offShortNameLength); + if (off.Length > 0) + return this.GetWord(off[0]); + off = this.GetOffsets(lenShortName); // not an offset! + return off.Length > 0 ? off[0] : 0; + } + } + + public override string ShortName { get { return this.GetString(offShortName, this.ShortNameLength); } } + #endregion + + #region PcrPid + public virtual ushort PcrPid + { + get { return this.GetWord(offPcrPid); } + set { this.SetWord(offPcrPid, value); } + } + #endregion + + #region VideoPid + public virtual ushort VideoPid + { + get { return this.GetWord(offVideoPid); } + set { this.SetWord(offVideoPid, value); } + } + #endregion + + #region AudioPid + public virtual ushort AudioPid + { + get { return this.GetWord(offAudioPid); } + set { this.SetWord(offAudioPid, value); } + } + #endregion + + #region ServiceId + public virtual ushort ServiceId + { + get { return this.GetWord(offServiceId); } + set { this.SetWord(offServiceId, value); } + } + #endregion + + #region OriginalNetworkId + public virtual ushort OriginalNetworkId + { + get { return this.GetWord(offOriginalNetworkId); } + set { this.SetWord(offOriginalNetworkId, value); } + } + #endregion + + #region TransportStreamId + public virtual ushort TransportStreamId + { + get { return this.GetWord(offTransportStreamId); } + set { this.SetWord(offTransportStreamId, value); } + } + #endregion + + #region ServiceType + public virtual byte ServiceType + { + get { return this.GetByte(offServiceType); } + set { this.SetByte(offServiceType, value); } + } + #endregion + + #region SymbolRate + public virtual ushort SymbolRate + { + get { return this.GetWord(offSymbolRate); } + set { this.SetWord(offSymbolRate, value); } + } + #endregion + + #region Encrypted + public virtual bool Encrypted + { + get { return this.GetFlag(offEncrypted, maskEncrypted); } + } + #endregion + } +} diff --git a/ChanSort.Api/Utils/DvbStringDecoder.cs b/ChanSort.Api/Utils/DvbStringDecoder.cs new file mode 100644 index 0000000..2bfbc96 --- /dev/null +++ b/ChanSort.Api/Utils/DvbStringDecoder.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace ChanSort.Api +{ + #region Documentation + /* + ETSI EN 300 468 + + For one-byte character tables, the codes in the range 0x80 to 0x9F are assigned to control functions + as shown in Table A.1: Single byte control codes + + Control code - Control code Description + 0x80 to 0x85 reserved for future use + 0x86 character emphasis on + 0x87 character emphasis off + 0x88 to 0x89 reserved for future use + 0x8A CR/LF + 0x8B to 0x9F user defined + + A.2 Selection of character table + First byte value - Character code table - Table description - Reproduced in figure + 0x01 ISO/IEC 8859-5 [27] Latin/Cyrillic alphabet A.2 + 0x02 ISO/IEC 8859-6 [28] Latin/Arabic alphabet A.3 + 0x03 ISO/IEC 8859-7 [29] Latin/Greek alphabet A.4 + 0x04 ISO/IEC 8859-8 [30] Latin/Hebrew alphabet A.5 + 0x05 ISO/IEC 8859-9 [31] Latin alphabet No. 5 A.6 + 0x06 ISO/IEC 8859-10 [32] Latin alphabet No. 6 A.7 + 0x07 ISO/IEC 8859-11 [33] Latin/Thai (draft only) A.8 + 0x08 reserved for future use (see note) + 0x09 ISO/IEC 8859-13 [34] Latin alphabet No. 7 A.9 + 0x0A ISO/IEC 8859-14 [35] Latin alphabet No. 8 (Celtic) A.10 + 0x0B ISO/IEC 8859-15 [36] Latin alphabet No. 9 A.11 + 0x0C to 0x0F reserved for future use + 0x10 ISO/IEC 8859 See table A.4 + 0x11 ISO/IEC 10646 [16] Basic Multilingual Plane (BMP) + 0x12 KSX1001-2004 [44] Korean Character Set + 0x13 GB-2312-1980 Simplified Chinese Character + 0x14 Big5 subset of ISO/IEC 10646 [16] Traditional Chinese + 0x15 UTF-8 encoding of ISO/IEC 10646 [16] Basic Multilingual Plane (BMP) + 0x16 to 0x1E reserved for future use + 0x1F Described by encoding_type_id Described by 8 bit + + Table A.4: Character Coding Tables for first byte 0x10 + First byte value - Second byte value - Third Byte Value - Selected character code - table - Table Description + 0x10 0x00 0x00 reserved for future use + 0x10 0x00 0x01 ISO/IEC 8859-1 [23] West European + 0x10 0x00 0x02 ISO/IEC 8859-2 [24] East European + 0x10 0x00 0x03 ISO/IEC 8859-3 [25] South European + 0x10 0x00 0x04 ISO/IEC 8859-4 [26] North and North-East European + 0x10 0x00 0x05 ISO/IEC 8859-5 [27] Latin/Cyrillic A.2 + 0x10 0x00 0x06 ISO/IEC 8859-6 [28] Latin/Arabic A.3 + 0x10 0x00 0x07 ISO/IEC 8859-7 [29] Latin/Greek A.4 + 0x10 0x00 0x08 ISO/IEC 8859-8 [30] Latin/Hebrew A.5 + 0x10 0x00 0x09 ISO/IEC 8859-9 [31] West European & Turkish A.6 + 0x10 0x00 0x0A ISO/IEC 8859-10 [32] North European A.7 + 0x10 0x00 0x0B ISO/IEC 8859-11 [33] Thai A.8 + 0x10 0x00 0x0C Reserved for future use + 0x10 0x00 0x0D ISO/IEC 8859-13 [34] Baltic A.9 + 0x10 0x00 0x0E ISO/IEC 8859-14 [35] Celtic A.10 + 0x10 0x00 0x0F ISO/IEC 8859-15 [36] West European A.11 + */ + #endregion + + public class DvbStringDecoder + { + static readonly string[] codePages1 = + { + null, "iso-8859-5", "iso-8859-6", "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso-8859-10", "iso-8859-11", + null, "iso-8859-13", "iso-8859-14", "iso-8859-15", null, null, null, null, + null, // codePages2 prefix + "utf-16", "x-cp20949", "x-cp20936", "utf-16", "utf-8", null, null, null + }; + + static readonly string[] codePages2 = + { + null, "iso-8859-1", "iso-8859-2", "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", "iso-8859-7", + "iso-8859-8", "iso-8859-9", "iso-8859-10", "iso-8859-11", null, "iso-8859-13", "iso-8859-14", "iso-8859-15" + }; + + private readonly Dictionary decoderCache = new Dictionary(); + + public DvbStringDecoder(Encoding defaultEncoding) + { + this.DefaultEncoding = defaultEncoding; + } + + public Encoding DefaultEncoding { get; set; } + + #region GetChannelNames() + public unsafe void GetChannelNames(byte* name, int len, out string longName, out string shortName) + { + StringBuilder sbLong = new StringBuilder(); + StringBuilder sbShort = new StringBuilder(); + Decoder decoder = this.DefaultEncoding.GetDecoder(); + bool inShortMode = false; + for (int i = 0; i < len; i++) + { + byte b = name[i]; + if (b == 0x00) + break; + if (b == 0x10) // prefix for 3-byte code page + { + int cpIndex = name[i + 1] * 256 + name[i + 2]; + i += 2; + SetDecoder(codePages2, cpIndex, ref decoder); + continue; + } + if (b <= 0x1F) + { + SetDecoder(codePages1, b, ref decoder); + continue; + } + + char ch = '\0'; + switch (b) + { + case 0x86: inShortMode = true; break; + case 0x87: inShortMode = false; break; + case 0x8a: ch = '\n'; break; + default: + // read as many bytes as necessary to get a character + char[] charArray = new char[1]; + fixed (char* pCh = charArray) + { + byte* start = name + i; + for (int j = 1; i < len && decoder.GetChars(start, j, pCh, 1, true) == 0; ++j) + ++i; + } + ch = charArray[0]; + break; + } + + if (ch == '\0') + continue; + + sbLong.Append(ch); + if (inShortMode) + sbShort.Append(ch); + } + longName = sbLong.ToString(); + shortName = sbShort.ToString(); + } + #endregion + + #region SetDecoder() + private void SetDecoder(string[] codePages, int cpIndex, ref Decoder defaultDecoder) + { + if (cpIndex >= codePages.Length) + return; + Decoder decoder; + + string cp = codePages[cpIndex]; + if (cp == null) + return; + + if (this.decoderCache.TryGetValue(cp, out decoder)) + { + defaultDecoder = decoder; + return; + } + + try + { + var encoding = Encoding.GetEncoding(cp); + defaultDecoder = encoding.GetDecoder(); + } + catch (ArgumentException) + { + } + decoderCache[cp] = defaultDecoder; + } + #endregion + + #region GetCodepageBytes() + public static byte[] GetCodepageBytes(Encoding encoding) + { + var encName = encoding.WebName; + for (int i = 0; i < codePages1.Length; i++) + { + if (codePages1[i] == encName) + return new [] {(byte)i}; + } + + for (int i = 0; i < codePages2.Length; i++) + { + if (codePages2[i] == encName) + return new[] { (byte)0x10, (byte)i }; + } + + return new byte[0]; + } + #endregion + } +} diff --git a/ChanSort.Api/Utils/IniFile.cs b/ChanSort.Api/Utils/IniFile.cs new file mode 100644 index 0000000..4e719a2 --- /dev/null +++ b/ChanSort.Api/Utils/IniFile.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace ChanSort.Api +{ + public class IniFile + { + #region class Section + + public class Section + { + private readonly Dictionary data = new Dictionary(StringComparer.CurrentCultureIgnoreCase); + + public Section(string name) + { + this.Name = name; + } + + #region Name + public string Name { get; private set; } + #endregion + + #region Set() + internal void Set(string key, string value) + { + data[key] = value; + } + #endregion + + #region Keys + public IEnumerable Keys { get { return data.Keys; } } + #endregion + + #region GetString() + + public string GetString(string key) + { + string value; + if (!data.TryGetValue(key, out value)) + return null; + return value; + } + + #endregion + + #region GetInt() + + public int GetInt(string key, int defaultValue = 0) + { + string value; + if (!data.TryGetValue(key, out value)) + return defaultValue; + return this.ParseNumber(value); + } + + #endregion + + #region GetBytes() + + public byte[] GetBytes(string key) + { + string value; + if (!data.TryGetValue(key, out value)) + return null; + if (string.IsNullOrEmpty(value)) + return new byte[0]; + + string[] parts = value.Split(','); + byte[] bytes = new byte[parts.Length]; + int i = 0; + foreach (var part in parts) + bytes[i++] = (byte)this.ParseNumber(part); + return bytes; + } + + #endregion + + #region GetIntList() + public int[] GetIntList(string key) + { + string value = this.GetString(key); + if (string.IsNullOrEmpty(value)) + return new int[0]; + string[] numbers = value.Split(','); + int[] ret = new int[numbers.Length]; + for (int i = 0; i < numbers.Length; i++) + ret[i] = this.ParseNumber(numbers[i]); + return ret; + } + #endregion + + #region ParseNumber() + private int ParseNumber(string value) + { + if (value.ToLower().StartsWith("0x")) + { + try { return Convert.ToInt32(value, 16); } + catch { return 0; } + } + int intValue; + int.TryParse(value, out intValue); + return intValue; + } + #endregion + } + #endregion + + private readonly Dictionary sectionDict; + private readonly List
sectionList; + + public IniFile(string fileName) + { + this.sectionDict = new Dictionary(); + this.sectionList = new List
(); + this.ReadIniFile(fileName); + } + + public IEnumerable
Sections + { + get { return this.sectionList; } + } + + public Section GetSection(string sectionName) + { + return sectionDict.TryGet(sectionName); + } + + #region ReadIniFile() + private void ReadIniFile(string fileName) + { + using (StreamReader rdr = new StreamReader(fileName)) + { + Section currentSection = null; + string line; + while ((line = rdr.ReadLine()) != null) + { + string trimmedLine = line.Trim(); + if (trimmedLine.StartsWith(";")) + continue; + if (trimmedLine.StartsWith("[")) + { + string sectionName = trimmedLine.EndsWith("]") + ? trimmedLine.Substring(1, trimmedLine.Length - 2) + : trimmedLine.Substring(1); + currentSection = new Section(sectionName); + this.sectionList.Add(currentSection); + this.sectionDict[sectionName] = currentSection; + continue; + } + if (currentSection == null) + continue; + int idx = trimmedLine.IndexOf("="); + if (idx < 0) + continue; + string key = trimmedLine.Substring(0, idx).Trim(); + string val = trimmedLine.Substring(idx + 1).Trim(); + currentSection.Set(key, val); + } + } + } + #endregion + } +} diff --git a/ChanSort.Api/Utils/MappingPool.cs b/ChanSort.Api/Utils/MappingPool.cs new file mode 100644 index 0000000..9329efa --- /dev/null +++ b/ChanSort.Api/Utils/MappingPool.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace ChanSort.Api +{ + public class MappingPool where T : DataMapping + { + private const string ERR_unknownACTChannelDataLength = "Configuration doesn't contain a {0} data mapping for length {1}"; + private readonly Dictionary mappings = new Dictionary(); + private readonly string caption; + + public MappingPool(string caption) + { + this.caption = caption; + } + + public void AddMapping(T mapping) + { + mappings[mapping.DataLength] = mapping; + } + + public T GetMapping(int dataLength, bool throwException = true) + { + if (dataLength == 0) + return null; + + T mapping; + if (!mappings.TryGetValue(dataLength, out mapping) && throwException) + throw new Exception(string.Format(ERR_unknownACTChannelDataLength, this.caption, dataLength)); + return mapping; + } + } +} diff --git a/ChanSort.Api/Utils/Tools.cs b/ChanSort.Api/Utils/Tools.cs new file mode 100644 index 0000000..75c4809 --- /dev/null +++ b/ChanSort.Api/Utils/Tools.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using System.Text; + +namespace ChanSort.Api +{ + public static class Tools + { + public static V TryGet(this IDictionary dict, K key) + { + V val; + dict.TryGetValue(key, out val); + return val; + } + + public static unsafe string GetString(this Encoding encoding, byte* str, int len) + { + byte[] copy = new byte[len]; + for (int i = 0; i < len; i++) + copy[i] = *str++; + string name = encoding.GetString(copy, 0, len); + int idx = name.IndexOf('\0'); + if (idx >= 0) + name = name.Substring(0, idx); + return name; + } + } +} diff --git a/ChanSort.Plugin.ScmFile/AnalogChannelDataMapping.cs b/ChanSort.Plugin.ScmFile/AnalogChannelDataMapping.cs new file mode 100644 index 0000000..7d0f971 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/AnalogChannelDataMapping.cs @@ -0,0 +1,72 @@ +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.ScmFile +{ + internal class AnalogChannelDataMapping : ChannelMappingBase + { + const string offFrequency = "offFrequency"; + const string offChecksum = "offChecksum"; + + #region ctor() + public AnalogChannelDataMapping(IniFile.Section settings, int length) : + base(settings, length, new UnicodeEncoding(true, false)) + { + } + #endregion + + #region Favorites + public override Favorites Favorites + { + get + { + if (this.DataLength < 64) + return base.Favorites; + + byte fav = 0; + byte mask = 0x01; + foreach (int off in this.GetOffsets(offFavorites)) + { + if (this.GetByte(off) == 1) + fav |= mask; + mask <<= 1; + } + return (Favorites)fav; + } + set + { + if (this.DataLength < 64) + { + base.Favorites = value; + return; + } + + int intValue = (int)value; + foreach (int off in this.GetOffsets(offFavorites)) + { + if ((intValue & 1) != 0) + this.SetByte(off, 1); + intValue >>= 1; + } + } + } + #endregion + + #region Frequency + public float Frequency + { + get { return this.GetFloat(offFrequency); } + set { this.SetFloat(offFrequency, value); } + } + #endregion + + #region Checksum + public byte Checksum + { + get { return this.GetByte(offChecksum); } + set { this.SetByte(offChecksum, value); } + } + #endregion + } + +} diff --git a/ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.csproj b/ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.csproj new file mode 100644 index 0000000..1bec959 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.csproj @@ -0,0 +1,98 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5} + Library + Properties + ChanSort.Plugin.ScmFile + ChanSort.Plugin.ScmFile + v3.5 + 512 + Client + + + true + full + false + ..\Debug\ + DEBUG;TRACE + prompt + 4 + true + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + ..\Debug\ + DEBUG;TRACE + true + full + x86 + prompt + false + false + false + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + true + true + true + + + + False + ..\DLL\ICSharpCode.SharpZipLib.dll + + + + + + + + + + + + + + + + + + + {DCCFFA08-472B-4D17-BB90-8F513FC01392} + ChanSort.Api + + + + + Always + + + + + \ No newline at end of file diff --git a/ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.ini b/ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.ini new file mode 100644 index 0000000..892f4f4 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/ChanSort.Plugin.ScmFile.ini @@ -0,0 +1,334 @@ +[Series:B] + SatDataBase.dat = 145 + TransponderDataBase.dat = 49 + FineTune = 20 + FineTune_Digital = 28 + map-AirA = 28 + map-AirD = 248 + map-CableD = 248 + map-SateD = 144 + Favorites = 4 + +[Series:C] + SatDataBase.dat = 145 + TransponderDataBase.dat = 45 + map-AirA = 40 + map-AirD = 292 + map-CableD = 292 + map-SateD = 144 + Favorites = 4 + +[Series:D] + SatDataBase.dat = 145 + TransponderDataBase.dat = 45 + map-AirA = 64 + map-AirD = 320 + map-CableD = 320 + map-SateD = 172 + map-AstraHDPlusD = 212 + Favorites = 5 + +[Series:E] + SatDataBase.dat = 145 + TransponderDataBase.dat = 45 + map-AirA = 64 + map-AirD = 320 + map-CableD = 320 + map-SateD = 168 + map-AstraHDPlusD = 212 + Favorites = 5 + +[Analog:28] + ; map-AirA and map-CableA for B series + offInUse = 0 + maskInUse = 0x02 + ;offNameLength = 1 + offProgramNr = 4 + offFavorites = + offName = 12 + lenName = 12 + offChecksum = 27 + +[Analog:40] + ; map-AirA and map-CableA for C series + offInUse = 1 + maskInUse = 0x01 + offSkip = 2 + maskSkip = 0x01 + offLock = 6 + maskLock = 0x01 + offTuned = 8 + maskTuned = 0x01 + offProgramNr = 9 + offSlotNr = 16 + offNameLength = 18 + offName = 20 + offFrequency = 32 + offFavorites = 38 + offChecksum = 39 + +[Analog:64] + ; map-AirA and map-CableA for D series + offInUse = 1 + maskInUse = 0x01 + offSkip = 2 + maskSkip = 0x01 + offLock = 6 + maskLock = 0x01 + offTuned = 8 + maskTuned = 0x01 + offProgramNr = 9 + offSlotNr = 16 + offNameLength = 18 + offName = 20 + offFrequency = 32 + offFavorite = 36,40,44,48,52 + offChecksum = 63 + +[FineTune:20] + offIsCable = 0 + maskIsCable = 0x01 + offSlotNr = 4 + offFrequency = 8 + +[FineTune_Digital:28] + offIsCable = 0 + maskIsCable = 0x01 + offChannelTransponder = 4 + offFrequency = 16 + +[DvbCT:248] + ; map-AirD and map-CableD for B series + offProgramNr = 0 + offVideoPid = 2 + offPcrPid = 4 + offServiceId = 10 + offStatus = 8 + offQam = 7 + offServiceType = 9 + offEncrypted = 23 + maskEncrypted = 0xff + offSymbolRate = 32 + offLock = 244 + maskLock = 0x01 + offOriginalNetworkId = 12 + offNetworkId = 14 + offBouquet = 34 + offChannelTransponder = 26 + offLogicalProgramNr = 28 + offTransportStreamId = 36 + offName = 44 + lenName = 100 + offFavorites = 246 + offChecksum = 247 + offCodec = + offServiceProviderId = + offShortName = + lenShortName = + offVideoFormat = + +[DvbCT:292] + ; map-AirD and map-CableD for C series + offProgramNr = 0 + offVideoPid = 2 + offPcrPid = 4 + offServiceId = 6 + offStatus = + offQam = 12 + offBandwidth = 14 + offServiceType = 15 + offCodec = 16 + offHRes = 20 + offVRes = 22 + offEncrypted = 24 + maskEncrypted = 0xff + offFrameRate = 25 + offSymbolRate = 28 + offLock = 31 + maskLock = 0x01 + offOriginalNetworkId = 32 + offNetworkId = 34 + offServiceProviderId = 40 + offChannelTransponder = 42 + offLogicalProgramNr = 44 + offTransportStreamId = 48 + offName = 64 + lenName = 200 + offShortName = 264 + lenShortName = 18 + offVideoFormat = 282 + offFavorites = 289 + offChecksum = 291 + offBouquet = + + +[DvbCT:320] + ; map-AirD and map-CableD for D and E series + offProgramNr = 0 + offVideoPid = 2 + offPcrPid = 4 + offServiceId = 6 + offStatus = + offQam = 12 + offBandwidth = 14 + offServiceType = 15 + offCodec = 16 + offHRes = 20 + offVRes = 22 + offEncrypted = 24 + maskEncrypted = 0xff + offFrameRate = 25 + offSymbolRate = 28 + offLock = 31 + maskLock = 0x01 + offOriginalNetworkId = 32 + offNetworkId = 34 + offServiceProviderId = 40 + offChannelTransponder = 42 + offLogicalProgramNr = 44 + offTransportStreamId = 48 + offName = 64 + lenName = 200 + offShortName = 264 + lenShortName = 18 + offVideoFormat = 282 + offFavorites = 292,296,300,304,308 + offChecksum = 319 + offBouquet = + + +[DvbS:144] + ; map-SateD for B and C Series + offProgramNr = 0 + offVideoPid = 2 + offPcrPid = 4 + offInUse = 7 + maskInUse = 0x01 + offLock = 13 + maskLock = 0x01 + offServiceType = 14 + offServiceId = 16 + offTransponderNr = 18 + offSatelliteNr = 20 + offTransportStreamId = 24 + offOriginalNetworkId = 28 + offHRes = 32 + offVRes = 34 + offName = 36 + lenName = 100 + offEncrypted = 136 + maskEncrypted = 0x01 + offBouquet = 138 + offFavorites = 142 + offChecksum = 143 + offCodec = + offSymbolRate = + offNetworkId = + offServiceProviderId = + offChannelTransponder = + offLogicalProgramNr = + offShortName = + lenShortName = + offVideoFormat = + +[DvbS:172] + ; map-SateD for D Series + offProgramNr = 0 + offVideoPid = 2 + offPcrPid = 4 + offInUse = 7 + maskInUse = 0x01 + offLock = 13 + maskLock = 0x01 + offServiceType = 14 + offServiceId = 16 + offTransponderNr = 18 + offSatelliteNr = 20 + offTransportStreamId = 24 + offOriginalNetworkId = 28 + offHRes = 32 + offVRes = 34 + offName = 36 + lenName = 100 + offEncrypted = 136 + maskEncrypted = 0x01 + offBouquet = 138 + offFavorites = 140,144,148,152,156 + offChecksum = 171 + offCodec = + offSymbolRate = + offNetworkId = + offServiceProviderId = + offChannelTransponder = + offLogicalProgramNr = + offShortName = + lenShortName = + offVideoFormat = + +[DvbS:168] + ; map-SateD for E Series + offProgramNr = 0 + offVideoPid = 2 + offPcrPid = 4 + offInUse = 7 + maskInUse = 0x01 + offLock = 13 + maskLock = 0x01 + offServiceType = 14 + offServiceId = 16 + offTransponderNr = 18 + offSatelliteNr = 20 + offTransportStreamId = 24 + offOriginalNetworkId = 28 + offHRes = 32 + offVRes = 34 + offName = 36 + offEncrypted = 136 + maskEncrypted = 0x01 + lenName = 100 + offBouquet = 138 + offFavorites = 140,144,148,152,156 + offChecksum = 167 + offCodec = + offSymbolRate = + offNetworkId = + offServiceProviderId = + offChannelTransponder = + offLogicalProgramNr = + offShortName = + lenShortName = + offVideoFormat = + +[AstraHDPlusD:212] + ; map-AstraHDPlusD for D and E Series + offProgramNr = 0,20 + offVideoPid = + offPcrPid = + offInUse = 14 + maskInUse = 0xff + offLock = + maskLock = 0x01 + offServiceType = 14 + offServiceId = 16 + offTransponderNr = 18 + offSatelliteNr = + offTransportStreamId = 36 + offOriginalNetworkId = 32 + offHRes = + offVRes = + offName = 48 + offEncrypted = 180 + maskEncrypted = 0x01 + lenName = 100 + offBouquet = 138 + offFavorites = 184,188,192,196,200 + offChecksum = 211 + offCodec = + offSymbolRate = + offNetworkId = + offServiceProviderId = + offChannelTransponder = + offLogicalProgramNr = + offShortName = + lenShortName = + offVideoFormat = diff --git a/ChanSort.Plugin.ScmFile/DvbCtChannelDataMapping.cs b/ChanSort.Plugin.ScmFile/DvbCtChannelDataMapping.cs new file mode 100644 index 0000000..fff769d --- /dev/null +++ b/ChanSort.Plugin.ScmFile/DvbCtChannelDataMapping.cs @@ -0,0 +1,63 @@ +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.ScmFile +{ + internal class DvbCtChannelDataMapping : DvbChannelMappingBase + { + const string offChecksum = "offChecksum"; + + #region ctor() + public DvbCtChannelDataMapping(IniFile.Section settings, int dataLength) + : base(settings, dataLength, new UnicodeEncoding(true, false)) + { + } + #endregion + + #region Checksum + public byte Checksum + { + get { return this.GetByte(offChecksum); } + set { this.SetByte(offChecksum, value); } + } + #endregion + + #region Favorites + public override Favorites Favorites + { + get + { + if (this.DataLength < 320) + return base.Favorites; + + byte fav = 0; + byte mask = 0x01; + foreach (int off in this.GetOffsets(offFavorites)) + { + if (this.GetByte(off) == 1) + fav |= mask; + mask <<= 1; + } + return (Favorites)fav; + } + set + { + if (this.DataLength < 320) + { + base.Favorites = value; + return; + } + + int intValue = (int)value; + foreach (int off in this.GetOffsets(offFavorites)) + { + if ((intValue & 1) != 0) + this.SetByte(off, 1); + intValue >>= 1; + } + } + } + #endregion + + } +} diff --git a/ChanSort.Plugin.ScmFile/DvbSChannelDataMapping.cs b/ChanSort.Plugin.ScmFile/DvbSChannelDataMapping.cs new file mode 100644 index 0000000..0ec6991 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/DvbSChannelDataMapping.cs @@ -0,0 +1,83 @@ +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.ScmFile +{ + internal class DvbSChannelDataMapping : DvbChannelMappingBase + { + private const string offChecksum = "offChecksum"; + private const string offTransponderNr = "offTransponderNr"; + private const string offSatelliteNr = "offSatelliteNr"; + private readonly bool hasExtendedFavorites; + + #region ctor() + public DvbSChannelDataMapping(IniFile.Section settings, int dataLength) + : base(settings, dataLength, new UnicodeEncoding(true, false)) + { + this.hasExtendedFavorites = dataLength >= 168; + } + #endregion + + #region TransponderNr + public ushort TransponderNr + { + get { return this.GetWord(offTransponderNr); } + set { this.SetWord(offTransponderNr, value); } + } + #endregion + + #region SatelliteNr + public ushort SatelliteNr + { + get { return this.GetWord(offSatelliteNr); } + set { this.SetWord(offSatelliteNr, value); } + } + #endregion + + #region Favorites + public override Favorites Favorites + { + get + { + if (!this.hasExtendedFavorites) + return base.Favorites; + + byte fav = 0; + byte mask = 0x01; + foreach (int off in this.GetOffsets(offFavorites)) + { + if (this.GetDword(off) == 1) + fav |= mask; + mask <<= 1; + } + return (Favorites)fav; + } + set + { + if (!this.hasExtendedFavorites) + { + base.Favorites = value; + return; + } + + int intValue = (int)value; + foreach (int off in this.GetOffsets(offFavorites)) + { + if ((intValue & 1) != 0) + this.SetDword(off, 1); + intValue >>= 1; + } + } + } + #endregion + + + #region Checksum + public byte Checksum + { + get { return this.GetByte(offChecksum); } + set { this.SetByte(offChecksum, value); } + } + #endregion + } +} diff --git a/ChanSort.Plugin.ScmFile/ModelConstants.cs b/ChanSort.Plugin.ScmFile/ModelConstants.cs new file mode 100644 index 0000000..f338858 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/ModelConstants.cs @@ -0,0 +1,34 @@ +using ChanSort.Api; + +namespace ChanSort.Plugin.ScmFile +{ + internal class ModelConstants + { + public readonly int dvbsSatelliteLength; + public readonly int dvbsTransponderLength; + public readonly int dvbsChannelLength; + public readonly int dvbtChannelLength; + public readonly int avbtChannelLength; + public readonly int hdplusChannelLength; + public readonly int avbtFineTuneLength; + public readonly int dvbtFineTuneLength; + public readonly Favorites supportedFavorites; + + public ModelConstants(IniFile.Section iniSection) + { + this.avbtChannelLength = iniSection.GetInt("map-AirA"); + this.dvbtChannelLength = iniSection.GetInt("map-AirD"); + this.dvbsChannelLength = iniSection.GetInt("map-SateD"); + this.hdplusChannelLength = iniSection.GetInt("map-AstraHDPlusD"); + this.dvbsSatelliteLength = iniSection.GetInt("SatDataBase.dat"); + this.dvbsTransponderLength = iniSection.GetInt("TransponderDataBase.dat"); + this.avbtFineTuneLength = iniSection.GetInt("FineTune"); + this.dvbtFineTuneLength = iniSection.GetInt("FineTune_Digital"); + int numFavorites = iniSection.GetInt("Favorites"); + int mask = 0; + for (int i = 0; i < numFavorites; i++) + mask = (mask << 1) | 1; + this.supportedFavorites = (Favorites)mask; + } + } +} diff --git a/ChanSort.Plugin.ScmFile/Properties/AssemblyInfo.cs b/ChanSort.Plugin.ScmFile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1e0e01e --- /dev/null +++ b/ChanSort.Plugin.ScmFile/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ChanSort.Plugin.ScmFile")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ChanSort.Plugin.ScmFile")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6f59ac5a-afba-42e3-a63e-c74793c15980")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// 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("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ChanSort.Plugin.ScmFile/ScmSerializer.cs b/ChanSort.Plugin.ScmFile/ScmSerializer.cs new file mode 100644 index 0000000..9cbd9d8 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/ScmSerializer.cs @@ -0,0 +1,740 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using System.Linq; +using System.Windows.Forms; +using ChanSort.Api; +using ICSharpCode.SharpZipLib.Zip; + +namespace ChanSort.Plugin.ScmFile +{ + class ScmSerializer : SerializerBase + { + private readonly Dictionary modelConstants = new Dictionary(); + private readonly MappingPool analogMappings = new MappingPool("Analog"); + private readonly MappingPool dvbctMappings = new MappingPool("DVB-C/T"); + private readonly MappingPool dvbsMappings = new MappingPool("DVB-S"); + private readonly MappingPool hdplusMappings = new MappingPool("AstraHDPlus"); + private readonly MappingPool analogFineTuneMappings = new MappingPool("FineTune"); + private readonly ChannelList avbtChannels = new ChannelList(SignalSource.AnalogT, SignalType.Mixed); + private readonly ChannelList avbcChannels = new ChannelList(SignalSource.AnalogC, SignalType.Mixed); + private readonly ChannelList dvbcChannels = new ChannelList(SignalSource.DvbC, SignalType.Mixed); + private readonly ChannelList dvbtChannels = new ChannelList(SignalSource.DvbT, SignalType.Mixed); + private readonly ChannelList dvbsChannels = new ChannelList(SignalSource.DvbS, SignalType.Mixed); + private readonly ChannelList hdplusChannels = new ChannelList(SignalSource.HdPlusD, SignalType.Mixed); + private readonly Dictionary avbtFrequency = new Dictionary(); + private readonly Dictionary avbcFrequency = new Dictionary(); + private byte[] avbtFileContent; + private byte[] avbcFileContent; + private byte[] dvbtFileContent; + private byte[] dvbcFileContent; + private byte[] dvbsFileContent; + private byte[] hdplusFileContent; + private UnsortedChannelMode unsortedChannelMode; + private ModelConstants c; + + #region ctor() + public ScmSerializer(string inputFile) : base(inputFile) + { + this.ReadConfigurationFromIniFile(); + } + #endregion + + #region DisplayName + public override string DisplayName { get { return "Samsung *.scm Loader"; } } + #endregion + + #region ReadConfigurationFromIniFile() + private void ReadConfigurationFromIniFile() + { + string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini"); + IniFile ini = new IniFile(iniFile); + foreach (var section in ini.Sections) + { + int idx = section.Name.IndexOf(":"); + int len=0; + if (idx >= 0) + int.TryParse(section.Name.Substring(idx + 1), out len); + + if (section.Name.StartsWith("Series:")) + modelConstants.Add(section.Name, new ModelConstants(section)); + else if (section.Name.StartsWith("Analog:")) + analogMappings.AddMapping(new AnalogChannelDataMapping(section, len)); + else if (section.Name.StartsWith("DvbCT:")) + dvbctMappings.AddMapping(new DvbCtChannelDataMapping(section, len)); + else if (section.Name.StartsWith("DvbS:")) + dvbsMappings.AddMapping(new DvbSChannelDataMapping(section, len)); + else if (section.Name.StartsWith("FineTune:")) + analogFineTuneMappings.AddMapping(new DataMapping(section, len, null)); + else if (section.Name.StartsWith("AstraHDPlusD:")) + hdplusMappings.AddMapping(new DvbSChannelDataMapping(section, len)); + } + } + #endregion + + #region Load() + public override void Load() + { + using (ZipFile zip = new ZipFile(this.FileName)) + { + DetectModelConstants(zip); + DataRoot.SupportedFavorites = c.supportedFavorites; + + ReadAnalogFineTuning(zip); + ReadAnalogChannels(zip, "map-AirA", this.avbtChannels, out this.avbtFileContent, this.avbtFrequency); + ReadAnalogChannels(zip, "map-CableA", this.avbcChannels, out this.avbcFileContent, this.avbcFrequency); + ReadDvbctChannels(zip, "map-AirD", this.dvbtChannels, out this.dvbtFileContent); + ReadDvbctChannels(zip, "map-CableD", this.dvbcChannels, out this.dvbcFileContent); + ReadSatellites(zip); + ReadTransponder(zip, "TransponderDataBase.dat"); + ReadTransponder(zip, "UserTransponderDataBase.dat"); + ReadDvbsChannels(zip); + ReadAstraHdPlusChannels(zip); + } + } + #endregion + + #region DetectModelConstants() + private void DetectModelConstants(ZipFile zip) + { + if (DetectModelFromCloneInfoFile(zip)) return; + if (DetectModelFromContentFileLengths(zip)) return; + if (DetectModelFromFileName()) return; + throw new IOException("Unable to determine TV model from file content or name"); + } + #endregion + + #region DetectModelFromFileName() + private bool DetectModelFromFileName() + { + string file = Path.GetFileName(this.FileName); + System.Text.RegularExpressions.Regex regex = + new System.Text.RegularExpressions.Regex("channel_list_[A-Z]{2}[0-9]{2}([A-Z])[0-9A-Z]+_[0-9]+\\.scm"); + var match = regex.Match(file); + if (match.Success) + { + string series = match.Groups[1].Value; + if (this.modelConstants.TryGetValue("Series:" + series, out this.c)) + return true; + } + return false; + } + #endregion + + #region DetectModelFromCloneInfoFile() + private bool DetectModelFromCloneInfoFile(ZipFile zip) + { + byte[] cloneInfo = ReadFileContent(zip, "CloneInfo"); + if (cloneInfo == null) + { + this.c = this.modelConstants["Series:B"]; + return true; + } + + if (cloneInfo.Length >= 9) + { + char series = (char) cloneInfo[8]; + if (this.modelConstants.TryGetValue("Series:" + series, out this.c)) + return true; + } + return false; + } + #endregion + + #region DetectModelFromContentFileLengths() + private bool DetectModelFromContentFileLengths(ZipFile zip) + { + string[] candidates = new[] + { + DetectModelFromAirAOrCableA(zip), + DetectModelFromAirDOrCableD(zip), + DetectModelFromSateD(zip), + DetectModelFromTranspoderDatabase(zip) + }; + + string validCandidates = "BCDE"; + foreach (var candidateList in candidates) + { + if (candidateList == null) + continue; + string newValidCandidats = ""; + foreach (var candidate in candidateList) + { + if (validCandidates.Contains(candidate)) + newValidCandidats += candidate; + } + validCandidates = newValidCandidats; + } + + if (validCandidates.Length != 1) + return false; + + this.modelConstants.TryGetValue("Series:" + validCandidates, out this.c); + return true; + } + + #endregion + + #region DetectModelFromAirAOrCableA() + private string DetectModelFromAirAOrCableA(ZipFile zip) + { + var entry = zip.GetEntry("map-AirA") ?? zip.GetEntry("map-CableA"); + if (entry == null) + return null; + + var candidates = ""; + if (entry.Size % 28000 == 0) + candidates += "B"; + if (entry.Size % 40000 == 0) + candidates += "C"; + if (entry.Size % 64000 == 0) + candidates += "DE"; + return candidates; + } + #endregion + + #region DetectModelFromAirDOrCableD() + private string DetectModelFromAirDOrCableD(ZipFile zip) + { + var entry = zip.GetEntry("map-AirD") ?? zip.GetEntry("map-CableD"); + if (entry == null) + return null; + + var candidates = ""; + if (entry.Size % 248 == 0) + candidates += "B"; + if (entry.Size % 292 == 0) + candidates += "C"; + if (entry.Size % 320 == 0) + candidates += "DE"; + return candidates; + } + #endregion + + #region DetectModelFromSateD() + private string DetectModelFromSateD(ZipFile zip) + { + var entry = zip.GetEntry("map-SateD"); + if (entry == null) + return null; + + var candidates = ""; + if (entry.Size % 144 == 0) + candidates += "BC"; + if (entry.Size % 172 == 0) + candidates += "D"; + if (entry.Size % 168 == 0) + candidates += "E"; + return candidates; + } + #endregion + + #region DetectModelFromTranspoderDatabase() + private string DetectModelFromTranspoderDatabase(ZipFile zip) + { + var entry = zip.GetEntry("TransponderDatabase.dat"); + if (entry == null) + return null; + + var size = entry.Size - 4; + var candidates = ""; + if (size%49 == 0) + candidates += "B"; + if (size%45 == 0) + candidates += "CDE"; + return candidates; + } + #endregion + + + #region ReadAnalogFineTuning() + private unsafe void ReadAnalogFineTuning(ZipFile zip) + { + int entrySize = c.avbtFineTuneLength; + if (entrySize == 0) + return; + + byte[] data = ReadFileContent(zip, "FineTune"); + if (data == null) + return; + + var mapping = analogFineTuneMappings.GetMapping(c.avbtFineTuneLength); + fixed (byte* ptr = data) + { + mapping.DataPtr = ptr; + int count = data.Length / mapping.DataLength; + for (int i = 0; i < count; i++) + { + bool isCable = mapping.GetFlag("offIsCable", "maskIsCable"); // HACK: this is just a guess + int slot = mapping.GetWord("offSlotNr"); + float freq = mapping.GetFloat("offFrequency"); + var dict = isCable ? avbcFrequency : avbtFrequency; + dict[slot] = (decimal)freq; + mapping.Next(); + } + } + } + #endregion + + #region ReadAnalogChannels() + private unsafe void ReadAnalogChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data, Dictionary freq) + { + data = null; + int entrySize = c.avbtChannelLength; + if (entrySize == 0) + return; + + data = ReadFileContent(zip, fileName); + if (data == null) + return; + + this.DataRoot.AddChannelList(list); + fixed (byte* ptr = data) + { + var rawChannel = analogMappings.GetMapping(entrySize); + rawChannel.DataPtr = ptr; + int count = data.Length / entrySize; + + for (int slotIndex = 0; slotIndex < count; slotIndex++) + { + MapAnalogChannel(rawChannel, slotIndex, list, freq); + rawChannel.DataPtr += entrySize; + } + } + } + #endregion + + #region MapAnalogChannel() + private unsafe void MapAnalogChannel(AnalogChannelDataMapping rawChannel, int slotIndex, ChannelList list, Dictionary freq) + { + if (!rawChannel.InUse) + return; + + if (rawChannel.Checksum != CalcChecksum(rawChannel.DataPtr, c.avbtChannelLength)) + this.DataRoot.Warnings.AppendFormat("{0}: Incorrect checksum for channel index {1}\r\n", list, slotIndex); + + ChannelInfo ci = new ChannelInfo(list.SignalSource, list.SignalType, slotIndex, rawChannel.ProgramNr, rawChannel.Name); + ci.FreqInMhz = (decimal)Math.Round(rawChannel.Frequency, 2); + if (ci.FreqInMhz == 0) + ci.FreqInMhz = freq.TryGet(ci.RecordIndex); + if (ci.FreqInMhz == 0) + ci.FreqInMhz = slotIndex; + ci.Lock = rawChannel.Lock; + ci.Skip = rawChannel.Skip; + ci.Favorites = rawChannel.Favorites; + + this.DataRoot.AddChannel(list, ci); + } + + #endregion + + + #region ReadDvbctChannels() + private unsafe void ReadDvbctChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data) + { + data = null; + int entrySize = c.dvbtChannelLength; + if (entrySize == 0) + return; + + data = ReadFileContent(zip, fileName); + if (data == null) + return; + + this.DataRoot.AddChannelList(list); + fixed (byte* ptr = data) + { + DvbCtChannelDataMapping rawChannel = dvbctMappings.GetMapping(entrySize); + rawChannel.DataPtr = ptr; + int count = data.Length / entrySize; + for (int slotIndex = 0; slotIndex < count; slotIndex++) + { + MapDvbctChannel(rawChannel, slotIndex, list); + rawChannel.Next(); + } + } + } + #endregion + + #region MapDvbctChannel() + private unsafe void MapDvbctChannel(DvbCtChannelDataMapping rawChannel, int slotIndex, ChannelList list) + { + if (rawChannel.ProgramNr == 0) + return; + if (rawChannel.Checksum != CalcChecksum(rawChannel.DataPtr, rawChannel.DataLength)) + this.DataRoot.Warnings.AppendFormat("{0}: Incorrect checksum for channel index {1}\r\n", list, slotIndex); + + ChannelInfo ci = new ChannelInfo(list.SignalSource, list.SignalType, slotIndex, rawChannel.ProgramNr, rawChannel.Name); + ci.VideoPid = rawChannel.VideoPid; + ci.ServiceId = rawChannel.ServiceId; + ci.ServiceType = rawChannel.ServiceType; + ci.TransportStreamId = rawChannel.TransportStreamId; + ci.FreqInMhz = LookupData.Instance.GetDvbtTransponderFrequency(rawChannel.ChannelOrTransponder); + ci.OriginalNetworkId = rawChannel.OriginalNetworkId; + ci.Favorites = rawChannel.Favorites; + ci.Lock = rawChannel.Lock; + ci.ShortName = rawChannel.ShortName; + ci.SymbolRate = rawChannel.SymbolRate; + ci.Encrypted = rawChannel.Encrypted; + ci.ChannelOrTransponder = rawChannel.ChannelOrTransponder.ToString(); + + this.DataRoot.AddChannel(list, ci); + } + + #endregion + + + #region ReadSatellites() + private unsafe void ReadSatellites(ZipFile zip) + { + byte[] data = ReadFileContent(zip, "SatDataBase.dat"); + if (data == null) + return; + + var utf16Encoding = new UnicodeEncoding(false, false); + fixed (byte* ptr = data) + { + int count = data.Length/this.c.dvbsSatelliteLength; + for (int i = 0; i < count; i++) + { + SatDataBase* sat = (SatDataBase*)(ptr + 4 + i * this.c.dvbsSatelliteLength); + if (sat->Magic0x55 != 0x55) + throw new IOException("Unknown SatDataBase.dat format"); + string name = utf16Encoding.GetString((byte*)sat->Name, 64*2); + string location = string.Format("{0}.{1}{2}", sat->LongitudeTimes10/10, sat->LongitudeTimes10%10, sat->IsWest != 0 ? "W" : "E"); + + Satellite satellite = new Satellite(sat->SatelliteNr); + satellite.Name = name; + satellite.OrbitalPosition = location; + this.DataRoot.Satellites.Add(sat->SatelliteNr, satellite); + } + } + } + #endregion + + #region ReadTransponder() + + private unsafe void ReadTransponder(ZipFile zip, string fileName) + { + byte[] data = ReadFileContent(zip, fileName); + if (data == null) + return; + + fixed (byte* ptr = data) + { + int count = data.Length/c.dvbsTransponderLength; + for (int i=0; iMagic0x55 == 0) + continue; + + if (trans->TransponderNr == 0) + continue; + + var sat = this.DataRoot.Satellites.TryGet(trans->SatelliteNr); + if (sat == null) + { + DataRoot.Warnings.Append(string.Format("Transponder #{0} references invalid satellite #{1}", + trans->TransponderNr, trans->SatelliteNr)); + continue; + } + Transponder transponder = new Transponder(trans->TransponderNr); + transponder.FrequencyInMhz = (uint) (trans->Frequency/1000); + transponder.Polarity = trans->IsVerticalPolarity == 1 ? 'V' : 'H'; + transponder.SymbolRate = trans->SymbolRate/1000; + this.DataRoot.AddTransponder(sat, transponder); + } + } + } + #endregion + + #region ReadDvbsChannels() + private unsafe void ReadDvbsChannels(ZipFile zip) + { + this.dvbsFileContent = ReadFileContent(zip, "map-SateD"); + if (this.dvbsFileContent == null) + return; + + this.DataRoot.AddChannelList(this.dvbsChannels); + fixed (byte* ptr = this.dvbsFileContent) + { + int entrySize = c.dvbsChannelLength; + int count = this.dvbsFileContent.Length/entrySize; + DvbSChannelDataMapping mapping = dvbsMappings.GetMapping(entrySize); + mapping.DataPtr = ptr; + for (int slotIndex = 0; slotIndex < count; slotIndex++) + { + MapDvbsChannel(this.dvbsChannels, mapping, slotIndex); + mapping.Next(); + } + } + } + #endregion + + #region MapDvbsChannel() + private void MapDvbsChannel(ChannelList channelList, DvbSChannelDataMapping rawChannel, int slotIndex) + { + if (!rawChannel.InUse) + return; + + Transponder transponder = this.DataRoot.Transponder.TryGet(rawChannel.TransponderNr); + Satellite satellite = transponder == null ? null : transponder.Satellite; + string satPosition = satellite != null ? satellite.OrbitalPosition : "#" + rawChannel.SatelliteNr; + + string satName = satellite != null ? satellite.Name : null; + + ChannelInfo ci = new ChannelInfo(channelList.SignalSource, SignalType.Mixed, slotIndex, rawChannel.ProgramNr, rawChannel.Name); + ci.Satellite = satName; + ci.SatPosition = satPosition; + ci.VideoPid = rawChannel.VideoPid; + ci.ServiceId = rawChannel.ServiceId; + ci.ServiceType = rawChannel.ServiceType; + ci.TransportStreamId = rawChannel.TransportStreamId; + ci.OriginalNetworkId = rawChannel.OriginalNetworkId; + ci.Favorites = rawChannel.Favorites; + ci.Encrypted = rawChannel.Encrypted; + ci.Lock = rawChannel.Lock; + ci.ShortName = rawChannel.ShortName; + + if (transponder != null) + { + ci.Transponder = transponder; + ci.FreqInMhz = transponder.FrequencyInMhz; + ci.ChannelOrTransponder = this.GetTransponderChannelNumber((ushort)transponder.FrequencyInMhz); + ci.SymbolRate = transponder.SymbolRate; + ci.Polarity = transponder.Polarity; + } + + this.DataRoot.AddChannel(channelList, ci); + } + + #endregion + + #region GetTransponderChannelNumber() + private string GetTransponderChannelNumber(ushort frequency) + { + int nr = LookupData.Instance.GetTransponderNumber(frequency); + return nr <= 0 ? "" : nr.ToString("d3"); + } + #endregion + + + #region ReadAstraHdPlusChannels() + private unsafe void ReadAstraHdPlusChannels(ZipFile zip) + { + this.hdplusFileContent = ReadFileContent(zip, "map-AstraHDPlusD"); + if (hdplusFileContent == null || c.hdplusChannelLength == 0) + return; + + this.DataRoot.AddChannelList(this.hdplusChannels); + fixed (byte* ptr = hdplusFileContent) + { + int entrySize = c.hdplusChannelLength; + int count = hdplusFileContent.Length / entrySize; + DvbSChannelDataMapping mapping = hdplusMappings.GetMapping(entrySize); + mapping.DataPtr = ptr; + for (int slotIndex = 0; slotIndex < count; slotIndex++) + { + MapDvbsChannel(this.hdplusChannels, mapping, slotIndex); + mapping.Next(); + } + } + } + #endregion + + + #region ReadFileContent() + private static byte[] ReadFileContent(ZipFile zip, string fileName) + { + var entry = zip.GetEntry(fileName); + if (entry == null) + return null; + byte[] data = new byte[entry.Size]; + using (var stream = zip.GetInputStream(entry)) + { + stream.Read(data, 0, data.Length); + } + return data; + } + #endregion + + + private unsafe delegate void UpdateFunc(ChannelInfo channelInfo, byte* fileContent); + + #region Save() + public override unsafe void Save(string tvOutputFile, string csvOutputFile, UnsortedChannelMode unsortedMode) + { + this.unsortedChannelMode = unsortedMode; + if (tvOutputFile != this.FileName) + { + File.Copy(this.FileName, tvOutputFile); + this.FileName = tvOutputFile; + } + using (ZipFile zip = new ZipFile(tvOutputFile)) + { + zip.BeginUpdate(); + this.SaveChannels(zip, "map-AirA", this.avbtChannels, this.UpdateAnalogChannel, ref this.avbtFileContent); + this.SaveChannels(zip, "map-CableA", this.avbcChannels, this.UpdateAnalogChannel, ref this.avbcFileContent); + this.SaveChannels(zip, "map-AirD", this.dvbtChannels, this.UpdateDvbctChannel, ref this.dvbtFileContent); + this.SaveChannels(zip, "map-CableD", this.dvbcChannels, this.UpdateDvbctChannel, ref this.dvbcFileContent); + this.SaveChannels(zip, "map-SateD", this.dvbsChannels, this.UpdateDvbsChannel, ref this.dvbsFileContent); + this.SaveChannels(zip, "map-AstraHDPlusD", this.hdplusChannels, this.UpdateHdPlusChannel, ref this.hdplusFileContent); + zip.CommitUpdate(); + } + } + #endregion + + #region SaveChannels() + private unsafe void SaveChannels(ZipFile zip, string fileName, ChannelList channels, UpdateFunc updateChannel, ref byte[] fileContent) + { + if (fileContent == null) + return; + zip.Delete(fileName); + + string tempFilePath = Path.GetTempFileName(); + using (var stream = new FileStream(tempFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) + { + this.WriteChannels(channels, updateChannel, fileContent, stream); + stream.Flush(); + stream.Seek(0, SeekOrigin.Begin); + int size = (int)new FileInfo(tempFilePath).Length; + fileContent = new byte[size]; + stream.Read(fileContent, 0, size); + } + + zip.Add(tempFilePath, fileName); + } + #endregion + + #region WriteChannels() + private unsafe void WriteChannels(ChannelList list, UpdateFunc updateChannel, byte[] fileContent, FileStream stream) + { + fixed (byte* ptr = fileContent) + { + int maxSlot = 0; + foreach (var channel in list.Channels.OrderBy(ChannelComparer)) + { + if (channel.RecordIndex < 0) // channel only exists in reference list + continue; + + int newProgNr; + if (channel.NewProgramNr == 0 && this.unsortedChannelMode == UnsortedChannelMode.Hide) + newProgNr = 0; + else + { + newProgNr = channel.NewProgramNr != 0 ? channel.NewProgramNr : ++maxSlot; + if (newProgNr > maxSlot) + maxSlot = channel.NewProgramNr; + } + + var channels = new List(); + channels.Add(channel); + channels.AddRange(channel.Duplicates); + foreach (var channelInstance in channels) + { + channelInstance.OldProgramNr = newProgNr; + updateChannel(channelInstance, ptr); + } + } + + stream.Write(fileContent, 0, fileContent.Length); +#if false + if (count == 0 || count%padToPageSize != 0) + { + byte[] padding = new byte[(padToPageSize - count%padToPageSize) * entrySize]; + stream.Write(padding, 0, padding.Length); + } +#endif + } + } + #endregion + + #region UpdateAnalogChannel() + private unsafe void UpdateAnalogChannel(ChannelInfo channel, byte* ptr) + { + AnalogChannelDataMapping raw = analogMappings.GetMapping(c.avbtChannelLength); + int startOffset = channel.RecordIndex * raw.DataLength; + raw.DataPtr = ptr + startOffset; + raw.ProgramNr = (ushort)channel.OldProgramNr; + raw.Favorites = channel.Favorites; + raw.Lock = channel.Lock; + raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength); + } + #endregion + + #region UpdateDvbctChannel() + private unsafe void UpdateDvbctChannel(ChannelInfo channel, byte* ptr) + { + DvbCtChannelDataMapping raw = dvbctMappings.GetMapping(c.dvbtChannelLength); + int startOffset = channel.RecordIndex * raw.DataLength; + raw.DataPtr = ptr + startOffset; + raw.ProgramNr = (ushort)channel.OldProgramNr; + raw.Favorites = channel.Favorites; + raw.Lock = channel.Lock; + raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength); + } + #endregion + + #region UpdateDvbsChannel() + private unsafe void UpdateDvbsChannel(ChannelInfo channel, byte* ptr) + { + DvbSChannelDataMapping raw = dvbsMappings.GetMapping(c.dvbsChannelLength); + int startOffset = channel.RecordIndex*raw.DataLength; + raw.DataPtr = (ptr + startOffset); + raw.ProgramNr = (ushort)channel.OldProgramNr; + raw.Favorites = channel.Favorites; + raw.Lock = channel.Lock; + raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength); + } + #endregion + + #region UpdateHdPlusChannel() + private unsafe void UpdateHdPlusChannel(ChannelInfo channel, byte* ptr) + { + DvbSChannelDataMapping raw = hdplusMappings.GetMapping(c.hdplusChannelLength); + int startOffset = channel.RecordIndex * raw.DataLength; + raw.DataPtr = (ptr + startOffset); + raw.ProgramNr = (ushort)channel.OldProgramNr; + raw.Favorites = channel.Favorites; + raw.Lock = channel.Lock; + raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength); + } + #endregion + + #region CalcChecksum() + private static unsafe byte CalcChecksum(byte* ptr, int length) + { + byte checksum = 0; + for (int i = 1; i < length; i++) + checksum += *ptr++; + return checksum; + } + #endregion + + #region ChannelComparer() + private string ChannelComparer(ChannelInfo channel) + { + if (channel.NewProgramNr != 0) + return "A" + channel.NewProgramNr.ToString("d4"); + if (channel.OldProgramNr != 0) + { + if (this.unsortedChannelMode == UnsortedChannelMode.AppendInOrder) + return "B" + channel.OldProgramNr.ToString("d4"); + return "B" + channel.Name; + } + return "Z"; + } + #endregion + + public override void ShowDeviceSettingsForm(object parentWindow) + { + MessageBox.Show((Form) parentWindow, "Sorry, ChanSort currently doesn't support any settings for your TV model.", + "Device Settings", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } +} diff --git a/ChanSort.Plugin.ScmFile/ScmSerializerPlugin.cs b/ChanSort.Plugin.ScmFile/ScmSerializerPlugin.cs new file mode 100644 index 0000000..f404d33 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/ScmSerializerPlugin.cs @@ -0,0 +1,15 @@ +using ChanSort.Api; + +namespace ChanSort.Plugin.ScmFile +{ + public class ScmSerializerPlugin : ISerializerPlugin + { + public string PluginName { get { return "Samsung *.scm Loader"; } } + public string FileFilter { get { return "*.scm"; } } + + public SerializerBase CreateSerializer(string inputFile) + { + return new ScmSerializer(inputFile); + } + } +} diff --git a/ChanSort.Plugin.ScmFile/ScmStructures.cs b/ChanSort.Plugin.ScmFile/ScmStructures.cs new file mode 100644 index 0000000..2bafbc7 --- /dev/null +++ b/ChanSort.Plugin.ScmFile/ScmStructures.cs @@ -0,0 +1,97 @@ +using System.Runtime.InteropServices; + +namespace ChanSort.Plugin.ScmFile +{ + [StructLayout(LayoutKind.Sequential, Pack=1)] + unsafe struct SatDataBase + { + public byte Magic0x55; + public int SatelliteNr; + public int TransponderCount; + public fixed ushort Name[64]; + public int IsWest; + public int LongitudeTimes10; + }; + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + struct TransponderDataBase + { + public byte Magic0x55; + public int TransponderNr; + public int SatelliteNr; + public int Frequency; + public int SymbolRate; + public int IsVerticalPolarity; + public int Modulation; + public int CodeRate; + public int Unknown1; + public int Unknown2; + public int Unknown3; + public int Unknown4; + }; + +#if false + [StructLayout(LayoutKind.Sequential, Pack=1)] + unsafe struct MapSateD + { + public ushort ChannelNumber; + public ushort VideoPid; + public ushort Pid; + public byte Mpeg4; + public byte Unknown8; + public ushort Unknown9; + public ushort Unknonw11; + public ushort Unknown13; + public byte ServiceType; + public byte Unknown16; + public ushort ServiceId; + public ushort TransponderNr; + public ushort SatelliteNr; + public ushort Unknown23; + public ushort TransportStreamId; + public ushort Unknown27; + public ushort OriginalNetworkId; + public ushort Unknown31; + public ushort HRes; + public ushort VRes; + public fixed ushort NameInBigEndianUtf16[51]; + public ushort Bouquet; + public byte Unknown141; + public byte Locked; + public byte Favorites; + public byte ChecksumCSeries; + public fixed byte Padding [28]; + } +#endif +#if false + [StructLayout(LayoutKind.Sequential, Pack = 1)] + unsafe struct MapAirD + { + public ushort ChannelNumber; + public ushort VideoPid; + public ushort PcrPid; + public ushort ServiceId; + public ushort Status; + public ushort Unknown11; + public ushort Qam; + public byte ServiceType; + public byte Codec; + public fixed byte Unknown17 [7]; + public byte Encrypted; + public fixed byte Unknown25 [3]; + public ushort Frequency; + public ushort LogicalChannelNumber; + public fixed byte Unknown31 [2]; + public ushort SymbolRate; + public ushort Bouquet; + public ushort TransportStreamId; + public fixed byte Unknown39 [5]; + public fixed ushort NameInBigEndianUtf16[100]; + public byte Unknown244; + public ushort Locked; + public byte FavoritesX79; + public byte ChecksumBSeries; + public fixed byte PaddingCSeries [292 - 248]; + } +#endif +} diff --git a/ChanSort.Plugin.TllFile/ActChannelDataMapping.cs b/ChanSort.Plugin.TllFile/ActChannelDataMapping.cs new file mode 100644 index 0000000..3c2347c --- /dev/null +++ b/ChanSort.Plugin.TllFile/ActChannelDataMapping.cs @@ -0,0 +1,219 @@ +using System.Collections.Generic; +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + #region class ActChannelDataMapping + /// + /// Mapping for Analog, Cable and Terrestrial + /// + public unsafe class ActChannelDataMapping : DvbChannelMappingBase + { + private readonly DvbStringDecoder dvbsStringDecoder; + + private const string offFrequencyLong = "offFrequencyLong"; + private const string offFavorites2 = "offFavorites2"; + private const string offProgramNr2 = "offProgramNr2"; + + #region ctor() + public ActChannelDataMapping(IniFile.Section settings, int length, DvbStringDecoder dvbsStringDecoder) : base(settings, length, null) + { + this.dvbsStringDecoder = dvbsStringDecoder; + this.ReorderChannelData = settings.GetInt("reorderChannelData") != 0; + } + #endregion + + #region Encoding + public Encoding Encoding + { + get { return this.dvbsStringDecoder.DefaultEncoding; } + set { this.dvbsStringDecoder.DefaultEncoding = value; } + } + #endregion + + public bool ReorderChannelData { get; private set; } + + #region Favorites + public override Favorites Favorites + { + get { return (Favorites)(this.GetByte(offFavorites) & 0x0F); } + set + { + int intValue = (int)value; + foreach (int off in this.GetOffsets(offFavorites)) + this.DataPtr[off] = (byte) ((this.DataPtr[off] & 0xF0) | intValue); + intValue <<= 2; + foreach (int off in this.GetOffsets(offFavorites2)) + this.DataPtr[off] = (byte)((this.DataPtr[off] & 0xC3) | intValue); + } + } + #endregion + + #region ProgramNr + public override ushort ProgramNr + { + get { return base.ProgramNr; } + set + { + base.ProgramNr = value; + this.SetWord(offProgramNr2, (ushort)((value<<2) | (GetWord(offProgramNr2) & 0x03))); + } + } + #endregion + + #region Name + public override string Name + { + get + { + string longName, shortName; + this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName); + return longName; + } + set { ChannelDataMapping.SetChannelName(this, value, this.dvbsStringDecoder.DefaultEncoding); } + } + #endregion + + #region ShortName + public override string ShortName + { + get + { + string longName, shortName; + this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName); + return shortName; + } + } + #endregion + + #region FrequencyLong + public virtual uint FrequencyLong + { + get { return this.GetDword(offFrequencyLong); } + set { this.SetDword(offFrequencyLong, value); } + } + #endregion + + #region AnalogFrequency, AnalogChannelNr, AnalogChannelBand + + public ushort AnalogFrequency + { + get { return this.PcrPid; } + set { this.PcrPid = value; } + } + + public byte AnalogChannelNr + { + get { return (byte)(this.VideoPid & 0xFF); } + } + + public byte AnalogChannelBand + { + get { return (byte)(this.VideoPid >> 8); } + } + #endregion + + + #region Validate() + public string Validate() + { + bool ok = true; + List warnings = new List(); + ok &= ValidateByte(offChannelTransponder) || AddWarning(warnings, "Channel/Transponder number"); + ok &= ValidateWord(offProgramNr) || AddWarning(warnings, "Program#"); + ok &= ValidateByte(offFavorites) || AddWarning(warnings, "Favorites"); + ok &= ValidateWord(offPcrPid) || AddWarning(warnings, "PCR-PID"); + ok &= ValidateWord(offAudioPid) || AddWarning(warnings, "Audio-PID"); + ok &= ValidateWord(offVideoPid) || AddWarning(warnings, "Video-PID"); + ok &= ValidateString(offName, 40) || AddWarning(warnings, "Channel name"); + ok &= ValidateByte(offNameLength) || AddWarning(warnings, "Channel name length"); + ok &= ValidateWord(offServiceId) || AddWarning(warnings, "Service-ID"); + ok &= ValidateString(offFrequencyLong, 4) || AddWarning(warnings, "Frequency"); + ok &= ValidateWord(offOriginalNetworkId) || AddWarning(warnings, "Original Network-ID"); + ok &= ValidateWord(offTransportStreamId) || AddWarning(warnings, "Transport Stream ID"); + ok &= ValidateByte(offFavorites2) || AddWarning(warnings, "Favorites #2"); + ok &= ValidateByte(offServiceType) || AddWarning(warnings, "Service Type"); + + if (ok) + return null; + + StringBuilder sb = new StringBuilder(); + foreach (var warning in warnings) + { + if (sb.Length > 0) + sb.Append(", "); + sb.Append(warning); + } + return sb.ToString(); + } + #endregion + + #region AddWarning() + private bool AddWarning(List warnings, string p) + { + warnings.Add(p); + return false; + } + #endregion + + #region ValidateByte() + private bool ValidateByte(string key) + { + var offsets = this.GetOffsets(key); + if (offsets == null || offsets.Length < 1) + return true; + byte value = *(this.DataPtr + offsets[0]); + bool ok = true; + foreach(int offset in offsets) + { + if (this.DataPtr[offset] != value) + ok = false; + } + return ok; + } + #endregion + + #region ValidateWord() + private bool ValidateWord(string key) + { + var offsets = this.GetOffsets(key); + if (offsets == null || offsets.Length < 1) + return true; + ushort value = *(ushort*)(this.DataPtr + offsets[0]); + bool ok = true; + foreach (int offset in offsets) + { + if (*(ushort*) (this.DataPtr + offset) != value) + ok = false; + } + return ok; + } + #endregion + + #region ValidateString() + private bool ValidateString(string key, int len) + { + var offsets = this.GetOffsets(key); + if (offsets == null || offsets.Length < 1) + return true; + bool ok = true; + int off0 = offsets[0]; + for (int i = 1; i < offsets.Length; i++) + { + int offI = offsets[i]; + for (int j = 0; j < len; j++) + { + byte b = this.DataPtr[off0 + j]; + if (this.DataPtr[offI + j] != b) + ok = false; + if (b == 0) + break; + } + } + return ok; + } + #endregion + } + #endregion +} diff --git a/ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.csproj b/ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.csproj new file mode 100644 index 0000000..d931a28 --- /dev/null +++ b/ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.csproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {E972D8A1-2F5F-421C-AC91-CFF45E5191BE} + Library + Properties + ChanSort.Plugin.TllFile + ChanSort.Plugin.TllFile + v3.5 + 512 + Client + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + ..\Debug\ + DEBUG;TRACE + true + full + x86 + prompt + false + true + true + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + false + true + + + + + + + + + + + + + + + + + + + + + + + True + True + Resource.de.resx + + + True + True + Resource.resx + + + + + + + Form + + + TvSettingsForm.cs + + + + + {DCCFFA08-472B-4D17-BB90-8F513FC01392} + ChanSort.Api + + + + + Always + + + + + + ResXFileCodeGenerator + Resource.de.Designer.cs + Designer + + + ResXFileCodeGenerator + Resource.Designer.cs + Designer + + + TvSettingsForm.cs + Designer + + + TvSettingsForm.cs + Designer + + + + + \ No newline at end of file diff --git a/ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.ini b/ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.ini new file mode 100644 index 0000000..d262571 --- /dev/null +++ b/ChanSort.Plugin.TllFile/ChanSort.Plugin.TllFile.ini @@ -0,0 +1,331 @@ +; FileConfigurationX: overall file and DVB-S data layout +; ACTChannelDataMappingX: analog, DVB-C and DVB-T channel data mapping for data length X + +[FileConfiguration1] + ; LM and PM series except LM611S and LM340S + magicBytes = 90, 90, 90, 90 + satCount = 64 + satLength = 44 + transponderCount = 2400 + transponderLength = 40 + dvbsChannelCount = 7520 + dvbsChannelLength = 72 + lnbCount = 40 + lnbLength = 44 + +[FileConfiguration2] + ; LV and LW series (some LW don't have DVB-S though), some LM models + magicBytes = 90, 90, 90, 90 + satCount = 64 + satLength = 44 + transponderCount = 2400 + transponderLength = 40 + dvbsChannelCount = 7520 + dvbsChannelLength = 68 + lnbCount = 40 + lnbLength = 44 + +[FileConfiguration3] + ; DM and LH series + magicBytes = + satCount = 0 + + +[ACTChannelDataMapping:192] + ; LM series with Firmware 4.x (all except LM611S and LM340S) + reorderChannelData = 0 + lenName = 40 + offChannelTransponder = 10, 94, 126, 132 + offProgramNr = 12, 128 + offFavorites = 20 + offPcrPid = 22, 180 + offAudioPid = 24 + offVideoPid = 26 + offName = 30, 140 + offNameLength = 70, 139 + offServiceId = 72, 136 + offFrequencyLong = 96 + offOriginalNetworkId = 102 + offTransportStreamId = 104 + offFavorites2 = 134 + offLock = 135 + maskLock = 0x01 + offSkip = 135 + maskSkip = 0x02 + offHide = 135 + maskHide = 0x04 + offServiceType = 138 + offAudioPid2 = 182 + +[ACTChannelDataMapping:188] + ; LM series with Firmware 3.x (LM611S with exceptions, LM340S) + reorderChannelData = 0 + lenName = 40 + offChannelTransponder = 10, 94, 125, 132 + offProgramNr = 12, 128 + offFavorites = 20 + offPcrPid = 22, 180 + offAudioPid = 24 + offVideoPid = 26 + offName = 30, 140 + offNameLength = 70, 139 + offServiceId = 72, 136 + offFrequencyLong = 96 + offOriginalNetworkId = 102 + offTransportStreamId = 104 + offFavorites2 = 134 + offLock = 135 + maskLock = 0x01 + offSkip = 135 + maskSkip = 0x02 + offHide = 135 + maskHide = 0x04 + offServiceType = 138 + offAudioPid2 = 182 + +[ACTChannelDataMapping:184] + ; LV470S,LV570S,LV579S(with exceptions), LW5500,LW5590,LW570S,LW579S,LW650S,LW659S(with exceptions) + ; LK950S, CS460S, PM670S, LM611S(with exceptions) + reorderChannelData = 0 + lenName = 40 + offChannelTransponder = 10, 90, 121, 128 + offProgramNr = 12, 124 + offFavorites = 20 + offPcrPid = 22, 176 + offAudioPid = 24 + offVideoPid = 26 + offName = 30, 136 + offNameLength = 70, 135 + offServiceId = 72, 132 + offFrequencyLong = 92 + offOriginalNetworkId = 98 + offTransportStreamId = 100 + offFavorites2 = 130 + offLock = 131 + maskLock = 0x01 + offSkip = 131 + maskSkip = 0x02 + offHide = 131 + maskHide = 0x04 + offServiceType = 134 + offAudioPid2 = 178 + +[ACTChannelDataMapping:180] + ; PT + reorderChannelData = 0 + lenName = 40 + offChannelTransponder = 10, 90, 124 + offProgramNr = 12 + offFavorites = 20 + offPcrPid = 22, 172 + offAudioPid = 24 + offVideoPid = 26 + offName = 30, 132 + offNameLength = 70, 131 + offServiceId = 72, 128 + offFrequencyLong = 92 + offOriginalNetworkId = 98 + offTransportStreamId = 100 + offProgramNr2 = 120 + offFavorites2 = 126 + offLock = 127 + maskLock = 0x01 + offSkip = 127 + maskSkip = 0x02 + offHide = 127 + maskHide = 0x04 + offServiceType = 130 + offAudioPid2 = 172 + +[ACTChannelDataMapping:176] + ; LD, LE series, LK450, LW4500, LW5400 + reorderChannelData = 0 + lenName = 40 + offChannelTransponder = 10, 86, 120 + offProgramNr = 12 + offFavorites = 20 + offPcrPid = 22, 168 + offAudioPid = 24 + offVideoPid = 26 + offName = 30, 128 + offNameLength = 70, 127 + offServiceId = 72, 124 + offFrequencyLong = 88 + offOriginalNetworkId = 94 + offTransportStreamId = 96 + offProgramNr2 = 116 + offFavorites2 = 122 + offLock = 123 + maskLock = 0x01 + offSkip = 123 + maskSkip = 0x02 + offHide = 123 + maskHide = 0x04 + offServiceType = 126 + offAudioPid2 = 170 + +[ACTChannelDataMapping:164] + ; DM and LH series + reorderChannelData = 1 + lenName = 40 + offChannelTransponder = 9, 112 + offProgramNr = 10 + offFavorites = 18 + offPcrPid = 20, 156 + offAudioPid = 22 + offVideoPid = 24 + offName = 28, 116 + offNameLength = 68 + offServiceId = 70 + offOriginalNetworkId = 86 + offTransportStreamId = 88 + offFrequencyLong = 96 + offProgramNr2 = 108 + offFavorites2 = 113 + offLock = 113 + maskLock = + offSkip = 113 + maskSkip = 0x20 + offHide = 113 + maskHide = + offServiceType = 115 + offAudioPid2 = 158 + +[SatChannelDataMapping:68] + lenName = 40 + offSatelliteNr = 0 + offSourceType = 4 + offTransponderIndex = 5, 12 + offProgramNr = 8 + offProgramNrPreset = 10 + offFavorites = 14 + maskFavorites = 0x3C + offDeleted = 14 + maskDeleted = 0x42 + offEncrypted = 14 + maskEncrypted = 0x80 + offLock = 15 + maskLock = 0x01 + offSkip = 15 + maskSkip = 0x02 + offHide = 15 + maskHide = 0x04 + offProgNrCustomized = 15 + maskProgNrCustomized = 0x40 + offServiceId = 16 + offServiceType = 18 + offNameLength = 19 + offName = 20 + offVideoPid = 60 + offAudioPid = 62 + +[SatChannelDataMapping:72] + lenName = 40 + offSatelliteNr = 0 + offSourceType = 4 + offTransponderIndex = 6, 12 + offProgramNr = 8 + offProgramNrPreset = 10 + offFavorites = 14 + maskFavorites = 0x3C + offDeleted = 14 + maskDeleted = 0x42 + offEncrypted = 14 + maskEncrypted = 0x80 + offLock = 15 + maskLock = 0x01 + offSkip = 15 + maskSkip = 0x02 + offHide = 15 + maskHide = 0x04 + offProgNrCustomized = 15 + maskProgNrCustomized = 0x40 + offServiceId = 16 + offServiceType = 18 + offNameLength = 19 + offName = 20 + offVideoPid = 60 + offAudioPid = 62 + +[FirmwareData:6944] + ; LH series + offSize = 0 + offHotelModeEnabled=6543 + offHotelModeDtvUpdate=6553 + +[FirmwareData:11008] + ; DM (2350D) + offSize = 0 + offHotelModeEnabled=10563 + offHotelModeDtvUpdate=10573 + +[FirmwareData:15936] + ; PT + offSize = 0 + offHotelModeEnabled=12601 + offHotelModeDtvUpdate=12611 + +[FirmwareData:15960] + ; LW4500, LW5400 + offSize = 0 + offHotelModeEnabled=12603 + offHotelModeDtvUpdate=12613 + +[FirmwareData:16024] + ; LM611S, LM340S, CS460S + offSize = 0 + offHotelModeEnabled=12639 + offHotelModeDtvUpdate=12649 + +[FirmwareData:23072] + ; LD420, LD450, LD550 + offSize = 0 + offHotelModeEnabled=19721 + offHotelModeDtvUpdate=19731 + +[FirmwareData:23088] + ; LK450 + offSize = 0 + offHotelModeEnabled=19723 + offHotelModeDtvUpdate=19733 + +[FirmwareData:23096] + ; LE5500, LD750 + offSize = 0 + offHotelModeEnabled=19721 + offHotelModeDtvUpdate=19731 + +[FirmwareData:35504] + ; LV,LW,LK950S + offSize = 0 + offSystemLock = + offTvPassword = + offHbbTvEnabled = + offHotelModeEnabled=34643 + offHotelModeDtvUpdate=34653 + offHotelMenuAccessCode = 34668 + offHotelMenuPin = 34714 + +[FirmwareData:36856] + ; LM860V + offSize = 0 + offSystemLock = 171 + offTvPassword = 173 + offHbbTvEnabled = 35096 + offHotelModeEnabled=35635 + offHotelModeDtvUpdate=35645 + offHotelMenuAccessCode = 35660 + offHotelMenuPin = 35706 + offSettingsChannelUpdate=36544 + +[FirmwareData:36864] + ; LM (except LM611S,LM340S and LM860V),PM,LS + offSize = 0 + offSystemLock = 171 + offTvPassword = 173 + offHbbTvEnabled = 35096 + offHotelModeEnabled=35635 + offHotelModeDtvUpdate=35645 + offHotelMenuAccessCode = 35660 + offHotelMenuPin = 35706 + offSettingsChannelUpdate=36544 diff --git a/ChanSort.Plugin.TllFile/ChannelDataMapping.cs b/ChanSort.Plugin.TllFile/ChannelDataMapping.cs new file mode 100644 index 0000000..bf1e8f3 --- /dev/null +++ b/ChanSort.Plugin.TllFile/ChannelDataMapping.cs @@ -0,0 +1,23 @@ +using System; +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + internal static class ChannelDataMapping + { + public static unsafe void SetChannelName(ChannelMappingBase mapping, string channelName, Encoding defaultEncoding) + { + byte[] codePagePrefix = new byte[0]; // DvbStringDecoder.GetCodepageBytes(defaultEncoding); + byte[] name = defaultEncoding.GetBytes(channelName); + byte[] newName = new byte[codePagePrefix.Length + name.Length + 1]; + Array.Copy(codePagePrefix, 0, newName, 0, codePagePrefix.Length); + Array.Copy(name, 0, newName, codePagePrefix.Length, name.Length); + fixed (byte* ptrNewName = newName) + { + mapping.NamePtr = ptrNewName; + } + mapping.NameLength = newName.Length; + } + } +} diff --git a/ChanSort.Plugin.TllFile/DvbsChannelDataMapping.cs b/ChanSort.Plugin.TllFile/DvbsChannelDataMapping.cs new file mode 100644 index 0000000..24328c9 --- /dev/null +++ b/ChanSort.Plugin.TllFile/DvbsChannelDataMapping.cs @@ -0,0 +1,197 @@ +using System.Collections.Generic; +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + public unsafe class DvbsChannelDataMapping : DvbChannelMappingBase + { + private const string offSatelliteNr = "offSatelliteNr"; + private const string offTransponderIndex = "offTransponderIndex"; + private const string offProgramNrPreset = "offProgramNrPreset"; + private const string offProgNrCustomized = "offProgNrCustomized"; + private const string maskProgNrCustomized = "maskProgNrCustomized"; + + private readonly DvbStringDecoder dvbsStringDecoder; + + public DvbsChannelDataMapping(IniFile.Section settings, int dataLength, DvbStringDecoder dvbsStringDecoder) : + base(settings, dataLength, null) + { + this.dvbsStringDecoder = dvbsStringDecoder; + } + + #region Encoding + public Encoding Encoding + { + get { return this.dvbsStringDecoder.DefaultEncoding; } + set { this.dvbsStringDecoder.DefaultEncoding = value; } + } + #endregion + + #region InUse + public override bool InUse + { + get { return this.SatelliteNr != 0xFFFF; } + } + #endregion + + #region IsDeleted + public override bool IsDeleted + { + get { return base.IsDeleted; } + set + { + base.IsDeleted = value; + if (value) + this.SatelliteNr = 0xFFFF; + } + } + #endregion + + #region SatelliteNr + public int SatelliteNr + { + get { return this.GetWord(offSatelliteNr); } + set { this.SetWord(offSatelliteNr, value); } + } + #endregion + + #region ProgramNr + public override ushort ProgramNr + { + get { return base.ProgramNr; } + set + { + base.ProgramNr = value; + this.IsProgNrCustomized = true; + } + } + #endregion + + #region ProgramNrPreset + public int ProgramNrPreset + { + get { return this.GetWord(offProgramNrPreset); } + set { this.SetWord(offProgramNrPreset, (ushort)value); } + } + #endregion + + #region IsProgNrCustomized + public bool IsProgNrCustomized + { + get { return GetFlag(offProgNrCustomized, maskProgNrCustomized); } + set { SetFlag(offProgNrCustomized, maskProgNrCustomized, value); } + } + #endregion + + #region Name + public override string Name + { + get + { + string longName, shortName; + this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName); + return longName; + } + set { ChannelDataMapping.SetChannelName(this, value, this.dvbsStringDecoder.DefaultEncoding); } + } + #endregion + + #region ShortName + public override string ShortName + { + get + { + string longName, shortName; + this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName); + return shortName; + } + } + #endregion + + #region Favorites + public override Favorites Favorites + { + get { return (Favorites)((GetByte(offFavorites)>>2) & 0x0F); } + set + { + var newVal = (GetByte(offFavorites) & 0xC3) | (byte)((byte)value << 2); + SetByte(offFavorites, (byte)newVal); + } + } + #endregion + + #region TransponderIndex + public ushort TransponderIndex + { + get { return GetWord(offTransponderIndex); } + set { SetWord(offTransponderIndex, value); } + } + #endregion + + #region Validate() + public string Validate() + { + bool ok = true; + List warnings = new List(); + ok &= ValidateByte(offTransponderIndex) || AddWarning(warnings, "Transponder index"); + ok &= ValidateWord(offProgramNr) || AddWarning(warnings, "Program#"); + + if (ok) + return null; + + StringBuilder sb = new StringBuilder(); + foreach (var warning in warnings) + { + if (sb.Length > 0) + sb.Append(", "); + sb.Append(warning); + } + return sb.ToString(); + } + #endregion + + #region AddWarning() + private bool AddWarning(List warnings, string p) + { + warnings.Add(p); + return false; + } + #endregion + + #region ValidateByte() + private bool ValidateByte(string key) + { + var offsets = this.GetOffsets(key); + if (offsets == null || offsets.Length < 1) + return true; + byte value = *(this.DataPtr + offsets[0]); + bool ok = true; + foreach (int offset in offsets) + { + if (this.DataPtr[offset] != value) + ok = false; + } + return ok; + } + #endregion + + #region ValidateWord() + private bool ValidateWord(string key) + { + var offsets = this.GetOffsets(key); + if (offsets == null || offsets.Length < 1) + return true; + ushort value = *(ushort*)(this.DataPtr + offsets[0]); + bool ok = true; + foreach (int offset in offsets) + { + if (*(ushort*)(this.DataPtr + offset) != value) + ok = false; + } + return ok; + } + #endregion + + } +} diff --git a/ChanSort.Plugin.TllFile/FirmwareDataMapping.cs b/ChanSort.Plugin.TllFile/FirmwareDataMapping.cs new file mode 100644 index 0000000..8ecbac9 --- /dev/null +++ b/ChanSort.Plugin.TllFile/FirmwareDataMapping.cs @@ -0,0 +1,64 @@ +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + public class FirmwareDataMapping : DataMapping + { + private const string offSize = "offSize"; + private const string offSystemLock = "offSystemLock"; + private const string offTvPassword = "offTvPassword"; + private const string offHbbTvEnabled = "offHbbTvEnabled"; + private const string offHotelModeEnabled = "offHotelModeEnabled"; + private const string offHotelModeDtvUpdate = "offHotelModeDtvUpdate"; + private const string offHotelMenuAccessCode = "offHotelMenuAccessCode"; + private const string offHotelMenuPin = "offHotelMenuPin"; + private const string offSettingsChannelUpdate = "offSettingsChannelUpdate"; + + public FirmwareDataMapping(IniFile.Section settings, int structureLength) : + base(settings, structureLength, null) + { + } + + public uint Size { get { return this.GetDword(offSize); } } + public bool SystemLocked { get { return this.GetByte(offSystemLock) != 0; } } + public string TvPassword { get { return CodeToString(this.GetDword(offTvPassword)); } } + public string HotelMenuAccessCode { get { return CodeToString(this.GetDword(offHotelMenuAccessCode)); } } + public string HotelMenuPin { get { return CodeToString(this.GetDword(offHotelMenuPin)); } } + + + public bool SettingsAutomaticChannelUpdate + { + get { return this.GetByte(offSettingsChannelUpdate) != 0; } + set { this.SetByte(offSettingsChannelUpdate, (byte) (value ? 1 : 0)); } + } + + public bool HbbTvEnabled + { + get { return this.GetByte(offHbbTvEnabled) != 0; } + set { this.SetByte(offHbbTvEnabled, (byte)(value ? 1 : 0)); } + } + + public bool HotelModeEnabled + { + get { return this.GetByte(offHotelModeEnabled) != 0; } + set { this.SetByte(offHotelModeEnabled, (byte) (value ? 1 : 0)); } + } + + public bool HotelModeDtvUpdate + { + get { return this.GetByte(offHotelModeDtvUpdate) != 0; } + set { this.SetByte(offHotelModeDtvUpdate, (byte)(value ? 1 : 0)); } + } + + private string CodeToString(uint val) + { + var code = ""; + for (int i = 0; i < 4; i++) + { + code += (char)(33 + (val & 0x0f)); + val >>= 8; + } + return code; + } + } +} diff --git a/ChanSort.Plugin.TllFile/ModelConstants.cs b/ChanSort.Plugin.TllFile/ModelConstants.cs new file mode 100644 index 0000000..c49c9fe --- /dev/null +++ b/ChanSort.Plugin.TllFile/ModelConstants.cs @@ -0,0 +1,49 @@ +namespace ChanSort.Plugin.TllFile +{ + public class ModelConstants + { + public readonly string series; + public readonly byte[] magicBytes; + + public int actChannelLength; // auto-detect + + public readonly int satCount; + public readonly int satLength; + public readonly int sizeOfTransponderBlockHeader; + public readonly int transponderCount; + public readonly int transponderLength; + public readonly int sizeOfZappingTableEntry = 8; + public readonly int dvbsMaxChannelCount; + public readonly int dvbsChannelLength; + public readonly int lnbCount; + public readonly int lnbLength; + public readonly int[] dvbsSubblockLength; + + public bool hasDvbSBlock; + public int firmwareBlockLength; // auto-detect + + public ModelConstants(Api.IniFile.Section iniSection) + { + this.series = iniSection.Name; + this.magicBytes = iniSection.GetBytes("magicBytes"); + this.satCount = iniSection.GetInt("satCount"); + this.satLength = iniSection.GetInt("satLength"); + this.transponderCount = iniSection.GetInt("transponderCount"); + this.transponderLength = iniSection.GetInt("transponderLength"); + this.sizeOfTransponderBlockHeader = 14 + transponderCount/8 + transponderCount*6 + 2; + this.dvbsMaxChannelCount = iniSection.GetInt("dvbsChannelCount"); + this.dvbsChannelLength = iniSection.GetInt("dvbsChannelLength"); + this.lnbCount = iniSection.GetInt("lnbCount"); + this.lnbLength = iniSection.GetInt("lnbLength"); + + this.dvbsSubblockLength = new[] + { + 12, + 14 + 2 + this.satCount + this.satCount*this.satLength, // 2896 + sizeOfTransponderBlockHeader - 4 + transponderCount * transponderLength, // 110712 + 12 + dvbsMaxChannelCount/8 + dvbsMaxChannelCount*sizeOfZappingTableEntry + dvbsMaxChannelCount * dvbsChannelLength, // 602552 + 8 + lnbCount * lnbLength // 1768 + }; + } + } +} diff --git a/ChanSort.Plugin.TllFile/Properties/AssemblyInfo.cs b/ChanSort.Plugin.TllFile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6874222 --- /dev/null +++ b/ChanSort.Plugin.TllFile/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: InternalsVisibleTo("Test.Plugin.TllFile")] + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ChanSort.Plugin.TllFile")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ChanSort.Plugin.TllFile")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("387d8661-ecb3-4957-afca-9a156a90f384")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// 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("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ChanSort.Plugin.TllFile/Properties/licenses.licx b/ChanSort.Plugin.TllFile/Properties/licenses.licx new file mode 100644 index 0000000..88bdc16 --- /dev/null +++ b/ChanSort.Plugin.TllFile/Properties/licenses.licx @@ -0,0 +1,4 @@ +DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/ChanSort.Plugin.TllFile/Resource.Designer.cs b/ChanSort.Plugin.TllFile/Resource.Designer.cs new file mode 100644 index 0000000..ba699a3 --- /dev/null +++ b/ChanSort.Plugin.TllFile/Resource.Designer.cs @@ -0,0 +1,117 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.586 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ChanSort.Plugin.TllFile { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Plugin.TllFile.Resource", typeof(Resource).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to File format is not supported: bad header. + /// + internal static string TllFileSerializer_ERR_badFileHeader { + get { + return ResourceManager.GetString("TllFileSerializer_ERR_badFileHeader", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Channel #{0} (Pr# {1}) was erased because it is a duplicate of channel #{2} (Pr# {3}): {4}. + /// + internal static string TllFileSerializer_ERR_dupeChannel { + get { + return ResourceManager.GetString("TllFileSerializer_ERR_dupeChannel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Wrong checksum: calculated {1:x8} but file has {0:x8}. + /// + internal static string TllFileSerializer_ERR_wrongChecksum { + get { + return ResourceManager.GetString("TllFileSerializer_ERR_wrongChecksum", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File size {0} is larger than allowed maxiumum of {1}. + /// + internal static string TllFileSerializerPlugin_ERR_fileTooBig { + get { + return ResourceManager.GetString("TllFileSerializerPlugin_ERR_fileTooBig", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The file content doesn't match any supported model. + /// + internal static string TllFileSerializerPlugin_ERR_modelUnknown { + get { + return ResourceManager.GetString("TllFileSerializerPlugin_ERR_modelUnknown", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to LG-Electronics *.tll Loader. + /// + internal static string TllFileSerializerPlugin_PluginName { + get { + return ResourceManager.GetString("TllFileSerializerPlugin_PluginName", resourceCulture); + } + } + } +} diff --git a/ChanSort.Plugin.TllFile/Resource.de.Designer.cs b/ChanSort.Plugin.TllFile/Resource.de.Designer.cs new file mode 100644 index 0000000..e69de29 diff --git a/ChanSort.Plugin.TllFile/Resource.de.resx b/ChanSort.Plugin.TllFile/Resource.de.resx new file mode 100644 index 0000000..aed54d5 --- /dev/null +++ b/ChanSort.Plugin.TllFile/Resource.de.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ungültiges Dateiformat: Dateikopf unbekannt + + + Prüfsummenfehler: berechnet wurde {1:x8} aber Datei enthält {0:x8} + + + Der Dateiinhalt entstpricht keinem bekannten Modell + + + Dateigröße {0} überschreitet das erlaubte Maximum von {1} + + + LG-Electronics *.tll Loader + + + Sender #{0} (Pr# {1}) wurde gelöscht da er ein Duplikat von Sender #{2} (Pr# {3}) ist: {4} + + \ No newline at end of file diff --git a/ChanSort.Plugin.TllFile/Resource.resx b/ChanSort.Plugin.TllFile/Resource.resx new file mode 100644 index 0000000..47800ba --- /dev/null +++ b/ChanSort.Plugin.TllFile/Resource.resx @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + File format is not supported: bad header + + + Wrong checksum: calculated {1:x8} but file has {0:x8} + + + The file content doesn't match any supported model + + + File size {0} is larger than allowed maxiumum of {1} + + + LG-Electronics *.tll Loader + + + Channel #{0} (Pr# {1}) was erased because it is a duplicate of channel #{2} (Pr# {3}): {4} + + \ No newline at end of file diff --git a/ChanSort.Plugin.TllFile/TllFileSerializer.cs b/ChanSort.Plugin.TllFile/TllFileSerializer.cs new file mode 100644 index 0000000..c327d82 --- /dev/null +++ b/ChanSort.Plugin.TllFile/TllFileSerializer.cs @@ -0,0 +1,1001 @@ +#define FIX_SYMBOL_RATE + +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + public partial class TllFileSerializer : SerializerBase + { + private readonly string ERR_badFileHeader = Resource.TllFileSerializer_ERR_badFileHeader; + private readonly string ERR_wrongChecksum = Resource.TllFileSerializer_ERR_wrongChecksum; + private readonly string ERR_dupeChannel = Resource.TllFileSerializer_ERR_dupeChannel; + private const ushort RadioMask = 0x4000; + + private readonly byte[] fileContent; + private readonly ModelConstants c; + private readonly ActChannelDataMapping actMapping; + private readonly DvbsChannelDataMapping dvbsMapping; + private readonly FirmwareDataMapping firmwareMapping; + private int analogBlockOffset; + private int firmwareBlockOffset; + private int dvbctBlockOffset; + private int dvbsBlockOffset; + private int dvbsSatListOffset; + private int dvbsTransponderSubblockOffset; + private int dvbsChannelHeaderOffset; + private int dvbsChannelCount; + private int dvbsChannelListOffset; + private int[] dvbsSubblockCrcOffset; + private int dvbsLnbSubblockOffset; + private int settingsBlockOffset; + private int duplicateChannels; + private int deletedChannelsHard; + private int deletedChannelsSoft; + + private bool isDvbsSymbolRateDiv2; + private UnsortedChannelMode unsortedChannelMode; + private Dictionary nextChannelIndex; + private int settingsBlockLength; + private int dvbsChannelLinkedListOffset; + private string countryCode; + public IList SupportedTvCountryCodes { get; private set; } + + #region ctor() + public TllFileSerializer(string inputFile, ModelConstants model, + ActChannelDataMapping actMapping, + DvbsChannelDataMapping dvbsMapping, + FirmwareDataMapping firmwareMapping, + byte[] fileContent) : base(inputFile) + { + this.c = model; + this.actMapping = actMapping; + this.dvbsMapping = dvbsMapping; + this.firmwareMapping = firmwareMapping; + this.fileContent = fileContent; + + this.SupportsChannelNameEdit = true; + this.SupportsEraseChannelData = true; + this.SupportedTvCountryCodes = new List + { + "___ (None)", "AUT (Austria)", "BEL (Belgium)", "CHE (Switzerland)", + "DEU (Germany)", "ESP (Spain)", "FRA (France)", "GBR (Great Britain)", + "GRC (Greece)", "IRL (Ireland)", "ITA (Italy)", "LUX (Luxembourg)", + "NLD (Netherlands)", "PRT (Protugal)", "SVN (Slovenia)" + }; + } + #endregion + + #region DisplayName + public override string DisplayName + { + get { return "TLL loader " + (this.c == null ? "" : this.c.series); } + } + #endregion + + #region Load() + public unsafe override void Load() + { + if (this.dvbsMapping != null) + this.dvbsMapping.Encoding = this.DefaultEncoding; + if (this.actMapping != null) + this.actMapping.Encoding = this.DefaultEncoding; + + fixed (byte* ptr = &fileContent[0]) + { + // file header + for (int i = 0; i < c.magicBytes.Length; i++) + { + if (ptr[i] != c.magicBytes[i]) + throw new IOException(ERR_badFileHeader); + } + byte* p = ptr + c.magicBytes.Length; + + // analog channels + ChannelBlock* block = (ChannelBlock*)p; + this.analogBlockOffset = (int)(p - ptr); + this.ReadAnalogChannels(block); + p += block->BlockSize + 4; + + // firmware data + this.firmwareBlockOffset = (int) (p - ptr); + this.FirmwareDataLength = *(uint*) p; + p += this.FirmwareDataLength + 4; + + // dvb-c/t + block = (ChannelBlock*)p; + this.dvbctBlockOffset = (int)(p - ptr); + this.ReadDvbCtChannels(block); + p += block->BlockSize + 4; + + // models without DVB-S + if (c.hasDvbSBlock) + { + this.dvbsBlockOffset = (int) (p - ptr); + p = ReadDvbSBlock(ptr, p); + } + + // settings + this.settingsBlockOffset = (int) (p - ptr); + if (this.settingsBlockOffset >= fileContent.Length) + this.settingsBlockOffset = 0; + else +// ReSharper disable RedundantAssignment + p = this.ReadSettingsBlock(p); +// ReSharper restore RedundantAssignment + } + + this.StoreToDatabase(); + } + #endregion + + #region ReadAnalogChannels() + private unsafe void ReadAnalogChannels(ChannelBlock* block) + { + if (block->ChannelCount == 0) return; + this.actMapping.DataPtr = &block->StartOfChannelList; + for (int i = 0; i < block->ChannelCount; i++) + { + string badFields = this.actMapping.Validate(); + if (badFields != null) + DataRoot.Warnings.AppendFormat("Inconsistent data in analog dvbsMapping at index {0:d4}: {1}\r\n", i, badFields); + + ChannelInfo ci = new ChannelInfo(SignalSource.AnalogCT, GetSignalType(actMapping.ProgramNr), + i, actMapping.ProgramNr & 0x3FFF, actMapping.Name); + + ci.FreqInMhz = (decimal)(actMapping.AnalogFrequency)/20; + ci.Favorites = actMapping.Favorites; + ci.ChannelOrTransponder = (actMapping.AnalogChannelBand == 0 ? "E" : "S") + actMapping.AnalogChannelNr.ToString("d2"); + ci.Lock = actMapping.Lock; + ci.Skip = actMapping.Skip; + ci.Hidden = actMapping.Hide; + + var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true); + this.DataRoot.AddChannel(list, ci); + + actMapping.DataPtr += block->ChannelLength; + } + } + + #endregion + + #region ReadDvbCtChannels() + private unsafe void ReadDvbCtChannels(ChannelBlock* block) + { + if (block->ChannelCount == 0) return; + this.actMapping.DataPtr = &block->StartOfChannelList; + for (int i = 0; i < block->ChannelCount; i++) + { + string badFields = this.actMapping.Validate(); + if (badFields != null) + DataRoot.Warnings.AppendFormat("Inconsistent data in DVB-C/T dvbsMapping at index {0:d4}: {1}\r\n", i, badFields); + + ChannelInfo ci = new ChannelInfo(SignalSource.DvbCT, this.GetSignalType(actMapping.ProgramNr), i, actMapping.ProgramNr & 0x3FFF, actMapping.Name); + ci.ShortName = actMapping.ShortName; + ci.ChannelOrTransponder = actMapping.ChannelOrTransponder.ToString("d2"); + ci.FreqInMhz = (decimal)actMapping.FrequencyLong / 1000; + ci.ServiceId = actMapping.ServiceId; + ci.VideoPid = actMapping.VideoPid; + ci.AudioPid = actMapping.AudioPid; + ci.OriginalNetworkId = actMapping.OriginalNetworkId; + ci.TransportStreamId = actMapping.TransportStreamId; + ci.ServiceType = actMapping.ServiceType; + ci.Lock = actMapping.Lock; + ci.Skip = actMapping.Skip; + ci.Hidden = actMapping.Hide; + ci.Favorites = actMapping.Favorites; + + var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true); + this.DataRoot.AddChannel(list, ci); + + actMapping.DataPtr += block->ChannelLength; + } + } + #endregion + + #region ReadDvbSBlock() + private unsafe byte* ReadDvbSBlock(byte* rootPtr, byte* p) + { + var satBlock = (DvbSBlockHeader*)p; + + var endPtr = this.ScanDvbSSubBlockChecksums(rootPtr, (byte*)&satBlock->Crc32ForSubblock1); + if ((int)(endPtr - p) - 4 != satBlock->BlockSize) + throw new IOException("ERR_invalidDvbSBlockLen"); + + // subblock 0 + 1 (header + satellites) + p = satBlock->SatOrder + c.satCount + 2; + this.dvbsSatListOffset = (int)(p - rootPtr); + this.ReadSatellites((TllSatellite*)p); + p += c.satCount * c.satLength; + + // subblock 2 (tllTransponder) + this.dvbsTransponderSubblockOffset = (int)(p - rootPtr); + p += c.sizeOfTransponderBlockHeader; + this.ReadTransponderData((TllTransponder*)p); + p += c.transponderCount * c.transponderLength; + + // subblock 3 (channels) + this.dvbsChannelHeaderOffset = (int) (p - rootPtr); + SatChannelListHeader* header = (SatChannelListHeader*)p; + this.dvbsChannelCount = header->ChannelCount; + p += sizeof(SatChannelListHeader); + p += c.dvbsMaxChannelCount/8; // skip allocation bitmap + this.dvbsChannelLinkedListOffset = (int) (p - rootPtr); + this.ReadDvbsChannelLinkedList(p); + p += c.dvbsMaxChannelCount * c.sizeOfZappingTableEntry; // linked dvbsMapping list + this.dvbsChannelListOffset = (int)(p - rootPtr); + this.ReadDvbSChannels(p, header->LinkedListStartIndex); + p += c.dvbsMaxChannelCount * c.dvbsChannelLength; + + // subblock 4 (LNB) + this.dvbsLnbSubblockOffset = (int) (p - rootPtr); + + return p + sizeof(LnbBlockHeader) + c.lnbCount*c.lnbLength; + } + + #endregion + + #region ScanDvbSSubBlockChecksums() + private unsafe byte* ScanDvbSSubBlockChecksums(byte* rootPtr, byte* p) + { + this.dvbsSubblockCrcOffset = new int[c.dvbsSubblockLength.Length]; + for (int i = 0; i < dvbsSubblockCrcOffset.Length; i++) + { + this.dvbsSubblockCrcOffset[i] = (int)(p - rootPtr); + int subblockLength = c.dvbsSubblockLength[i]; + uint fileCrc = *(uint*)p; + uint calcCrc = Crc32.CalcCrc32(p + 4, subblockLength); + if (fileCrc != calcCrc) + throw new IOException(string.Format(ERR_wrongChecksum, calcCrc, fileCrc)); + p += 4 + subblockLength; + } + return p; + } + #endregion + + #region ReadSatellites() + private unsafe void ReadSatellites(TllSatellite* satellite) + { + for (int i = 0; i < c.satCount; i++) + { + char[] satName = new char[50]; + fixed (char* ptrSatName = satName) + { + Encoding.ASCII.GetDecoder().GetChars(satellite->Name, TllSatellite.SatNameLength, ptrSatName, satName.Length, true); + } + Satellite sat = new Satellite(i); + sat.Name = new string(satName).TrimEnd('\0'); + sat.OrbitalPosition = GetSatLocation(*satellite); + + this.DataRoot.AddSatellite(sat); + satellite = (TllSatellite*) ((byte*) satellite + c.satLength); + } + } + #endregion + + #region ReadTransponderData() + private unsafe void ReadTransponderData(TllTransponder* tllTransponder) + { + for (int i=0; iSatIndex == 0xFF) + continue; +#if FIX_SYMBOL_RATE + ushort sr = (ushort)(tllTransponder->SymbolRate & 0x7FFF); + if (sr % 100 >= 95) + tllTransponder->SymbolRate = (ushort)((tllTransponder->SymbolRate & 0x8000) | ((sr / 100 + 1) * 100)); +#endif + + Transponder transponder = new Transponder(i); + transponder.FrequencyInMhz = tllTransponder->Frequency; + transponder.TransportStreamId = tllTransponder->TransportStreamId; + transponder.SymbolRate = this.GetDvbsSymbolRate(tllTransponder); + transponder.OriginalNetworkId = tllTransponder->NetworkId; + if (tllTransponder->SymbolRate == 11000) + this.isDvbsSymbolRateDiv2 = true; + + var sat = this.DataRoot.Satellites.TryGet(tllTransponder->SatIndex/2); + this.DataRoot.AddTransponder(sat, transponder); + + tllTransponder = (TllTransponder*)((byte*)tllTransponder + c.transponderLength); + } + } + #endregion + + #region ReadDvbsChannelLinkedList() + private unsafe void ReadDvbsChannelLinkedList(byte* p) + { + this.nextChannelIndex = new Dictionary(); + for (int i = 0; i < c.dvbsMaxChannelCount; i++) + { + short* node = (short*) (p + i*c.sizeOfZappingTableEntry); + if (node[2] != i) + break; + this.nextChannelIndex.Add(node[2], node[1]); + } + } + #endregion + + #region ReadDvbSChannels() + private unsafe void ReadDvbSChannels(byte* channelRoot, int startIndex) + { + int index = startIndex; + for (int i = 0; i < this.dvbsChannelCount; i++) + { + this.dvbsMapping.DataPtr = channelRoot + index * dvbsMapping.DataLength; + string badFields = this.dvbsMapping.Validate(); + if (badFields != null) + DataRoot.Warnings.AppendFormat("Inconsistent data in DVB-S dvbsMapping at index {0:d4}: {1}\r\n", i, badFields); + + if (dvbsMapping.ProgramNr == 0xFFFF) + break; + + if (dvbsMapping.InUse) + { + if (dvbsMapping.IsDeleted) + ++this.deletedChannelsSoft; + else + this.ReadDvbsChannel(index, i); + } + else + ++this.deletedChannelsHard; + + if (!this.nextChannelIndex.TryGetValue(index, out index) || index == -1) + break; + } + } + #endregion + + #region ReadDvbsChannel() + private void ReadDvbsChannel(int index, int order) + { + Transponder transponder = this.DataRoot.Transponder.TryGet(dvbsMapping.TransponderIndex); + Satellite sat = transponder.Satellite; + ChannelInfo ci = new ChannelInfo(SignalSource.DvbS, this.GetSignalType(dvbsMapping.ProgramNr), + index, dvbsMapping.ProgramNr & 0x3FFF, dvbsMapping.Name); + + ci.Satellite = sat.Name; + ci.SatPosition = sat.OrbitalPosition; + ci.RecordOrder = order; + ci.ShortName = dvbsMapping.ShortName; + ci.ServiceId = dvbsMapping.ServiceId; + ci.VideoPid = dvbsMapping.VideoPid & 0x3FFF; + ci.AudioPid = dvbsMapping.AudioPid; + ci.ServiceType = dvbsMapping.ServiceType; + ci.Lock = dvbsMapping.Lock; + ci.Skip = dvbsMapping.Skip; + ci.Hidden = dvbsMapping.Hide; + ci.Favorites = dvbsMapping.Favorites; + ci.Encrypted = dvbsMapping.Encrypted; + ci.TransportStreamId = transponder.TransportStreamId; + ci.OriginalNetworkId = transponder.OriginalNetworkId; + ci.SymbolRate = transponder.SymbolRate; + ci.Polarity = transponder.Polarity; + ci.FreqInMhz = transponder.FrequencyInMhz; + ci.ChannelOrTransponder = this.GetTransponderChannelNumber((ushort)transponder.FrequencyInMhz); + + var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true); + var dupes = list.GetChannelByUid(ci.Uid); + if (dupes.Count > 0) + { + // duplicate channels (ONID,TSID,SSID) cause the TV to randomly reorder channels and show wrong ones in the + // program list, so we erase all dupes here + this.DataRoot.Warnings.AppendFormat(ERR_dupeChannel, ci.RecordIndex, ci.OldProgramNr, dupes[0].RecordIndex, dupes[0].OldProgramNr, dupes[0].Name).AppendLine(); + this.EraseDuplicateDvbsChannel(); + ++this.duplicateChannels; + } + else + this.DataRoot.AddChannel(list, ci); + } + #endregion + + #region EraseDuplicateDvbsChannel() + private unsafe void EraseDuplicateDvbsChannel() + { + byte* p = this.dvbsMapping.DataPtr; + for (int c = this.dvbsMapping.DataLength - 1; c >= 0; c--) + *p++ = 0xFF; + } + #endregion + + #region GetTransponderChannelNumber() + private string GetTransponderChannelNumber(ushort frequency) + { + int nr = LookupData.Instance.GetTransponderNumber(frequency); + return nr <= 0 ? "" : nr.ToString("d3"); + } + #endregion + + #region GetSatLocation() + private string GetSatLocation(TllSatellite sat) + { + return string.Format("{0}.{1}{2}", sat.PosDeg, sat.PosCDeg & 0x0f, sat.PosCDeg < 16 ? "W" : "E"); + } + #endregion + + #region GetSignalType() + private SignalType GetSignalType(uint programNr) + { + if ((programNr & RadioMask) != 0) + return SignalType.Radio; + return SignalType.Tv; + } + #endregion + + #region GetDvbsSymbolRate(), SetDvbsSymbolRate() + private unsafe ushort GetDvbsSymbolRate(TllTransponder* data) + { + ushort value = (ushort)(data->SymbolRate & 0x7fff); + return value <= 20000 ? (ushort)(value << 1) : value; + } + #endregion + + #region ReadSettingsBlock() + private unsafe byte * ReadSettingsBlock(byte* ptr) + { + this.settingsBlockLength = *(int*)ptr; + byte* p = ptr + 4; + if (settingsBlockLength >= 8) + { + StringBuilder code = new StringBuilder(); + for (int i = 6; i >= 4; i--) + code.Append((char) p[i]); + this.countryCode = code.ToString(); + } + return ptr + 4 + settingsBlockLength; + } + #endregion + + + #region Save() + public unsafe override void Save(string tvOutputFile, string csvOutputFile, UnsortedChannelMode unsortedChannelsMode) + { + this.unsortedChannelMode = unsortedChannelsMode; + + // update in-memory file content + fixed (byte* ptrFileContent = this.fileContent) + { + WriteAnalogChannels(ptrFileContent); + WriteDvbCtChannels(ptrFileContent); + WriteDvbSChannels(ptrFileContent); + } + + using (var file = new FileStream(tvOutputFile, FileMode.Create, FileAccess.Write)) + { + fixed (byte* ptr = fileContent) + { + int[] blockOffsets = + { + this.analogBlockOffset, this.firmwareBlockOffset, this.dvbctBlockOffset, + this.dvbsBlockOffset, this.settingsBlockOffset + }; + + // header + file.Write(this.fileContent, 0, this.analogBlockOffset); + + // data blocks + foreach (var blockOffset in blockOffsets) + { + if (blockOffset == 0) continue; + ChannelBlock* block = (ChannelBlock*) (ptr + blockOffset); + file.Write(this.fileContent, blockOffset, (int)block->BlockSize + 4); + } + } + } + } + #endregion + + private unsafe delegate void ChannelUpdateFunc(ushort slot, ChannelInfo appChannel, byte* tllChannel); + + #region WriteAnalogChannels() + private unsafe void WriteAnalogChannels(byte* ptrFileContent) + { + if (c.actChannelLength == 0) return; + ChannelBlock* block = (ChannelBlock*) (ptrFileContent + this.analogBlockOffset); + byte* ptr = &block->StartOfChannelList; + + this.WriteChannels(SignalSource.AnalogCT, ptr, (uint)c.actChannelLength, this.UpdateACTChannel); + } + #endregion + + #region WriteDvbCtChannels() + private unsafe void WriteDvbCtChannels(byte* ptrFileContent) + { + ChannelBlock* block = (ChannelBlock*)(ptrFileContent + this.dvbctBlockOffset); + byte* ptr = &block->StartOfChannelList; + this.WriteChannels(SignalSource.DvbCT, ptr, (uint)c.actChannelLength, this.UpdateACTChannel); + } + #endregion + + #region UpdateACTChannel() + private unsafe void UpdateACTChannel(ushort slot, ChannelInfo appChannel, byte* actChannel) + { + this.UpdateRawChannel(this.actMapping, actChannel, slot, appChannel); + } + #endregion + + #region WriteDvbSChannels() + private unsafe void WriteDvbSChannels(byte* ptrFileContent) + { + if (c.dvbsChannelLength == 0 || !c.hasDvbSBlock) return; + byte* ptr = ptrFileContent + this.dvbsChannelListOffset; + this.WriteChannels(SignalSource.DvbS, ptr, (uint)c.dvbsChannelLength, this.UpdateDvbSChannel); + + // update checksums + for(int i=0; i maxSlot) + maxSlot = slot; + if (slot == 0) + { + if (appChannel.OldProgramNr != 0 && this.unsortedChannelMode != UnsortedChannelMode.Hide) + slot = ++maxSlot; + } + appChannel.OldProgramNr = slot; + if (appChannel.SignalType == SignalType.Radio) + slot |= RadioMask; + return slot; + } + #endregion + + #region ReorderChannelData() + private unsafe void ReorderChannelData(byte* channelDataBase, uint channelDataLength, IList sortedList, int baseIndex) + { + channelDataBase += baseIndex * channelDataLength; + byte[] copy = new byte[sortedList.Count * channelDataLength]; + for (int i = 0; i < copy.Length; i++) + copy[i] = channelDataBase[i]; + + fixed (byte* pCopy = copy) + { + byte* pTarget = channelDataBase; + for (int index = 0; index < sortedList.Count; index++, pTarget += channelDataLength) + { + ChannelInfo appChannel = sortedList[index]; + if (appChannel.RecordIndex == baseIndex + index) + continue; + + byte* pSource = pCopy + (appChannel.RecordIndex - baseIndex)*channelDataLength; + for (int i = 0; i < channelDataLength; i++) + pTarget[i] = pSource[i]; + + appChannel.RecordIndex = baseIndex + index; + } + } + } + #endregion + + + #region DefaultEncoding + public override Encoding DefaultEncoding + { + get { return base.DefaultEncoding; } + set + { + if (Equals(value, this.DefaultEncoding)) + return; + base.DefaultEncoding = value; + if (this.dvbsMapping != null) + this.dvbsMapping.Encoding = value; + if (this.actMapping != null) + this.actMapping.Encoding = value; + if (this.DataRoot.IsEmpty) + return; + ChangeEncoding(); + } + } + #endregion + + #region ChangeEncoding() + + private unsafe void ChangeEncoding() + { + fixed (byte* ptr = this.fileContent) + { + byte* analogChannels = &((ChannelBlock*)(ptr + this.analogBlockOffset))->StartOfChannelList; + byte* dvbctChannels = &((ChannelBlock*)(ptr + this.dvbctBlockOffset))->StartOfChannelList; + byte* dvbsChannels = (ptr + this.dvbsChannelListOffset); + + foreach (var list in DataRoot.ChannelLists) + { + foreach (var channel in list.Channels) + { + switch (channel.SignalSource) + { + case SignalSource.AnalogCT: + ChangeEncodingForChannels(channel, this.actMapping, analogChannels); + break; + case SignalSource.DvbCT: + ChangeEncodingForChannels(channel, this.actMapping, dvbctChannels); + break; + case SignalSource.DvbS: + ChangeEncodingForChannels(channel, this.dvbsMapping, dvbsChannels); + break; + } + } + } + } + } + + private unsafe void ChangeEncodingForChannels(ChannelInfo appChannel, ChannelMappingBase mapping, byte* channelList) + { + if (appChannel.RecordIndex >= c.dvbsMaxChannelCount) + return; + + mapping.DataPtr = channelList + appChannel.RecordIndex*mapping.DataLength; + appChannel.Name = mapping.Name; + appChannel.ShortName = mapping.ShortName; + } + #endregion + + + #region EraseChannelData() + public unsafe override void EraseChannelData() + { + this.DataRoot = new DataRoot(); + fixed (byte* ptr = this.fileContent) + { + // analog channels + ChannelBlock* block = (ChannelBlock*) (ptr + this.analogBlockOffset); + block->BlockSize = 4; + block->ChannelCount = 0; + + // DVB-C/T channels + block = (ChannelBlock*)(ptr + this.dvbctBlockOffset); + block->BlockSize = 4; + block->ChannelCount = 0; + + if (this.dvbsChannelListOffset != 0) + { + EraseTransponders(ptr); + EraseSatChannels(ptr); + EraseLnbSettings(ptr); + } + + this.Save(this.FileName, null, UnsortedChannelMode.Hide); + } + } + #endregion + + #region EraseTransponders() + private unsafe void EraseTransponders(byte* ptr) + { + // clear DVB-S sat table tranponder counts + byte* p = ptr + this.dvbsSatListOffset; + for (int count = c.satCount; count > 0; count--) + { + TllSatellite* sat = (TllSatellite*) p; + sat->Unknown_36 = 0xffff; + sat->Unknown_38 = 0xffff; + sat->TransponderCount = 0; + sat->Unknown_42 = 0; + p += c.satLength; + } + + // clear DVB-S tllTransponder table + p = ptr + this.dvbsTransponderSubblockOffset; + TransponderBlockHeader* tpHeader = (TransponderBlockHeader*) p; + tpHeader->Unknown1 = 0; + tpHeader->HeadIndex = 0; + tpHeader->TailIndex1 = 0; + tpHeader->TailIndex2 = 0; + tpHeader->TransponderCount = 0; + for (int i = 0; i < c.transponderCount/8; i++) + tpHeader->AllocationBitmap[i] = 0; + tpHeader->TransponderLinkedList[0] = 0xFFFF; + tpHeader->TransponderLinkedList[1] = 0xFFFF; + tpHeader->TransponderLinkedList[3] = 0x0000; + for (int i = 3, count = c.transponderCount*3; i < count; i++) + tpHeader->TransponderLinkedList[i] = 0; + tpHeader->Unknown3 = 0; + p = (byte*) (&tpHeader->Unknown3 + 1); + for (int i = 0, count = c.transponderCount*c.transponderLength; i < count; i++) + p[i] = 0xff; + for (int i = 0; i < c.transponderCount; i++) + { + int off = i*c.transponderLength; + p[off + 4] = 0; + p[off + 5] = 0; + p[off + 8] = 0xFE; + } + } + + #endregion + + #region EraseSatChannels() + private unsafe void EraseSatChannels(byte* ptr) + { + SatChannelListHeader* header = (SatChannelListHeader*)(ptr + this.dvbsChannelHeaderOffset); + header->ChannelCount = 0; + header->LinkedListEndIndex1 = 0; + header->LinkedListEndIndex2 = 0; + + // clear DVB-S dvbsMapping allocation table + byte* p = ptr + this.dvbsChannelHeaderOffset + sizeof(SatChannelListHeader); + for (int count = c.dvbsMaxChannelCount / 8; count > 0; count--) + *p++ = 0; + + // clear DVB-S dvbsMapping linked list + for (int i = 0; i < 4; i++) + *p++ = 0xFF; + for (int count = c.dvbsMaxChannelCount * 8 - 4; count > 0; count--) + *p++ = 0; + + // clear DVB-S dvbsMapping data + p = ptr + this.dvbsChannelListOffset; + for (int count = c.dvbsMaxChannelCount * c.dvbsChannelLength; count > 0; count--) + *p++ = 0xFF; + } + #endregion + + #region EraseLnbSettings() + private unsafe void EraseLnbSettings(byte* ptr) + { + // clear LNB data (except for first - otherwise TV crashes) + byte* p = ptr + this.dvbsLnbSubblockOffset; + LnbBlockHeader* lnbHeader = (LnbBlockHeader*)p; + for (int i = 0; i < c.lnbCount / 8; i++) + lnbHeader->lnbAllocationBitmap[i] = 0; + lnbHeader->lnbAllocationBitmap[0] = 0x01; + lnbHeader->lastUsedIndex = 0; + p += sizeof(LnbBlockHeader); + p += c.lnbLength; + for (int count = (c.lnbCount - 1) * c.lnbLength; count > 0; count--) + *p++ = 0; + } + #endregion + + // Testing + + #region GetHotelMenuOffset() + public unsafe int GetHotelMenuOffset() + { + fixed (byte* ptr = this.fileContent) + { + byte* p = ptr + this.firmwareBlockOffset; + for (int i = 6500; i < this.FirmwareDataLength - 3; i++) + { + if (*(uint*)(p+i) == 0x05000101) // 1,1,0,5 + { + for (int j = 5; j < 20; j++) // backtrack to find Volume/MaxVolue pattern + { + if (*(p + i - j) == 101 && *(p + i - j - 6) == 100) // check for Volume/MaxVolue to be 101/100 + return this.firmwareBlockOffset + i - j - 15; + } + return -1; + } + } + return -1; + } + } + #endregion + + public uint ACTChannelLength { get { return (uint)c.actChannelLength; } } + public bool HasDvbs { get { return c.hasDvbSBlock; } } + public int SatChannelLength { get { return c.hasDvbSBlock ? c.dvbsChannelLength : 0; } } + public bool SatSymbolRateDiv2 { get { return this.isDvbsSymbolRateDiv2; } } + + #region GetFileInformation() + public unsafe override string GetFileInformation() + { + StringBuilder sb = new StringBuilder(); + + fixed (byte* ptr = this.fileContent) + { + ChannelBlock* block = (ChannelBlock*)(ptr + this.analogBlockOffset); + sb.AppendLine("ANALOG"); + sb.Append("Number of data records: ").Append(block->ChannelCount).AppendLine(); + sb.Append("Length of data record: ").Append(block->ChannelLength).AppendLine(); + sb.AppendLine(); + + sb.AppendLine(); + sb.AppendLine("DVB-C/T"); + block = (ChannelBlock*)(ptr + this.dvbctBlockOffset); + sb.Append("Number of data records: ").Append(block->ChannelCount).AppendLine(); + sb.Append("Length of data record: ").Append(block->ChannelLength).AppendLine(); + sb.AppendLine(); + + sb.AppendLine(); + sb.AppendLine("DVB-S"); + if (c.hasDvbSBlock) + { + int numberOfDupePrNr; + CountDuplicateRecords(out numberOfDupePrNr); + SatChannelListHeader* satHeader = (SatChannelListHeader*) (ptr + dvbsChannelHeaderOffset); + int numberOfDeletedChannels, numberOfChannelsAtPr0; + this.CountDeletedDvbsChannels(ptr, satHeader->ChannelCount, out numberOfDeletedChannels, out numberOfChannelsAtPr0); + sb.Append("Max number of data records: ").Append(c.dvbsMaxChannelCount).AppendLine(); + sb.Append("Length of data record: ").Append(c.dvbsChannelLength).AppendLine(); + sb.Append("Channel records in use: ").Append(satHeader->ChannelCount).AppendLine(); + sb.Append("Channel records marked hard-deleted: ").Append(this.deletedChannelsHard).AppendLine(); + sb.Append("Channel records marked soft-deleted: ").Append(this.deletedChannelsSoft).AppendLine(); + sb.Append("Channel records erased (duplicates): ").Append(this.duplicateChannels).AppendLine(); + sb.Append("Channel records with Pr# 0: ").Append(numberOfChannelsAtPr0).AppendLine(); + sb.Append("Channel records with duplicate Pr#: ").Append(numberOfDupePrNr).AppendLine(); + } + else + sb.AppendLine("not present"); + } + + return sb.ToString(); + } + + private void CountDuplicateRecords(out int numberOfDupePrNr) + { + numberOfDupePrNr = 0; + foreach (var list in this.DataRoot.ChannelLists) + { + if ((list.SignalSource & SignalSource.Sat) != 0) + numberOfDupePrNr += list.DuplicateProgNrCount; + } + } + + private unsafe void CountDeletedDvbsChannels(byte* ptr, ushort count, out int deletedChannels, out int channelsAtPr0) + { + deletedChannels = 0; + channelsAtPr0 = 0; + this.dvbsMapping.DataPtr = ptr + dvbsChannelListOffset; + for (int i = 0; i < count; i++) + { + if (!this.dvbsMapping.InUse) + ++deletedChannels; + else if ((this.dvbsMapping.ProgramNr & 0x3FFF) == 0 && !this.dvbsMapping.IsDeleted) + ++channelsAtPr0; + this.dvbsMapping.Next(); + } + } + #endregion + + #region TvCountryCode + public unsafe string TvCountryCode + { + get { return this.countryCode; } + set + { + if (value.Length < 3 || this.settingsBlockOffset == 0 || this.settingsBlockLength < 8) return; + value = value.ToUpper(); + fixed (byte* ptr = this.fileContent) + { + byte *p = ptr + this.settingsBlockOffset + 4 + 4 + 2; + for (int i = 0; i < 3; i++) + *p-- = (byte) value[i]; + } + this.countryCode = value; + } + } + #endregion + + #region ShowDeviceSettingsForm() + public override void ShowDeviceSettingsForm(object parentWindow) + { + using (var dlg = new TvSettingsForm(this)) + { + dlg.ShowDialog((Form) parentWindow); + } + } + #endregion + + + internal byte[] FileContent { get { return this.fileContent; } } + + internal unsafe FirmwareDataMapping GetFirmwareMapping(byte* ptrFileContent) + { + if (this.firmwareMapping == null) return null; + this.firmwareMapping.DataPtr = ptrFileContent + this.firmwareBlockOffset; + return this.firmwareMapping; + } + + internal uint FirmwareDataLength { get; private set; } + internal int FirmwareOffset { get { return this.firmwareBlockOffset; } } + } +} diff --git a/ChanSort.Plugin.TllFile/TllFileSerializer.sql.cs b/ChanSort.Plugin.TllFile/TllFileSerializer.sql.cs new file mode 100644 index 0000000..bfb24b2 --- /dev/null +++ b/ChanSort.Plugin.TllFile/TllFileSerializer.sql.cs @@ -0,0 +1,208 @@ +using System; +using System.Data; +using System.Data.Common; +using System.Data.SqlClient; +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + public partial class TllFileSerializer + { + #region SQL + + /* + +create table list ( +listid int not null, +filename varchar(100), +created datetime, +primary key (listid)) + +create table channel ( +listid int not null, +slot int not null, +isdel bit not null, +seq int, +progmask int not null, +prognr int not null, +name varchar(40) not null, +tpnr int not null, +satnr int, +onid int not null, +tsid int not null, +ssid int not null, +uid varchar(25), +favcrypt int, +lockskiphide int, +progfix int, +primary key (listid, slot)) + +create table chanseq( +listid int not null, +seq int not null, +slot int not null, +primary key (listid, seq)) + + +update channel +set seq=s.seq +from channel c inner join chanseq s on s.listid=c.listid and s.slot=c.slot + + +*/ + #endregion + + private unsafe void StoreToDatabase() + { + return; + var list = this.DataRoot.GetChannelList(SignalSource.DvbS, SignalType.Tv, false); + if (list == null) + return; + + using (var conn = SqlClientFactory.Instance.CreateConnection()) + { + conn.ConnectionString = "server=(local);database=ChanSort;Integrated Security=true"; + conn.Open(); + + using (var cmd = conn.CreateCommand()) + { + var listId = InsertListData(cmd); + + fixed (byte* ptr = this.fileContent) + { + InsertSequenceData(ptr, cmd, listId); + InsertChannelData(ptr, cmd, listId); + } + } + } + } + + private unsafe void InsertSequenceData(byte* ptr, DbCommand cmd, int listId) + { + cmd.Parameters.Clear(); + cmd.CommandText = "insert into chanseq(listid,seq,slot) values (" + listId + ",@seq,@slot)"; + var pSeq = cmd.CreateParameter(); + pSeq.ParameterName = "@seq"; + pSeq.DbType = DbType.Int32; + cmd.Parameters.Add(pSeq); + var pSlot = cmd.CreateParameter(); + pSlot.ParameterName = "@slot"; + pSlot.DbType = DbType.Int32; + cmd.Parameters.Add(pSlot); + + SatChannelListHeader* header = (SatChannelListHeader*) (ptr + this.dvbsChannelHeaderOffset); + + int seq = 0; + ushort tableIndex = header->LinkedListStartIndex; + while(tableIndex != 0xFFFF) + { + ushort* entry = (ushort*)(ptr + this.dvbsChannelLinkedListOffset + tableIndex*c.sizeOfZappingTableEntry); + pSeq.Value = seq; + if (entry[2] != tableIndex) + break; + pSlot.Value = (int)tableIndex; + cmd.ExecuteNonQuery(); + + tableIndex = entry[1]; + ++seq; + } + } + + #region InsertListData() + private int InsertListData(DbCommand cmd) + { + cmd.CommandText = "select max(listid) from list"; + var maxObj = cmd.ExecuteScalar(); + int listId = maxObj == DBNull.Value ? 1 : (int) maxObj + 1; + + cmd.CommandText = "insert into list(listid, filename, created) values (" + listId + ", @filename, getdate())"; + var parm = cmd.CreateParameter(); + parm.ParameterName = "@filename"; + parm.DbType = DbType.String; + parm.Value = this.FileName; + cmd.Parameters.Add(parm); + cmd.ExecuteNonQuery(); + return listId; + } + #endregion + + #region InsertChannelData() + private unsafe void InsertChannelData(byte* ptr, DbCommand cmd, int listId) + { + PrepareChannelInsert(cmd); + + dvbsMapping.DataPtr = ptr + this.dvbsChannelListOffset; + for (int slot = 0; slot < this.dvbsChannelCount; slot++) + { + cmd.Parameters["@listid"].Value = listId; + cmd.Parameters["@slot"].Value = slot; + cmd.Parameters["@seq"].Value = DBNull.Value; + cmd.Parameters["@isdel"].Value = dvbsMapping.InUse ? 0 : 1; + cmd.Parameters["@progmask"].Value = dvbsMapping.ProgramNr; + cmd.Parameters["@prognr"].Value = (dvbsMapping.ProgramNr & 0x3FFF); + cmd.Parameters["@progfix"].Value = dvbsMapping.ProgramNrPreset; + cmd.Parameters["@name"].Value = dvbsMapping.Name; + cmd.Parameters["@tpnr"].Value = dvbsMapping.TransponderIndex; + var transp = this.DataRoot.Transponder.TryGet(dvbsMapping.TransponderIndex); + cmd.Parameters["@satnr"].Value = transp == null ? (object)DBNull.Value : transp.Satellite.Id; + cmd.Parameters["@onid"].Value = transp == null ? (object)DBNull.Value : transp.OriginalNetworkId; + cmd.Parameters["@tsid"].Value = transp == null ? (object)DBNull.Value : transp.TransportStreamId; + cmd.Parameters["@ssid"].Value = (int)dvbsMapping.ServiceId; + cmd.Parameters["@uid"].Value = transp == null + ? (object) DBNull.Value + : transp.TransportStreamId + "-" + transp.OriginalNetworkId + "-" + + dvbsMapping.ServiceId; + cmd.Parameters["@favcrypt"].Value = (int)dvbsMapping.GetByte("offFavorites"); + cmd.Parameters["@lockskiphide"].Value = (int)dvbsMapping.GetByte("offLock"); + cmd.ExecuteNonQuery(); + dvbsMapping.Next(); + } + } + #endregion + + #region PrepareChannelInsert() + private static void PrepareChannelInsert(DbCommand cmd) + { + var cols = new[] { "listid", "slot", "seq", "isdel", "progmask", "prognr", "progfix", "name", "tpnr", "satnr", "onid", "tsid", "ssid", "uid", "favcrypt", "lockskiphide" }; + + cmd.Parameters.Clear(); + + var sb = new StringBuilder(); + sb.Append("insert into channel ("); + var comma = ""; + foreach (var col in cols) + { + sb.Append(comma).Append(col); + comma = ","; + } + sb.Append(") values ("); + comma = ""; + foreach (var col in cols) + { + sb.Append(comma).Append('@').Append(col); + comma = ","; + } + sb.Append(")"); + cmd.CommandText = sb.ToString(); + + foreach (var col in cols) + { + DbParameter parm = cmd.CreateParameter(); + parm.ParameterName = "@" + col; + if (col == "name" || col == "uid") + { + parm.DbType = DbType.String; + parm.Size = 40; + } + else + parm.DbType = DbType.Int32; + cmd.Parameters.Add(parm); + } + + cmd.Prepare(); + } + #endregion + + } +} \ No newline at end of file diff --git a/ChanSort.Plugin.TllFile/TllFileSerializerPlugin.cs b/ChanSort.Plugin.TllFile/TllFileSerializerPlugin.cs new file mode 100644 index 0000000..8d4006b --- /dev/null +++ b/ChanSort.Plugin.TllFile/TllFileSerializerPlugin.cs @@ -0,0 +1,185 @@ +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using ChanSort.Api; + +namespace ChanSort.Plugin.TllFile +{ + public class TllFileSerializerPlugin : ISerializerPlugin + { + private const int MAX_FILE_SIZE = 16*1000*1000; + private readonly string ERR_modelUnknown = Resource.TllFileSerializerPlugin_ERR_modelUnknown; + private readonly string ERR_fileTooBig = Resource.TllFileSerializerPlugin_ERR_fileTooBig; + private static readonly byte[] DVBS_S2 = Encoding.ASCII.GetBytes("DVBS-S2"); + + private readonly MappingPool actMappings = new MappingPool("Analog and DVB-C/T"); + private readonly MappingPool dvbsMappings = new MappingPool("DVB-S"); + private readonly MappingPool firmwareMappings = new MappingPool("Firmware"); + private readonly List modelConstants = new List(); + private string series = ""; + + public string PluginName { get { return Resource.TllFileSerializerPlugin_PluginName; } } + public string FileFilter { get { return "*.TLL"; } } + + public TllFileSerializerPlugin() + { + this.ReadConfigurationFromIniFile(); + } + + #region ReadConfigurationFromIniFile() + + private void ReadConfigurationFromIniFile() + { + DvbStringDecoder dvbsStringDecoder = new DvbStringDecoder(null); + string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini"); + IniFile ini = new IniFile(iniFile); + foreach (var section in ini.Sections) + { + int idx = section.Name.IndexOf(":"); + int recordLength = idx < 0 ? 0 : int.Parse(section.Name.Substring(idx + 1)); + if (section.Name.StartsWith("FileConfiguration")) + this.ReadModelConstants(section); + else if (section.Name.StartsWith("ACTChannelDataMapping")) + actMappings.AddMapping(new ActChannelDataMapping(section, recordLength, dvbsStringDecoder)); + else if (section.Name.StartsWith("SatChannelDataMapping")) + dvbsMappings.AddMapping(new DvbsChannelDataMapping(section, recordLength, dvbsStringDecoder)); + else if (section.Name.StartsWith("FirmwareData")) + firmwareMappings.AddMapping(new FirmwareDataMapping(section, recordLength)); + } + } + + private void ReadModelConstants(IniFile.Section section) + { + if (this.series.Length > 0) + this.series += ","; + this.series += section.Name; + + ModelConstants c = new ModelConstants(section); + this.modelConstants.Add(c); + } + #endregion + + #region CreateSerializer() + public SerializerBase CreateSerializer(string inputFile) + { + long fileSize = new FileInfo(inputFile).Length; + if (fileSize > MAX_FILE_SIZE) + throw new IOException(string.Format(ERR_fileTooBig, fileSize, MAX_FILE_SIZE)); + byte[] fileContent = File.ReadAllBytes(inputFile); + ModelConstants model = this.DetermineModel(fileContent); + if (model == null) + throw new IOException(ERR_modelUnknown); + + return new TllFileSerializer(inputFile, model, + this.actMappings.GetMapping(model.actChannelLength), + this.dvbsMappings.GetMapping(model.dvbsChannelLength), + this.firmwareMappings.GetMapping(model.firmwareBlockLength, false), + fileContent); + } + #endregion + + + #region DetermineModel() + private ModelConstants DetermineModel(byte[] fileContent) + { + foreach (var model in this.modelConstants) + { + if (this.IsModel(fileContent, model)) + return model; + } + return null; + } + #endregion + + #region IsModel() + private unsafe bool IsModel(byte[] fileContent, ModelConstants c) + { + c.hasDvbSBlock = false; + fixed (byte* p = fileContent) + { + long fileSize = fileContent.Length; + + // check magic file header + uint offset = 0; + if (fileSize < c.magicBytes.Length) + return false; + if (!ByteCompare(p, c.magicBytes)) + return false; + offset += (uint)c.magicBytes.Length; + + // analog channel block + if (offset + 8 > fileSize) return false; + uint blockSize = *(uint*)(p + offset); + uint channelCount = *(uint*) (p + offset + 4); + if (blockSize < 4 + channelCount) + return false; + if (blockSize > 4 && channelCount > 0) + c.actChannelLength = (int)((blockSize - 4)/channelCount); + offset += 4 + blockSize; + + // firmware data block + if (offset + 4 > fileSize) return false; + blockSize = *(uint*) (p + offset); + c.firmwareBlockLength = (int)blockSize; + offset += 4 + blockSize; + + // DVB-C/T channel block + if (offset + 8 > fileSize) return false; + blockSize = *(uint*) (p + offset); + channelCount = *(uint*) (p + offset + 4); + if (blockSize < 4 + channelCount) + return false; + if (blockSize > 4 && channelCount > 0) + c.actChannelLength = (int)((blockSize - 4) / channelCount); + offset += 4 + blockSize; + + // optional blocks + while (offset != fileSize) + { + if (offset + 4 > fileSize) + return false; + + blockSize = *(uint*) (p + offset); + // check for DVBS-S2 block + if (blockSize >= sizeof(DvbSBlockHeader)) + { + DvbSBlockHeader* header = (DvbSBlockHeader*) (p + offset); + if (ByteCompare(header->DvbS_S2, DVBS_S2)) + { + c.hasDvbSBlock = true; + int length = sizeof(DvbSBlockHeader) + + c.satCount*c.satLength + + c.sizeOfTransponderBlockHeader + + c.transponderCount*c.transponderLength + + sizeof(SatChannelListHeader) + + c.dvbsMaxChannelCount/8 + + c.dvbsMaxChannelCount*c.sizeOfZappingTableEntry + + c.dvbsMaxChannelCount*c.dvbsChannelLength + + sizeof(LnbBlockHeader) + c.lnbCount*c.lnbLength; + if (length != 4 + blockSize) + return false; + } + } + + offset += 4 + blockSize; + } + return true; + } + } + + #endregion + + #region ByteCompare() + private static unsafe bool ByteCompare(byte* buffer, byte[] expected) + { + for (int i = 0; i < expected.Length; i++) + { + if (buffer[i] != expected[i]) + return false; + } + return true; + } + #endregion + } +} diff --git a/ChanSort.Plugin.TllFile/TllStructures.cs b/ChanSort.Plugin.TllFile/TllStructures.cs new file mode 100644 index 0000000..6dc5059 --- /dev/null +++ b/ChanSort.Plugin.TllFile/TllStructures.cs @@ -0,0 +1,169 @@ +using System.Runtime.InteropServices; + +namespace ChanSort.Plugin.TllFile +{ + /* + TllFileHeader? ("ZZZZ" or nothing) + ChannelBlock + AnalogChannel[] + FirmwareBlock + ChannelBlock + DvbCtChannel[] + DvbSBlockHeader + TllSatellite[64] + TransponderBlockHeader + TllTransponder[2400] + SatChannelListHeader + DvbSChannel[7520] + LnbBlockHeader + Lnb[40] + SettingsBlock? + */ + + #region struct ChannelBlock + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct ChannelBlock + { + public uint BlockSize; // = 4 + ChannelCount * ChannelLength + public uint ChannelCount; + public uint ChannelLength { get { return ChannelCount == 0 ? 0 : (BlockSize - 4) / ChannelCount; } } + public byte StartOfChannelList; + } + #endregion + + #region struct FirmwareBlock + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct FirmwareBlock + { + public uint BlockSize; + public fixed byte Unknown_0x0000[35631]; + public fixed byte HotelMenu[29]; + public fixed byte Unknown_0x8B4C[1204]; // or more + } + #endregion + + + #region struct DvbSBlockHeader + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct DvbSBlockHeader + { + public uint BlockSize; + public uint Crc32ForSubblock1; + public fixed byte DvbS_S2 [8]; // "DVBS-S2\0" + public ushort Unknown_0x10; // 0x0007 + public ushort Unknown_0x12; // 0x0004 // 0x0000 + + public uint Crc32ForSubblock2; + public const int Unknown0x18_Length = 12; + public fixed byte Unknown_0x18[Unknown0x18_Length]; + public ushort SatOrderLength; + public fixed byte SatOrder[64]; + public fixed byte Unknown [2]; + //public fixed TllSatellite Satellites[64] + } + #endregion + + #region struct TllSatellite + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct TllSatellite + { + public const int SatNameLength =32; + + public fixed byte Name [SatNameLength]; + public byte PosDeg; + public byte PosCDeg; + public byte Unknown_34; // typically 0 + public byte Unknown_35; // typically 2 + public ushort Unknown_36; // 0xFFFF if sat is not used + public ushort Unknown_38; // 0xFFFF if sat is not used + public ushort TransponderCount; + public ushort Unknown_42; // typically 0 + } + #endregion + + #region struct TransponderLinkedList + public struct TransponderLinkedList + { + public ushort Prev; + public ushort Next; + public ushort Current; + } + #endregion + + #region struct TransponderBlockHeader + public unsafe struct TransponderBlockHeader + { + public uint Crc32; + public ushort Unknown1; + public ushort HeadIndex; + public ushort TailIndex1; + public ushort TailIndex2; + public ushort TransponderCount; + public fixed byte AllocationBitmap [2400/8]; + public fixed ushort TransponderLinkedList [2400*3]; + public ushort Unknown3; + // public fixed TllTransponder Transponders[2400] + } + #endregion + + #region struct TllTransponder + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct TllTransponder + { + public fixed byte Unknown_0x00 [10]; + public ushort Index; + public ushort Frequency; + public fixed byte Unknown_0x0E [4]; + public ushort NetworkId; + public ushort TransportStreamId; + public fixed byte Unknown_0x16 [3]; + public ushort SymbolRateAndPolarity; + public fixed byte Unknown_0x1B [9]; + public byte SatIndex; + public fixed byte Unknown_0x25 [3]; + + //public int SymbolRate { get { return this.SymbolRateAndPolarity & 0x7FFFF; } } + public ushort SymbolRate { get { return this.SymbolRateAndPolarity; } set { this.SymbolRateAndPolarity = value; } } + public char Polarity { get { return '\0'; } } + } + #endregion + + #region struct SatChannelListHeader + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct SatChannelListHeader + { + public uint Checksum; + public fixed byte Unknown_0x04[4]; + public ushort LinkedListStartIndex; + public ushort LinkedListEndIndex1; + public ushort LinkedListEndIndex2; + public ushort ChannelCount; + } + #endregion + + #region struct LnbBlockHeader + public unsafe struct LnbBlockHeader + { + public uint crc32; + public ushort lastUsedIndex; + public fixed byte lnbAllocationBitmap[6]; + // public Lnb lnbs[40]; + } + #endregion + + #region struct Lnb + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct Lnb + { + public byte SettingsID; + public fixed byte Unknown_0x0D[3]; + public byte SatelliteID; + public fixed byte Unknown_0x11[3]; + public fixed byte FrequencyName[12]; + public ushort LOF1; + public fixed byte Unknown_0x22 [2]; + public ushort LOF2; + public fixed byte Unknown_0x26 [18]; + } + #endregion +} diff --git a/ChanSort.Plugin.TllFile/TvSettingsForm.Designer.cs b/ChanSort.Plugin.TllFile/TvSettingsForm.Designer.cs new file mode 100644 index 0000000..c61de4f --- /dev/null +++ b/ChanSort.Plugin.TllFile/TvSettingsForm.Designer.cs @@ -0,0 +1,223 @@ +namespace ChanSort.Plugin.TllFile +{ + partial class TvSettingsForm + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvSettingsForm)); + this.grpSettings = new DevExpress.XtraEditors.GroupControl(); + this.cbHbbTv = new DevExpress.XtraEditors.CheckEdit(); + this.cbCustomCountry = new DevExpress.XtraEditors.CheckEdit(); + this.comboBoxEdit1 = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); + this.btnOk = new DevExpress.XtraEditors.SimpleButton(); + this.btnCancel = new DevExpress.XtraEditors.SimpleButton(); + this.grpHotelMode = new DevExpress.XtraEditors.GroupControl(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); + this.cbDtvUpdate = new DevExpress.XtraEditors.CheckEdit(); + this.cbHotelMode = new DevExpress.XtraEditors.CheckEdit(); + this.cbAutoChannelUpdate = new DevExpress.XtraEditors.CheckEdit(); + this.groupControl1 = new DevExpress.XtraEditors.GroupControl(); + this.grpFirmwareNote = new DevExpress.XtraEditors.GroupControl(); + this.labelControl4 = new DevExpress.XtraEditors.LabelControl(); + ((System.ComponentModel.ISupportInitialize)(this.grpSettings)).BeginInit(); + this.grpSettings.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cbHbbTv.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbCustomCountry.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.grpHotelMode)).BeginInit(); + this.grpHotelMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cbDtvUpdate.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbHotelMode.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbAutoChannelUpdate.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit(); + this.groupControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.grpFirmwareNote)).BeginInit(); + this.grpFirmwareNote.SuspendLayout(); + this.SuspendLayout(); + // + // grpSettings + // + this.grpSettings.Controls.Add(this.cbHbbTv); + this.grpSettings.Controls.Add(this.cbCustomCountry); + this.grpSettings.Controls.Add(this.comboBoxEdit1); + this.grpSettings.Controls.Add(this.labelControl1); + resources.ApplyResources(this.grpSettings, "grpSettings"); + this.grpSettings.Name = "grpSettings"; + // + // cbHbbTv + // + resources.ApplyResources(this.cbHbbTv, "cbHbbTv"); + this.cbHbbTv.Name = "cbHbbTv"; + this.cbHbbTv.Properties.Caption = resources.GetString("cbHbbTv.Properties.Caption"); + // + // cbCustomCountry + // + resources.ApplyResources(this.cbCustomCountry, "cbCustomCountry"); + this.cbCustomCountry.Name = "cbCustomCountry"; + this.cbCustomCountry.Properties.Caption = resources.GetString("cbCustomCountry.Properties.Caption"); + this.cbCustomCountry.CheckedChanged += new System.EventHandler(this.cbCustomCountry_CheckedChanged); + // + // comboBoxEdit1 + // + resources.ApplyResources(this.comboBoxEdit1, "comboBoxEdit1"); + this.comboBoxEdit1.Name = "comboBoxEdit1"; + this.comboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("comboBoxEdit1.Properties.Buttons"))))}); + this.comboBoxEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; + // + // labelControl1 + // + resources.ApplyResources(this.labelControl1, "labelControl1"); + this.labelControl1.Name = "labelControl1"; + // + // btnOk + // + resources.ApplyResources(this.btnOk, "btnOk"); + this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOk.Name = "btnOk"; + this.btnOk.Click += new System.EventHandler(this.btnOk_Click); + // + // btnCancel + // + resources.ApplyResources(this.btnCancel, "btnCancel"); + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Name = "btnCancel"; + // + // grpHotelMode + // + this.grpHotelMode.Controls.Add(this.labelControl3); + this.grpHotelMode.Controls.Add(this.labelControl2); + this.grpHotelMode.Controls.Add(this.cbDtvUpdate); + this.grpHotelMode.Controls.Add(this.cbHotelMode); + resources.ApplyResources(this.grpHotelMode, "grpHotelMode"); + this.grpHotelMode.Name = "grpHotelMode"; + // + // labelControl3 + // + resources.ApplyResources(this.labelControl3, "labelControl3"); + this.labelControl3.Name = "labelControl3"; + // + // labelControl2 + // + resources.ApplyResources(this.labelControl2, "labelControl2"); + this.labelControl2.Name = "labelControl2"; + // + // cbDtvUpdate + // + resources.ApplyResources(this.cbDtvUpdate, "cbDtvUpdate"); + this.cbDtvUpdate.Name = "cbDtvUpdate"; + this.cbDtvUpdate.Properties.Caption = resources.GetString("cbDtvUpdate.Properties.Caption"); + // + // cbHotelMode + // + resources.ApplyResources(this.cbHotelMode, "cbHotelMode"); + this.cbHotelMode.Name = "cbHotelMode"; + this.cbHotelMode.Properties.Caption = resources.GetString("cbHotelMode.Properties.Caption"); + // + // cbAutoChannelUpdate + // + resources.ApplyResources(this.cbAutoChannelUpdate, "cbAutoChannelUpdate"); + this.cbAutoChannelUpdate.Name = "cbAutoChannelUpdate"; + this.cbAutoChannelUpdate.Properties.Caption = resources.GetString("cbAutoChannelUpdate.Properties.Caption"); + // + // groupControl1 + // + this.groupControl1.Controls.Add(this.cbAutoChannelUpdate); + resources.ApplyResources(this.groupControl1, "groupControl1"); + this.groupControl1.Name = "groupControl1"; + // + // grpFirmwareNote + // + this.grpFirmwareNote.Controls.Add(this.labelControl4); + resources.ApplyResources(this.grpFirmwareNote, "grpFirmwareNote"); + this.grpFirmwareNote.Name = "grpFirmwareNote"; + // + // labelControl4 + // + resources.ApplyResources(this.labelControl4, "labelControl4"); + this.labelControl4.Name = "labelControl4"; + // + // TvSettingsForm + // + this.AcceptButton = this.btnOk; + this.Appearance.Options.UseBackColor = true; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnCancel; + this.Controls.Add(this.grpHotelMode); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnOk); + this.Controls.Add(this.grpSettings); + this.Controls.Add(this.groupControl1); + this.Controls.Add(this.grpFirmwareNote); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "TvSettingsForm"; + this.Load += new System.EventHandler(this.TvSettingsForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.grpSettings)).EndInit(); + this.grpSettings.ResumeLayout(false); + this.grpSettings.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cbHbbTv.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbCustomCountry.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.grpHotelMode)).EndInit(); + this.grpHotelMode.ResumeLayout(false); + this.grpHotelMode.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cbDtvUpdate.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbHotelMode.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.cbAutoChannelUpdate.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit(); + this.groupControl1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.grpFirmwareNote)).EndInit(); + this.grpFirmwareNote.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraEditors.GroupControl grpSettings; + private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit1; + private DevExpress.XtraEditors.LabelControl labelControl1; + private DevExpress.XtraEditors.SimpleButton btnOk; + private DevExpress.XtraEditors.SimpleButton btnCancel; + private DevExpress.XtraEditors.CheckEdit cbCustomCountry; + private DevExpress.XtraEditors.GroupControl grpHotelMode; + private DevExpress.XtraEditors.CheckEdit cbHbbTv; + private DevExpress.XtraEditors.CheckEdit cbDtvUpdate; + private DevExpress.XtraEditors.CheckEdit cbHotelMode; + private DevExpress.XtraEditors.CheckEdit cbAutoChannelUpdate; + private DevExpress.XtraEditors.GroupControl groupControl1; + private DevExpress.XtraEditors.LabelControl labelControl3; + private DevExpress.XtraEditors.LabelControl labelControl2; + private DevExpress.XtraEditors.GroupControl grpFirmwareNote; + private DevExpress.XtraEditors.LabelControl labelControl4; + } +} \ No newline at end of file diff --git a/ChanSort.Plugin.TllFile/TvSettingsForm.cs b/ChanSort.Plugin.TllFile/TvSettingsForm.cs new file mode 100644 index 0000000..7836c45 --- /dev/null +++ b/ChanSort.Plugin.TllFile/TvSettingsForm.cs @@ -0,0 +1,73 @@ +using System; +using DevExpress.XtraEditors; +using DevExpress.XtraEditors.Controls; + +namespace ChanSort.Plugin.TllFile +{ + public partial class TvSettingsForm : XtraForm + { + private readonly TllFileSerializer tvSerializer; + + public TvSettingsForm(TllFileSerializer tvSerializer) + { + this.tvSerializer = tvSerializer; + InitializeComponent(); + } + + private unsafe void TvSettingsForm_Load(object sender, EventArgs e) + { + var items = tvSerializer.SupportedTvCountryCodes; + foreach(var item in items) + this.comboBoxEdit1.Properties.Items.Add(item); + this.comboBoxEdit1.Text = this.tvSerializer.TvCountryCode; + + byte[] fileContent = this.tvSerializer.FileContent; + fixed (byte* ptr = fileContent) + { + var mapping = this.tvSerializer.GetFirmwareMapping(ptr); + if (mapping != null) + { + this.cbAutoChannelUpdate.Checked = mapping.SettingsAutomaticChannelUpdate; + this.cbHbbTv.Checked = mapping.HbbTvEnabled; + this.cbHotelMode.Checked = mapping.HotelModeEnabled; + this.cbDtvUpdate.Checked = mapping.HotelModeDtvUpdate; + + this.grpFirmwareNote.Visible = false; + this.Height -= this.grpFirmwareNote.Height; + } + else + { + this.cbAutoChannelUpdate.Enabled = false; + this.cbHbbTv.Enabled = false; + this.cbHotelMode.Enabled = false; + this.cbDtvUpdate.Enabled = false; + } + } + } + + private unsafe void btnOk_Click(object sender, EventArgs e) + { + this.tvSerializer.TvCountryCode = this.comboBoxEdit1.Text; + + byte[] fileContent = this.tvSerializer.FileContent; + fixed (byte* ptr = fileContent) + { + var mapping = this.tvSerializer.GetFirmwareMapping(ptr); + if (mapping != null) + { + mapping.SettingsAutomaticChannelUpdate = this.cbAutoChannelUpdate.Checked; + mapping.HbbTvEnabled = this.cbHbbTv.Checked; + mapping.HotelModeEnabled = this.cbHotelMode.Checked; + mapping.HotelModeDtvUpdate = this.cbDtvUpdate.Checked; + } + } + } + + private void cbCustomCountry_CheckedChanged(object sender, EventArgs e) + { + this.comboBoxEdit1.Properties.TextEditStyle = this.cbCustomCountry.Checked + ? TextEditStyles.Standard + : TextEditStyles.DisableTextEditor; + } + } +} diff --git a/ChanSort.Plugin.TllFile/TvSettingsForm.de.resx b/ChanSort.Plugin.TllFile/TvSettingsForm.de.resx new file mode 100644 index 0000000..7cbedf2 --- /dev/null +++ b/ChanSort.Plugin.TllFile/TvSettingsForm.de.resx @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + + + + + + True + + + HbbTV aktivieren (funktioniert nur mit den Ländereinstellungen DEU, FRA, NED und ESP) + + + + + + + + + + + + + + + + + + True + + + Eigene Werte erlauben (auf eigene Gefahr!) + + + + + + + + + + + + + + + + + + True + + + + + + False + + + + 27, 13 + + + Land: + + + OPTION Menü + + + Abbrechen + + + HINWEIS: Bei aktivem Hotel-Modus kann man in der EPG nicht zum gewählten Sender wechseln und die Funktion "Werkseinstellungen" ist gesperrt. + + + 341, 13 + + + Die folgenden Einstellungen funktionieren nur bei aktivem Hotel-Modus: + + + + + + + + + True + + + D-TV Senderliste automatisch aktualisieren (empfohlen: AUS) + + + + + + + + + + + + + + + + + + True + + + Hotel Modus aktivieren (empfohlen: EIN) + + + + + + + + + + + + Hotel Modus + + + + + + + + + True + + + Senderliste automatisch aktualisieren (empfohlen: AUS) + + + + + + + + + + + + EINST. Menü + + + Das Dateiformat Ihres TV-Modells wird nicht vollständig unterstützt. Deshalb sind viele Einstellungen in diesem Dialog gesperrt. + + + + + + + + + True + + + + Default + + + False + + + + + + True + + + None + + + _ + + + True + + + True + + + False + + + + + + False + + + Horizontal + + + + + + TV Einstellungen + + \ No newline at end of file diff --git a/ChanSort.Plugin.TllFile/TvSettingsForm.resx b/ChanSort.Plugin.TllFile/TvSettingsForm.resx new file mode 100644 index 0000000..e459046 --- /dev/null +++ b/ChanSort.Plugin.TllFile/TvSettingsForm.resx @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Top, Left, Right + + + + 12, 64 + + + Enable HbbTV (only works with country settings DEU, FRA, NED and ESP) + + + 456, 19 + + + + 3 + + + cbHbbTv + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpSettings + + + 0 + + + Top, Left, Right + + + 150, 30 + + + allow custom value (at your own risk!) + + + 320, 19 + + + 2 + + + cbCustomCountry + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpSettings + + + 1 + + + 72, 29 + + + + Combo + + + 72, 20 + + + 1 + + + comboBoxEdit1 + + + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpSettings + + + 2 + + + 12, 32 + + + 43, 13 + + + 0 + + + Country: + + + labelControl1 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpSettings + + + 3 + + + Top + + + 0, 142 + + + 480, 106 + + + 0 + + + OPTION Menu + + + grpSettings + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 3 + + + Bottom, Right + + + 310, 413 + + + 75, 23 + + + 1 + + + Ok + + + btnOk + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 2 + + + Bottom, Right + + + 395, 413 + + + 75, 23 + + + 2 + + + Cancel + + + btnCancel + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 1 + + + + Vertical + + + 12, 26 + + + 458, 26 + + + 7 + + + NOTE: When Hotel Mode is active, you can no longer activate a channel from inside the EPG and the "Factory Reset" function becomes disabled. + + + labelControl3 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpHotelMode + + + 0 + + + 41, 93 + + + 315, 13 + + + 6 + + + The settings below are only effective when Hotel Mode is enabled + + + labelControl2 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpHotelMode + + + 1 + + + Top, Left, Right + + + 39, 112 + + + Automatic D-TV channel update (recommended: OFF) + + + 431, 19 + + + 5 + + + cbDtvUpdate + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpHotelMode + + + 2 + + + Top, Left, Right + + + 10, 58 + + + Enable Hotel Mode (recommended: ON) + + + 456, 19 + + + 4 + + + cbHotelMode + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpHotelMode + + + 3 + + + Top + + + 0, 248 + + + 480, 151 + + + 3 + + + Hotel Mode + + + grpHotelMode + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 0 + + + Top, Left, Right + + + 12, 35 + + + Automatic Channel Update (recommended: OFF) + + + 456, 19 + + + 3 + + + cbAutoChannelUpdate + + + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + groupControl1 + + + 0 + + + Top + + + 0, 71 + + + 480, 71 + + + 5 + + + SETUP Menu + + + groupControl1 + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 4 + + + Vertical + + + 11, 29 + + + 458, 26 + + + 8 + + + Your TV model's TLL file format is not fully supported. Therefore many features in this dialog are disabled. + + + labelControl4 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpFirmwareNote + + + 0 + + + Top + + + 0, 0 + + + 480, 71 + + + 6 + + + Information + + + grpFirmwareNote + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 5 + + + True + + + 6, 13 + + + 480, 448 + + + CenterParent + + + TV Settings + + + TvSettingsForm + + + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + \ No newline at end of file diff --git a/ChanSort.Ui/AboutForm.Designer.cs b/ChanSort.Ui/AboutForm.Designer.cs new file mode 100644 index 0000000..c569c4e --- /dev/null +++ b/ChanSort.Ui/AboutForm.Designer.cs @@ -0,0 +1,241 @@ +namespace ChanSort.Ui +{ + partial class AboutForm + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm)); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); + this.hyperLinkEdit1 = new DevExpress.XtraEditors.HyperLinkEdit(); + this.gcPlugins = new DevExpress.XtraGrid.GridControl(); + this.gvPlugins = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.colPlugin = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colDisplayText = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colFileTypes = new DevExpress.XtraGrid.Columns.GridColumn(); + this.hyperLinkEdit2 = new DevExpress.XtraEditors.HyperLinkEdit(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl4 = new DevExpress.XtraEditors.LabelControl(); + this.labelControl5 = new DevExpress.XtraEditors.LabelControl(); + this.hyperLinkEdit3 = new DevExpress.XtraEditors.HyperLinkEdit(); + this.txtCredits = new DevExpress.XtraEditors.MemoEdit(); + this.xtraTabControl1 = new DevExpress.XtraTab.XtraTabControl(); + this.xtraTabPage1 = new DevExpress.XtraTab.XtraTabPage(); + this.xtraTabPage2 = new DevExpress.XtraTab.XtraTabPage(); + this.picDonate = new DevExpress.XtraEditors.PictureEdit(); + this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); + ((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit1.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gcPlugins)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gvPlugins)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit2.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit3.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtCredits.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).BeginInit(); + this.xtraTabControl1.SuspendLayout(); + this.xtraTabPage1.SuspendLayout(); + this.xtraTabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picDonate.Properties)).BeginInit(); + this.SuspendLayout(); + // + // labelControl1 + // + resources.ApplyResources(this.labelControl1, "labelControl1"); + this.labelControl1.Name = "labelControl1"; + // + // hyperLinkEdit1 + // + resources.ApplyResources(this.hyperLinkEdit1, "hyperLinkEdit1"); + this.hyperLinkEdit1.Name = "hyperLinkEdit1"; + this.hyperLinkEdit1.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("hyperLinkEdit1.Properties.Appearance.BackColor"))); + this.hyperLinkEdit1.Properties.Appearance.Options.UseBackColor = true; + this.hyperLinkEdit1.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + // + // gcPlugins + // + resources.ApplyResources(this.gcPlugins, "gcPlugins"); + this.gcPlugins.MainView = this.gvPlugins; + this.gcPlugins.Name = "gcPlugins"; + this.gcPlugins.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.gvPlugins}); + // + // gvPlugins + // + this.gvPlugins.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colPlugin, + this.colDisplayText, + this.colFileTypes}); + this.gvPlugins.GridControl = this.gcPlugins; + this.gvPlugins.Name = "gvPlugins"; + this.gvPlugins.OptionsBehavior.ReadOnly = true; + this.gvPlugins.OptionsView.ShowGroupPanel = false; + this.gvPlugins.OptionsView.ShowIndicator = false; + this.gvPlugins.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.gvPlugins_CustomUnboundColumnData); + // + // colPlugin + // + resources.ApplyResources(this.colPlugin, "colPlugin"); + this.colPlugin.FieldName = "PluginDll"; + this.colPlugin.Name = "colPlugin"; + this.colPlugin.UnboundType = DevExpress.Data.UnboundColumnType.String; + // + // colDisplayText + // + resources.ApplyResources(this.colDisplayText, "colDisplayText"); + this.colDisplayText.FieldName = "PluginName"; + this.colDisplayText.Name = "colDisplayText"; + // + // colFileTypes + // + resources.ApplyResources(this.colFileTypes, "colFileTypes"); + this.colFileTypes.FieldName = "FileFilter"; + this.colFileTypes.Name = "colFileTypes"; + // + // hyperLinkEdit2 + // + resources.ApplyResources(this.hyperLinkEdit2, "hyperLinkEdit2"); + this.hyperLinkEdit2.Name = "hyperLinkEdit2"; + this.hyperLinkEdit2.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("hyperLinkEdit2.Properties.Appearance.BackColor"))); + this.hyperLinkEdit2.Properties.Appearance.Options.UseBackColor = true; + this.hyperLinkEdit2.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + // + // labelControl3 + // + resources.ApplyResources(this.labelControl3, "labelControl3"); + this.labelControl3.Name = "labelControl3"; + // + // labelControl4 + // + resources.ApplyResources(this.labelControl4, "labelControl4"); + this.labelControl4.Name = "labelControl4"; + // + // labelControl5 + // + resources.ApplyResources(this.labelControl5, "labelControl5"); + this.labelControl5.Name = "labelControl5"; + // + // hyperLinkEdit3 + // + resources.ApplyResources(this.hyperLinkEdit3, "hyperLinkEdit3"); + this.hyperLinkEdit3.Name = "hyperLinkEdit3"; + this.hyperLinkEdit3.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("hyperLinkEdit3.Properties.Appearance.BackColor"))); + this.hyperLinkEdit3.Properties.Appearance.Options.UseBackColor = true; + this.hyperLinkEdit3.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + // + // txtCredits + // + resources.ApplyResources(this.txtCredits, "txtCredits"); + this.txtCredits.Name = "txtCredits"; + this.txtCredits.Properties.ReadOnly = true; + // + // xtraTabControl1 + // + resources.ApplyResources(this.xtraTabControl1, "xtraTabControl1"); + this.xtraTabControl1.Name = "xtraTabControl1"; + this.xtraTabControl1.SelectedTabPage = this.xtraTabPage1; + this.xtraTabControl1.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { + this.xtraTabPage1, + this.xtraTabPage2}); + // + // xtraTabPage1 + // + this.xtraTabPage1.Controls.Add(this.txtCredits); + this.xtraTabPage1.Name = "xtraTabPage1"; + resources.ApplyResources(this.xtraTabPage1, "xtraTabPage1"); + // + // xtraTabPage2 + // + this.xtraTabPage2.Controls.Add(this.gcPlugins); + this.xtraTabPage2.Name = "xtraTabPage2"; + resources.ApplyResources(this.xtraTabPage2, "xtraTabPage2"); + // + // picDonate + // + this.picDonate.Cursor = System.Windows.Forms.Cursors.Hand; + resources.ApplyResources(this.picDonate, "picDonate"); + this.picDonate.Name = "picDonate"; + this.picDonate.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("picDonate.Properties.Appearance.BackColor"))); + this.picDonate.Properties.Appearance.Options.UseBackColor = true; + this.picDonate.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.picDonate.Click += new System.EventHandler(this.picDonate_Click); + // + // labelControl2 + // + resources.ApplyResources(this.labelControl2, "labelControl2"); + this.labelControl2.Name = "labelControl2"; + // + // AboutForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.labelControl2); + this.Controls.Add(this.picDonate); + this.Controls.Add(this.xtraTabControl1); + this.Controls.Add(this.hyperLinkEdit3); + this.Controls.Add(this.labelControl5); + this.Controls.Add(this.labelControl4); + this.Controls.Add(this.hyperLinkEdit2); + this.Controls.Add(this.labelControl3); + this.Controls.Add(this.hyperLinkEdit1); + this.Controls.Add(this.labelControl1); + this.Name = "AboutForm"; + ((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit1.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gcPlugins)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gvPlugins)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit2.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit3.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtCredits.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).EndInit(); + this.xtraTabControl1.ResumeLayout(false); + this.xtraTabPage1.ResumeLayout(false); + this.xtraTabPage2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picDonate.Properties)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraEditors.LabelControl labelControl1; + private DevExpress.XtraEditors.HyperLinkEdit hyperLinkEdit1; + private DevExpress.XtraGrid.GridControl gcPlugins; + private DevExpress.XtraGrid.Views.Grid.GridView gvPlugins; + private DevExpress.XtraGrid.Columns.GridColumn colPlugin; + private DevExpress.XtraGrid.Columns.GridColumn colDisplayText; + private DevExpress.XtraGrid.Columns.GridColumn colFileTypes; + private DevExpress.XtraEditors.HyperLinkEdit hyperLinkEdit2; + private DevExpress.XtraEditors.LabelControl labelControl3; + private DevExpress.XtraEditors.LabelControl labelControl4; + private DevExpress.XtraEditors.LabelControl labelControl5; + private DevExpress.XtraEditors.HyperLinkEdit hyperLinkEdit3; + private DevExpress.XtraEditors.MemoEdit txtCredits; + private DevExpress.XtraTab.XtraTabControl xtraTabControl1; + private DevExpress.XtraTab.XtraTabPage xtraTabPage1; + private DevExpress.XtraTab.XtraTabPage xtraTabPage2; + private DevExpress.XtraEditors.PictureEdit picDonate; + private DevExpress.XtraEditors.LabelControl labelControl2; + } +} \ No newline at end of file diff --git a/ChanSort.Ui/AboutForm.cs b/ChanSort.Ui/AboutForm.cs new file mode 100644 index 0000000..56abe75 --- /dev/null +++ b/ChanSort.Ui/AboutForm.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using System.IO; +using ChanSort.Api; +using DevExpress.XtraEditors; + +namespace ChanSort.Ui +{ + public partial class AboutForm :XtraForm + { + public AboutForm(IList plugins) + { + InitializeComponent(); + this.picDonate.Image = Properties.Resources.Donate; + this.gcPlugins.DataSource = plugins; + + this.txtCredits.Text = @"PDA-User: +Analysis of TLL file structure and extensive testing of ChanSort + +HellG: +For writing TLLsort which was the basis for the first versions of ChanSort + +edank, JLevi, Oleg: +For writing TLLview, TLLedit and edankTLL and making the source available + +Many more on lg-forum.com: +For providing example TLL files, error feedback and other helpful information"; + } + + private void gvPlugins_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) + { + if (e.Column == this.colPlugin) + e.Value = (Path.GetFileName(e.Row.GetType().Assembly.Location) ?? "").Replace("ChanSort.Plugin.", ""); + } + + private void picDonate_Click(object sender, System.EventArgs e) + { + try + { + string fileName = Path.GetTempFileName() + ".html"; + File.WriteAllText(fileName, Properties.Resources.paypal_button); + System.Diagnostics.Process.Start(fileName); + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/ChanSort.Ui/AboutForm.de.resx b/ChanSort.Ui/AboutForm.de.resx new file mode 100644 index 0000000..46fbc44 --- /dev/null +++ b/ChanSort.Ui/AboutForm.de.resx @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 80, 13 + + + Aktuelle Version: + + + Beschreibung + + + Dateitypen + + + 86, 13 + + + Online Diskussion: + + + 41, 13 + + + Kontakt: + + + Gruß und Dank + + + Erweiterungen + + + + + + + 151, 13 + + + Wenn dir das Programm gefällt: + + + Über ChanSort + + \ No newline at end of file diff --git a/ChanSort.Ui/AboutForm.resx b/ChanSort.Ui/AboutForm.resx new file mode 100644 index 0000000..865f986 --- /dev/null +++ b/ChanSort.Ui/AboutForm.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 12, 15 + + + 72, 13 + + + + 0 + + + Latest version: + + + labelControl1 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 9 + + + + Top, Left, Right + + + http://beham.biz/ChanSort/ + + + 144, 13 + + + Transparent + + + 436, 18 + + + 1 + + + hyperLinkEdit1 + + + DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 8 + + + Fill + + + 0, 0 + + + Plugin + + + True + + + 0 + + + 70 + + + Description + + + True + + + 1 + + + 246 + + + File types + + + True + + + 2 + + + 249 + + + 562, 272 + + + 3 + + + gcPlugins + + + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + xtraTabPage2 + + + 0 + + + Top, Left, Right + + + http://www.lg-forum.com/lg-led-plasma-lcd-fernseher/5098-channeleditor-45.html + + + 144, 32 + + + Transparent + + + 436, 18 + + + 5 + + + hyperLinkEdit2 + + + DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 6 + + + 12, 34 + + + 85, 13 + + + 4 + + + Online discussion: + + + labelControl3 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 7 + + + 12, 56 + + + 42, 13 + + + 6 + + + Contact: + + + labelControl4 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 5 + + + 147, 56 + + + 175, 13 + + + 7 + + + User "Pred" @ www.lg-forum.com | + + + labelControl5 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 4 + + + Top, Left, Right + + + mailto:horst@beham.biz + + + 328, 54 + + + Transparent + + + 252, 18 + + + 8 + + + hyperLinkEdit3 + + + DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 3 + + + Fill + + + 0, 0 + + + 562, 272 + + + 10 + + + txtCredits + + + DevExpress.XtraEditors.MemoEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + xtraTabPage1 + + + 0 + + + Top, Bottom, Left, Right + + + 12, 134 + + + 562, 272 + + + Credits + + + xtraTabPage1 + + + DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + xtraTabControl1 + + + 0 + + + 568, 300 + + + 11 + + + 562, 272 + + + Plugins + + + xtraTabPage2 + + + DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + xtraTabControl1 + + + 1 + + + xtraTabControl1 + + + DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 2 + + + 214, 78 + + + Transparent + + + 177, 58 + + + 12 + + + picDonate + + + DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 1 + + + 12, 88 + + + 114, 13 + + + 13 + + + If you like this program: + + + labelControl2 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 0 + + + True + + + 6, 13 + + + 592, 446 + + + CenterParent + + + About ChanSort + + + gvPlugins + + + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colPlugin + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colDisplayText + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colFileTypes + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + AboutForm + + + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + \ No newline at end of file diff --git a/ChanSort.Ui/ChanSort.Ui.csproj b/ChanSort.Ui/ChanSort.Ui.csproj new file mode 100644 index 0000000..dc88e7e --- /dev/null +++ b/ChanSort.Ui/ChanSort.Ui.csproj @@ -0,0 +1,215 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {5FAFDABC-A52F-498C-BD2F-AFFC4119797A} + WinExe + Properties + ChanSort.Ui + ChanSort + v3.5 + Client + 512 + + + x86 + true + full + false + ..\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\Debug\ + DEBUG;TRACE + full + AnyCPU + prompt + false + false + + + bin\Release\ + TRACE + true + pdbonly + AnyCPU + prompt + false + false + + + app.ico + + + + False + + + False + + + False + + + False + + + False + + + False + + + + + + + + + + + Form + + + InfoBox.cs + + + Form + + + MainForm.cs + + + + + Resources.resx + True + True + + + + Form + + + WaitForm1.cs + + + Form + + + AboutForm.cs + + + Form + + + CharsetForm.cs + + + AboutForm.cs + Designer + + + AboutForm.cs + Designer + + + CharsetForm.cs + + + CharsetForm.cs + Designer + + + InfoBox.cs + + + MainForm.cs + Designer + + + MainForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + ResXFileCodeGenerator + Resources.de.Designer.cs + Designer + + + True + Resources.de.resx + True + + + WaitForm1.cs + + + WaitForm1.cs + Designer + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {DCCFFA08-472B-4D17-BB90-8F513FC01392} + ChanSort.Api + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ChanSort.Ui/CharsetForm.Designer.cs b/ChanSort.Ui/CharsetForm.Designer.cs new file mode 100644 index 0000000..0438fc1 --- /dev/null +++ b/ChanSort.Ui/CharsetForm.Designer.cs @@ -0,0 +1,171 @@ +namespace ChanSort.Ui +{ + partial class CharsetForm + { + /// + /// 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(CharsetForm)); + this.gcCharset = new DevExpress.XtraGrid.GridControl(); + this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); + this.gvCharset = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.colCodePage = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colDisplayName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.panelControl1 = new DevExpress.XtraEditors.PanelControl(); + this.btnMyCountry = new DevExpress.XtraEditors.SimpleButton(); + this.btnCancel = new DevExpress.XtraEditors.SimpleButton(); + this.btnOk = new DevExpress.XtraEditors.SimpleButton(); + ((System.ComponentModel.ISupportInitialize)(this.gcCharset)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gvCharset)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit(); + this.panelControl1.SuspendLayout(); + this.SuspendLayout(); + // + // gcCharset + // + resources.ApplyResources(this.gcCharset, "gcCharset"); + this.gcCharset.DataSource = this.bindingSource1; + this.gcCharset.EmbeddedNavigator.AccessibleDescription = resources.GetString("gcCharset.EmbeddedNavigator.AccessibleDescription"); + this.gcCharset.EmbeddedNavigator.AccessibleName = resources.GetString("gcCharset.EmbeddedNavigator.AccessibleName"); + this.gcCharset.EmbeddedNavigator.AllowHtmlTextInToolTip = ((DevExpress.Utils.DefaultBoolean)(resources.GetObject("gcCharset.EmbeddedNavigator.AllowHtmlTextInToolTip"))); + this.gcCharset.EmbeddedNavigator.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("gcCharset.EmbeddedNavigator.Anchor"))); + this.gcCharset.EmbeddedNavigator.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("gcCharset.EmbeddedNavigator.BackgroundImage"))); + this.gcCharset.EmbeddedNavigator.BackgroundImageLayout = ((System.Windows.Forms.ImageLayout)(resources.GetObject("gcCharset.EmbeddedNavigator.BackgroundImageLayout"))); + this.gcCharset.EmbeddedNavigator.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("gcCharset.EmbeddedNavigator.ImeMode"))); + this.gcCharset.EmbeddedNavigator.TextLocation = ((DevExpress.XtraEditors.NavigatorButtonsTextLocation)(resources.GetObject("gcCharset.EmbeddedNavigator.TextLocation"))); + this.gcCharset.EmbeddedNavigator.ToolTip = resources.GetString("gcCharset.EmbeddedNavigator.ToolTip"); + this.gcCharset.EmbeddedNavigator.ToolTipIconType = ((DevExpress.Utils.ToolTipIconType)(resources.GetObject("gcCharset.EmbeddedNavigator.ToolTipIconType"))); + this.gcCharset.EmbeddedNavigator.ToolTipTitle = resources.GetString("gcCharset.EmbeddedNavigator.ToolTipTitle"); + this.gcCharset.MainView = this.gvCharset; + this.gcCharset.Name = "gcCharset"; + this.gcCharset.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.gvCharset}); + // + // bindingSource1 + // + this.bindingSource1.DataSource = typeof(System.Text.EncodingInfo); + // + // gvCharset + // + resources.ApplyResources(this.gvCharset, "gvCharset"); + this.gvCharset.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colCodePage, + this.colName, + this.colDisplayName}); + this.gvCharset.GridControl = this.gcCharset; + this.gvCharset.Name = "gvCharset"; + this.gvCharset.OptionsBehavior.Editable = false; + this.gvCharset.OptionsView.ShowAutoFilterRow = true; + this.gvCharset.OptionsView.ShowGroupPanel = false; + this.gvCharset.OptionsView.ShowIndicator = false; + this.gvCharset.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(this.gvCharset_RowClick); + this.gvCharset.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gvCharset_FocusedRowChanged); + // + // colCodePage + // + resources.ApplyResources(this.colCodePage, "colCodePage"); + this.colCodePage.FieldName = "CodePage"; + this.colCodePage.Name = "colCodePage"; + this.colCodePage.OptionsColumn.ReadOnly = true; + // + // colName + // + resources.ApplyResources(this.colName, "colName"); + this.colName.FieldName = "Name"; + this.colName.Name = "colName"; + this.colName.OptionsColumn.ReadOnly = true; + // + // colDisplayName + // + resources.ApplyResources(this.colDisplayName, "colDisplayName"); + this.colDisplayName.FieldName = "DisplayName"; + this.colDisplayName.Name = "colDisplayName"; + this.colDisplayName.OptionsColumn.ReadOnly = true; + this.colDisplayName.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { + new DevExpress.XtraGrid.GridColumnSummaryItem()}); + // + // panelControl1 + // + resources.ApplyResources(this.panelControl1, "panelControl1"); + this.panelControl1.Controls.Add(this.btnMyCountry); + this.panelControl1.Controls.Add(this.btnCancel); + this.panelControl1.Controls.Add(this.btnOk); + this.panelControl1.Name = "panelControl1"; + // + // btnMyCountry + // + resources.ApplyResources(this.btnMyCountry, "btnMyCountry"); + this.btnMyCountry.Name = "btnMyCountry"; + this.btnMyCountry.Click += new System.EventHandler(this.btnMyCountry_Click); + // + // btnCancel + // + resources.ApplyResources(this.btnCancel, "btnCancel"); + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Name = "btnCancel"; + // + // btnOk + // + resources.ApplyResources(this.btnOk, "btnOk"); + this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOk.Name = "btnOk"; + // + // CharsetForm + // + this.AcceptButton = this.btnOk; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.btnCancel; + this.Controls.Add(this.gcCharset); + this.Controls.Add(this.panelControl1); + this.Name = "CharsetForm"; + this.Load += new System.EventHandler(this.CharsetForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.gcCharset)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gvCharset)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit(); + this.panelControl1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraGrid.GridControl gcCharset; + private DevExpress.XtraGrid.Views.Grid.GridView gvCharset; + private DevExpress.XtraEditors.PanelControl panelControl1; + private DevExpress.XtraEditors.SimpleButton btnMyCountry; + private DevExpress.XtraEditors.SimpleButton btnCancel; + private DevExpress.XtraEditors.SimpleButton btnOk; + private System.Windows.Forms.BindingSource bindingSource1; + private DevExpress.XtraGrid.Columns.GridColumn colCodePage; + private DevExpress.XtraGrid.Columns.GridColumn colName; + private DevExpress.XtraGrid.Columns.GridColumn colDisplayName; + } +} \ No newline at end of file diff --git a/ChanSort.Ui/CharsetForm.cs b/ChanSort.Ui/CharsetForm.cs new file mode 100644 index 0000000..1463445 --- /dev/null +++ b/ChanSort.Ui/CharsetForm.cs @@ -0,0 +1,100 @@ +using System; +using System.Text; +using DevExpress.XtraEditors; +using DevExpress.XtraGrid.Views.Base; + +namespace ChanSort.Ui +{ + public partial class CharsetForm : XtraForm + { + private readonly Encoding initialEncoding = Encoding.Default; + private Encoding currentEncoding; + + public EventHandler EncodingChanged; + + public CharsetForm(Encoding encoding) + { + this.initialEncoding = encoding; + InitializeComponent(); + } + + public Encoding Encoding + { + get { return this.currentEncoding; } + } + + private void SelectEncoding(Encoding encoding) + { + var encodings = Encoding.GetEncodings(); + for (int i = 0; i < encodings.Length; i++) + { + if (encodings[i].Name == encoding.WebName) + { + this.gvCharset.FocusedRowHandle = i; + this.gvCharset.MakeRowVisible(i); + } + } + } + + private void RaiseEncodingChanged() + { + if (this.EncodingChanged != null) + this.EncodingChanged(this, new EncodingChangedEventArgs(this.currentEncoding)); + } + + private void CharsetForm_Load(object sender, EventArgs e) + { + var encodings = Encoding.GetEncodings(); + this.gcCharset.DataSource = encodings; + } + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + this.SelectEncoding(this.initialEncoding); + } + + private void gvCharset_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) + { + var encodingInfo = (EncodingInfo) gvCharset.GetFocusedRow(); + if (encodingInfo == null) + return; + this.currentEncoding = Encoding.GetEncoding(encodingInfo.Name); + this.RaiseEncodingChanged(); + } + + private void gvCharset_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) + { + if (e.Clicks == 2 && this.gvCharset.IsDataRow(e.RowHandle)) + this.DialogResult = System.Windows.Forms.DialogResult.OK; + } + + private void btnMyCountry_Click(object sender, EventArgs e) + { + this.SelectEncoding(Encoding.Default); + } + + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) + { + base.OnClosing(e); + if (this.DialogResult != System.Windows.Forms.DialogResult.OK) + { + // restore initial encoding + this.currentEncoding = this.initialEncoding; + this.RaiseEncodingChanged(); + } + } + } + + #region class EncodingChangedEventArgs + public class EncodingChangedEventArgs : EventArgs + { + public readonly Encoding Encoding; + + public EncodingChangedEventArgs(Encoding encoding) + { + this.Encoding = encoding; + } + } + #endregion +} \ No newline at end of file diff --git a/ChanSort.Ui/CharsetForm.de.resx b/ChanSort.Ui/CharsetForm.de.resx new file mode 100644 index 0000000..1890d23 --- /dev/null +++ b/ChanSort.Ui/CharsetForm.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Beschreibung + + + Standard-Zeichensatz meines Landes + + + Abbrechen + + + Zeichensatz + + \ No newline at end of file diff --git a/ChanSort.Ui/CharsetForm.resx b/ChanSort.Ui/CharsetForm.resx new file mode 100644 index 0000000..0782b3d --- /dev/null +++ b/ChanSort.Ui/CharsetForm.resx @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelControl1 + + + 0 + + + + Inherit + + + + 272, 6 + + + colCodePage + + + btnCancel + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + 433, 446 + + + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + CharsetForm + + + + 0 + + + 1 + + + 1 + + + 5, 6 + + + + + + + + + + 6, 13 + + + Bottom + + + 0 + + + + Center + + + + None + + + gvCharset + + + Manual + + + Top, Right + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + Fill + + + 0, 0 + + + 2 + + + $this + + + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colName + + + + + + 433, 37 + + + 0, 446 + + + Top, Right + + + colDisplayName + + + Cancel + + + panelControl1 + + + btnMyCountry + + + True + + + 0 + + + $this + + + panelControl1 + + + gcCharset + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + Default character set for my country + + + 67 + + + 222 + + + 353, 6 + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + 75, 23 + + + bindingSource1 + + + 2 + + + 1 + + + 0 + + + 1 + + + Ok + + + + + + Tile + + + Character set + + + 232, 23 + + + True + + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 2 + + + panelControl1 + + + Top, Left + + + 1 + + + 75, 23 + + + btnOk + + + + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + 433, 483 + + + 142 + + + DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + True + + + + Default + + + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/ChanSort.Ui/InfoBox.Designer.cs b/ChanSort.Ui/InfoBox.Designer.cs new file mode 100644 index 0000000..20d4a22 --- /dev/null +++ b/ChanSort.Ui/InfoBox.Designer.cs @@ -0,0 +1,91 @@ +namespace ChanSort.Ui +{ + partial class InfoBox + { + /// + /// 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.txtMessage = new DevExpress.XtraEditors.MemoEdit(); + this.panelControl1 = new DevExpress.XtraEditors.PanelControl(); + this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton(); + ((System.ComponentModel.ISupportInitialize)(this.txtMessage.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit(); + this.panelControl1.SuspendLayout(); + this.SuspendLayout(); + // + // txtMessage + // + this.txtMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtMessage.Location = new System.Drawing.Point(0, 0); + this.txtMessage.Name = "txtMessage"; + this.txtMessage.Properties.Appearance.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.txtMessage.Properties.Appearance.Options.UseFont = true; + this.txtMessage.Size = new System.Drawing.Size(953, 486); + this.txtMessage.TabIndex = 0; + // + // panelControl1 + // + this.panelControl1.Controls.Add(this.simpleButton1); + this.panelControl1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panelControl1.Location = new System.Drawing.Point(0, 486); + this.panelControl1.Name = "panelControl1"; + this.panelControl1.Size = new System.Drawing.Size(953, 45); + this.panelControl1.TabIndex = 1; + // + // simpleButton1 + // + this.simpleButton1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.simpleButton1.DialogResult = System.Windows.Forms.DialogResult.OK; + this.simpleButton1.Location = new System.Drawing.Point(866, 10); + this.simpleButton1.Name = "simpleButton1"; + this.simpleButton1.Size = new System.Drawing.Size(75, 23); + this.simpleButton1.TabIndex = 0; + this.simpleButton1.Text = "Ok"; + // + // InfoBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(953, 531); + this.Controls.Add(this.txtMessage); + this.Controls.Add(this.panelControl1); + this.Name = "InfoBox"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "InfoBox"; + ((System.ComponentModel.ISupportInitialize)(this.txtMessage.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit(); + this.panelControl1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.XtraEditors.MemoEdit txtMessage; + private DevExpress.XtraEditors.PanelControl panelControl1; + private DevExpress.XtraEditors.SimpleButton simpleButton1; + } +} \ No newline at end of file diff --git a/ChanSort.Ui/InfoBox.cs b/ChanSort.Ui/InfoBox.cs new file mode 100644 index 0000000..fdfb489 --- /dev/null +++ b/ChanSort.Ui/InfoBox.cs @@ -0,0 +1,35 @@ +using System.Windows.Forms; +using DevExpress.XtraEditors; + +namespace ChanSort.Ui +{ + public partial class InfoBox : XtraForm + { + public InfoBox() + { + InitializeComponent(); + this.ActiveControl = this.simpleButton1; + } + + public static void Show(IWin32Window owner, string message, string caption) + { + var box = new InfoBox(); + box.Text = caption; + box.txtMessage.Text = message; + box.txtMessage.Properties.ReadOnly = true; + box.txtMessage.SelectionStart = 0; + box.txtMessage.SelectionLength = 0; + box.ShowDialog(owner); + } + + protected override bool ProcessDialogKey(Keys keyData) + { + if (keyData == Keys.Escape) + { + this.DialogResult = DialogResult.Cancel; + return true; + } + return base.ProcessDialogKey(keyData); + } + } +} \ No newline at end of file diff --git a/ChanSort.Ui/InfoBox.resx b/ChanSort.Ui/InfoBox.resx new file mode 100644 index 0000000..7080a7d --- /dev/null +++ b/ChanSort.Ui/InfoBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ChanSort.Ui/MainForm.Designer.cs b/ChanSort.Ui/MainForm.Designer.cs new file mode 100644 index 0000000..537d8aa --- /dev/null +++ b/ChanSort.Ui/MainForm.Designer.cs @@ -0,0 +1,1481 @@ +namespace ChanSort.Ui +{ + partial class MainForm + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.splitContainerControl1 = new DevExpress.XtraEditors.SplitContainerControl(); + this.grpOutputList = new DevExpress.XtraEditors.GroupControl(); + this.gridOutput = new DevExpress.XtraGrid.GridControl(); + this.dsChannels = new System.Windows.Forms.BindingSource(); + this.gviewOutput = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.colIndex1 = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colOutSlot = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colOutName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colOutFav = new DevExpress.XtraGrid.Columns.GridColumn(); + this.repositoryItemCheckedComboBoxEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit(); + this.colUid1 = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lblHotkeyLeft = new DevExpress.XtraEditors.LabelControl(); + this.pnlEditControls = new DevExpress.XtraEditors.PanelControl(); + this.comboEditMode = new DevExpress.XtraEditors.ComboBoxEdit(); + this.barManager1 = new DevExpress.XtraBars.BarManager(); + this.bar1 = new DevExpress.XtraBars.Bar(); + this.miFile = new DevExpress.XtraBars.BarSubItem(); + this.miOpen = new DevExpress.XtraBars.BarButtonItem(); + this.miReload = new DevExpress.XtraBars.BarButtonItem(); + this.miRestoreOriginal = new DevExpress.XtraBars.BarButtonItem(); + this.miFileInformation = new DevExpress.XtraBars.BarButtonItem(); + this.miSave = new DevExpress.XtraBars.BarButtonItem(); + this.miSaveAs = new DevExpress.XtraBars.BarButtonItem(); + this.miOpenReferenceFile = new DevExpress.XtraBars.BarButtonItem(); + this.miQuit = new DevExpress.XtraBars.BarButtonItem(); + this.miEdit = new DevExpress.XtraBars.BarSubItem(); + this.miAddChannel = new DevExpress.XtraBars.BarButtonItem(); + this.miRemove = new DevExpress.XtraBars.BarButtonItem(); + this.miReplace = new DevExpress.XtraBars.BarButtonItem(); + this.miSort = new DevExpress.XtraBars.BarButtonItem(); + this.miRenum = new DevExpress.XtraBars.BarButtonItem(); + this.mnuFavSet = new DevExpress.XtraBars.BarSubItem(); + this.miFavSet = new DevExpress.XtraBars.BarListItem(); + this.mnuFavUnset = new DevExpress.XtraBars.BarSubItem(); + this.miFavUnset = new DevExpress.XtraBars.BarListItem(); + this.miLockOn = new DevExpress.XtraBars.BarButtonItem(); + this.miLockOff = new DevExpress.XtraBars.BarButtonItem(); + this.miSkipOn = new DevExpress.XtraBars.BarButtonItem(); + this.miSkipOff = new DevExpress.XtraBars.BarButtonItem(); + this.miHideOn = new DevExpress.XtraBars.BarButtonItem(); + this.miHideOff = new DevExpress.XtraBars.BarButtonItem(); + this.barSubItem2 = new DevExpress.XtraBars.BarSubItem(); + this.miTvSettings = new DevExpress.XtraBars.BarButtonItem(); + this.mnuOptions = new DevExpress.XtraBars.BarSubItem(); + this.barSubItem1 = new DevExpress.XtraBars.BarSubItem(); + this.miEnglish = new DevExpress.XtraBars.BarButtonItem(); + this.miGerman = new DevExpress.XtraBars.BarButtonItem(); + this.mnuCharset = new DevExpress.XtraBars.BarSubItem(); + this.miCharsetForm = new DevExpress.XtraBars.BarButtonItem(); + this.miIsoCharSets = new DevExpress.XtraBars.BarListItem(); + this.mnuHelp = new DevExpress.XtraBars.BarSubItem(); + this.miAbout = new DevExpress.XtraBars.BarButtonItem(); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); + this.sharedImageCollection1 = new DevExpress.Utils.SharedImageCollection(); + this.miMoveUp = new DevExpress.XtraBars.BarButtonItem(); + this.miMoveDown = new DevExpress.XtraBars.BarButtonItem(); + this.btnSyncFromLeft = new DevExpress.XtraEditors.SimpleButton(); + this.labelControl2 = new DevExpress.XtraEditors.LabelControl(); + this.btnClearLeftFilter = new DevExpress.XtraEditors.SimpleButton(); + this.btnRenum = new DevExpress.XtraEditors.SimpleButton(); + this.btnSort = new DevExpress.XtraEditors.SimpleButton(); + this.btnDown = new DevExpress.XtraEditors.SimpleButton(); + this.btnUp = new DevExpress.XtraEditors.SimpleButton(); + this.btnRemove = new DevExpress.XtraEditors.SimpleButton(); + this.txtSetSlot = new DevExpress.XtraEditors.ButtonEdit(); + this.labelControl11 = new DevExpress.XtraEditors.LabelControl(); + this.grpInputList = new DevExpress.XtraEditors.GroupControl(); + this.gridInput = new DevExpress.XtraGrid.GridControl(); + this.gviewInput = new DevExpress.XtraGrid.Views.Grid.GridView(); + this.colIndex = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colSlotOld = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colSlotNew = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colShortName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colFavorites = new DevExpress.XtraGrid.Columns.GridColumn(); + this.repositoryItemCheckedComboBoxEdit2 = new DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit(); + this.colLock = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colSkip = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colHidden = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colEncrypted = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colChannelOrTransponder = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colFreqInMhz = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colServiceId = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colVideoPid = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colAudioPid = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colServiceType = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colServiceTypeName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colSatellite = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colNetworkId = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colTransportStreamId = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colSymbolRate = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colPolarity = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colUid = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colNetworkName = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colNetworkOperator = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colDebug = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colLogicalIndex = new DevExpress.XtraGrid.Columns.GridColumn(); + this.lblHotkeyRight = new DevExpress.XtraEditors.LabelControl(); + this.panelControl3 = new DevExpress.XtraEditors.PanelControl(); + this.btnCloneChannelList = new DevExpress.XtraEditors.SimpleButton(); + this.btnClearRightFilter = new DevExpress.XtraEditors.SimpleButton(); + this.btnSyncFromRight = new DevExpress.XtraEditors.SimpleButton(); + this.btnAdd = new DevExpress.XtraEditors.SimpleButton(); + this.defaultLookAndFeel1 = new DevExpress.LookAndFeel.DefaultLookAndFeel(); + this.splashScreenManager1 = new DevExpress.XtraSplashScreen.SplashScreenManager(this, typeof(global::ChanSort.Ui.WaitForm1), true, true); + this.grpTopPanel = new DevExpress.XtraEditors.GroupControl(); + this.comboUnsortedAction = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl3 = new DevExpress.XtraEditors.LabelControl(); + this.btnResetChannelData = new DevExpress.XtraEditors.SimpleButton(); + this.comboChannelList = new DevExpress.XtraEditors.ComboBoxEdit(); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); + this.mnuContext = new DevExpress.XtraBars.PopupMenu(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).BeginInit(); + this.splitContainerControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).BeginInit(); + this.grpOutputList.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.gridOutput)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dsChannels)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gviewOutput)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckedComboBoxEdit1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pnlEditControls)).BeginInit(); + this.pnlEditControls.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comboEditMode.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.sharedImageCollection1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSetSlot.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.grpInputList)).BeginInit(); + this.grpInputList.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.gridInput)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gviewInput)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckedComboBoxEdit2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl3)).BeginInit(); + this.panelControl3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.grpTopPanel)).BeginInit(); + this.grpTopPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comboUnsortedAction.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboChannelList.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.mnuContext)).BeginInit(); + this.SuspendLayout(); + // + // splitContainerControl1 + // + resources.ApplyResources(this.splitContainerControl1, "splitContainerControl1"); + this.splitContainerControl1.Name = "splitContainerControl1"; + this.splitContainerControl1.Panel1.Controls.Add(this.grpOutputList); + resources.ApplyResources(this.splitContainerControl1.Panel1, "splitContainerControl1.Panel1"); + this.splitContainerControl1.Panel2.Controls.Add(this.grpInputList); + resources.ApplyResources(this.splitContainerControl1.Panel2, "splitContainerControl1.Panel2"); + this.splitContainerControl1.SplitterPosition = 336; + // + // grpOutputList + // + this.grpOutputList.Controls.Add(this.gridOutput); + this.grpOutputList.Controls.Add(this.lblHotkeyLeft); + this.grpOutputList.Controls.Add(this.pnlEditControls); + resources.ApplyResources(this.grpOutputList, "grpOutputList"); + this.grpOutputList.Name = "grpOutputList"; + // + // gridOutput + // + this.gridOutput.DataSource = this.dsChannels; + resources.ApplyResources(this.gridOutput, "gridOutput"); + this.gridOutput.MainView = this.gviewOutput; + this.gridOutput.Name = "gridOutput"; + this.gridOutput.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemCheckedComboBoxEdit1}); + this.gridOutput.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.gviewOutput}); + this.gridOutput.ProcessGridKey += new System.Windows.Forms.KeyEventHandler(this.gridOutput_ProcessGridKey); + this.gridOutput.Enter += new System.EventHandler(this.gridOutput_Enter); + // + // dsChannels + // + this.dsChannels.DataSource = typeof(ChanSort.Api.ChannelInfo); + // + // gviewOutput + // + this.gviewOutput.Appearance.HeaderPanel.Options.UseTextOptions = true; + this.gviewOutput.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap; + this.gviewOutput.ColumnPanelRowHeight = 35; + this.gviewOutput.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colIndex1, + this.colOutSlot, + this.colOutName, + this.colOutFav, + this.colUid1}); + this.gviewOutput.GridControl = this.gridOutput; + this.gviewOutput.Name = "gviewOutput"; + this.gviewOutput.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click; + this.gviewOutput.OptionsCustomization.AllowGroup = false; + this.gviewOutput.OptionsLayout.LayoutVersion = "2"; + this.gviewOutput.OptionsSelection.MultiSelect = true; + this.gviewOutput.OptionsView.ColumnAutoWidth = false; + this.gviewOutput.OptionsView.ShowAutoFilterRow = true; + this.gviewOutput.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never; + this.gviewOutput.OptionsView.ShowGroupPanel = false; + this.gviewOutput.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { + new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.colOutSlot, DevExpress.Data.ColumnSortOrder.Ascending)}); + this.gviewOutput.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(this.gviewOutput_RowClick); + this.gviewOutput.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(this.gviewOutput_RowCellStyle); + this.gviewOutput.PopupMenuShowing += new DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventHandler(this.gviewOutput_PopupMenuShowing); + this.gviewOutput.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(this.gviewOutput_SelectionChanged); + this.gviewOutput.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gviewOutput_FocusedRowChanged); + this.gviewOutput.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.gviewOutput_CellValueChanged); + this.gviewOutput.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.gviewOutput_CustomColumnDisplayText); + this.gviewOutput.LayoutUpgrade += new DevExpress.Utils.LayoutUpgadeEventHandler(this.gviewOutput_LayoutUpgrade); + this.gviewOutput.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gview_MouseDown); + this.gviewOutput.ValidatingEditor += new DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventHandler(this.gviewOutput_ValidatingEditor); + // + // colIndex1 + // + resources.ApplyResources(this.colIndex1, "colIndex1"); + this.colIndex1.FieldName = "RecordIndex"; + this.colIndex1.Name = "colIndex1"; + // + // colOutSlot + // + resources.ApplyResources(this.colOutSlot, "colOutSlot"); + this.colOutSlot.FieldName = "NewProgramNr"; + this.colOutSlot.Name = "colOutSlot"; + this.colOutSlot.OptionsFilter.AllowAutoFilter = false; + this.colOutSlot.OptionsFilter.AllowFilterModeChanging = DevExpress.Utils.DefaultBoolean.False; + // + // colOutName + // + resources.ApplyResources(this.colOutName, "colOutName"); + this.colOutName.FieldName = "Name"; + this.colOutName.Name = "colOutName"; + this.colOutName.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains; + // + // colOutFav + // + resources.ApplyResources(this.colOutFav, "colOutFav"); + this.colOutFav.ColumnEdit = this.repositoryItemCheckedComboBoxEdit1; + this.colOutFav.FieldName = "Favorites"; + this.colOutFav.Name = "colOutFav"; + this.colOutFav.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains; + // + // repositoryItemCheckedComboBoxEdit1 + // + resources.ApplyResources(this.repositoryItemCheckedComboBoxEdit1, "repositoryItemCheckedComboBoxEdit1"); + this.repositoryItemCheckedComboBoxEdit1.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("repositoryItemCheckedComboBoxEdit1.Buttons"))))}); + this.repositoryItemCheckedComboBoxEdit1.CloseUpKey = new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.F2); + this.repositoryItemCheckedComboBoxEdit1.ForceUpdateEditValue = DevExpress.Utils.DefaultBoolean.True; + this.repositoryItemCheckedComboBoxEdit1.Mask.EditMask = resources.GetString("repositoryItemCheckedComboBoxEdit1.Mask.EditMask"); + this.repositoryItemCheckedComboBoxEdit1.Mask.MaskType = ((DevExpress.XtraEditors.Mask.MaskType)(resources.GetObject("repositoryItemCheckedComboBoxEdit1.Mask.MaskType"))); + this.repositoryItemCheckedComboBoxEdit1.Name = "repositoryItemCheckedComboBoxEdit1"; + this.repositoryItemCheckedComboBoxEdit1.PopupSizeable = false; + this.repositoryItemCheckedComboBoxEdit1.SelectAllItemVisible = false; + this.repositoryItemCheckedComboBoxEdit1.ShowButtons = false; + this.repositoryItemCheckedComboBoxEdit1.ShowPopupCloseButton = false; + this.repositoryItemCheckedComboBoxEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; + // + // colUid1 + // + resources.ApplyResources(this.colUid1, "colUid1"); + this.colUid1.FieldName = "Uid"; + this.colUid1.Name = "colUid1"; + this.colUid1.OptionsColumn.AllowEdit = false; + // + // lblHotkeyLeft + // + resources.ApplyResources(this.lblHotkeyLeft, "lblHotkeyLeft"); + this.lblHotkeyLeft.Name = "lblHotkeyLeft"; + // + // pnlEditControls + // + this.pnlEditControls.Controls.Add(this.comboEditMode); + this.pnlEditControls.Controls.Add(this.btnSyncFromLeft); + this.pnlEditControls.Controls.Add(this.labelControl2); + this.pnlEditControls.Controls.Add(this.btnClearLeftFilter); + this.pnlEditControls.Controls.Add(this.btnRenum); + this.pnlEditControls.Controls.Add(this.btnSort); + this.pnlEditControls.Controls.Add(this.btnDown); + this.pnlEditControls.Controls.Add(this.btnUp); + this.pnlEditControls.Controls.Add(this.btnRemove); + this.pnlEditControls.Controls.Add(this.txtSetSlot); + this.pnlEditControls.Controls.Add(this.labelControl11); + resources.ApplyResources(this.pnlEditControls, "pnlEditControls"); + this.pnlEditControls.Name = "pnlEditControls"; + // + // comboEditMode + // + resources.ApplyResources(this.comboEditMode, "comboEditMode"); + this.comboEditMode.MenuManager = this.barManager1; + this.comboEditMode.Name = "comboEditMode"; + this.comboEditMode.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("comboEditMode.Properties.Buttons"))))}); + this.comboEditMode.Properties.Items.AddRange(new object[] { + resources.GetString("comboEditMode.Properties.Items"), + resources.GetString("comboEditMode.Properties.Items1"), + resources.GetString("comboEditMode.Properties.Items2")}); + this.comboEditMode.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; + this.comboEditMode.SelectedIndexChanged += new System.EventHandler(this.comboEditMode_SelectedIndexChanged); + // + // barManager1 + // + this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { + this.bar1}); + this.barManager1.Categories.AddRange(new DevExpress.XtraBars.BarManagerCategory[] { + ((DevExpress.XtraBars.BarManagerCategory)(resources.GetObject("barManager1.Categories"))), + ((DevExpress.XtraBars.BarManagerCategory)(resources.GetObject("barManager1.Categories1"))), + ((DevExpress.XtraBars.BarManagerCategory)(resources.GetObject("barManager1.Categories2"))), + ((DevExpress.XtraBars.BarManagerCategory)(resources.GetObject("barManager1.Categories3")))}); + this.barManager1.DockControls.Add(this.barDockControlTop); + this.barManager1.DockControls.Add(this.barDockControlBottom); + this.barManager1.DockControls.Add(this.barDockControlLeft); + this.barManager1.DockControls.Add(this.barDockControlRight); + this.barManager1.Form = this; + this.barManager1.Images = this.sharedImageCollection1; + this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { + this.mnuOptions, + this.barSubItem1, + this.miEnglish, + this.miGerman, + this.miFile, + this.miOpen, + this.miOpenReferenceFile, + this.miReload, + this.miRestoreOriginal, + this.miFileInformation, + this.miSave, + this.miSaveAs, + this.miQuit, + this.mnuHelp, + this.miAbout, + this.mnuCharset, + this.miIsoCharSets, + this.miCharsetForm, + this.miEdit, + this.miMoveUp, + this.miMoveDown, + this.miAddChannel, + this.miRemove, + this.miReplace, + this.miSort, + this.miRenum, + this.mnuFavSet, + this.miFavSet, + this.mnuFavUnset, + this.miFavUnset, + this.miLockOn, + this.miLockOff, + this.miSkipOn, + this.miSkipOff, + this.miHideOn, + this.miHideOff, + this.barSubItem2, + this.miTvSettings}); + this.barManager1.MaxItemId = 49; + // + // bar1 + // + this.bar1.BarName = "Tools"; + this.bar1.DockCol = 0; + this.bar1.DockRow = 0; + this.bar1.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; + this.bar1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miFile), + new DevExpress.XtraBars.LinkPersistInfo(this.miOpen), + new DevExpress.XtraBars.LinkPersistInfo(this.miOpenReferenceFile), + new DevExpress.XtraBars.LinkPersistInfo(this.miReload), + new DevExpress.XtraBars.LinkPersistInfo(this.miSave), + new DevExpress.XtraBars.LinkPersistInfo(this.miSaveAs), + new DevExpress.XtraBars.LinkPersistInfo(this.miEdit, true), + new DevExpress.XtraBars.LinkPersistInfo(this.mnuFavSet), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn), + new DevExpress.XtraBars.LinkPersistInfo(this.barSubItem2, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miTvSettings), + new DevExpress.XtraBars.LinkPersistInfo(this.mnuOptions, true), + new DevExpress.XtraBars.LinkPersistInfo(this.barSubItem1), + new DevExpress.XtraBars.LinkPersistInfo(this.mnuHelp, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miAbout)}); + resources.ApplyResources(this.bar1, "bar1"); + // + // miFile + // + resources.ApplyResources(this.miFile, "miFile"); + this.miFile.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miFile.Id = 4; + this.miFile.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miOpen), + new DevExpress.XtraBars.LinkPersistInfo(this.miReload), + new DevExpress.XtraBars.LinkPersistInfo(this.miRestoreOriginal), + new DevExpress.XtraBars.LinkPersistInfo(this.miFileInformation), + new DevExpress.XtraBars.LinkPersistInfo(this.miSave), + new DevExpress.XtraBars.LinkPersistInfo(this.miSaveAs), + new DevExpress.XtraBars.LinkPersistInfo(this.miOpenReferenceFile, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miQuit, true)}); + this.miFile.Name = "miFile"; + // + // miOpen + // + resources.ApplyResources(this.miOpen, "miOpen"); + this.miOpen.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miOpen.Id = 5; + this.miOpen.ImageIndex = 3; + this.miOpen.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)); + this.miOpen.Name = "miOpen"; + this.miOpen.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miOpen_ItemClick); + // + // miReload + // + resources.ApplyResources(this.miReload, "miReload"); + this.miReload.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miReload.Enabled = false; + this.miReload.Id = 7; + this.miReload.ImageIndex = 5; + this.miReload.Name = "miReload"; + this.miReload.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miReload_ItemClick); + // + // miRestoreOriginal + // + resources.ApplyResources(this.miRestoreOriginal, "miRestoreOriginal"); + this.miRestoreOriginal.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miRestoreOriginal.Id = 42; + this.miRestoreOriginal.Name = "miRestoreOriginal"; + this.miRestoreOriginal.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRestoreOriginal_ItemClick); + // + // miFileInformation + // + resources.ApplyResources(this.miFileInformation, "miFileInformation"); + this.miFileInformation.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miFileInformation.Id = 43; + this.miFileInformation.Name = "miFileInformation"; + this.miFileInformation.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miFileInformation_ItemClick); + // + // miSave + // + resources.ApplyResources(this.miSave, "miSave"); + this.miSave.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miSave.Enabled = false; + this.miSave.Id = 6; + this.miSave.ImageIndex = 4; + this.miSave.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)); + this.miSave.Name = "miSave"; + this.miSave.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miSave_ItemClick); + // + // miSaveAs + // + resources.ApplyResources(this.miSaveAs, "miSaveAs"); + this.miSaveAs.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miSaveAs.Enabled = false; + this.miSaveAs.Id = 8; + this.miSaveAs.ImageIndex = 6; + this.miSaveAs.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.S)); + this.miSaveAs.Name = "miSaveAs"; + this.miSaveAs.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miSaveAs_ItemClick); + // + // miOpenReferenceFile + // + resources.ApplyResources(this.miOpenReferenceFile, "miOpenReferenceFile"); + this.miOpenReferenceFile.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miOpenReferenceFile.Id = 44; + this.miOpenReferenceFile.ImageIndex = 23; + this.miOpenReferenceFile.Name = "miOpenReferenceFile"; + this.miOpenReferenceFile.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miOpenReferenceFile_ItemClick); + // + // miQuit + // + resources.ApplyResources(this.miQuit, "miQuit"); + this.miQuit.CategoryGuid = new System.Guid("e6c9a329-010b-4d79-8d4d-215e5f197ed3"); + this.miQuit.Id = 9; + this.miQuit.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)); + this.miQuit.Name = "miQuit"; + this.miQuit.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miQuit_ItemClick); + // + // miEdit + // + resources.ApplyResources(this.miEdit, "miEdit"); + this.miEdit.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miEdit.Id = 22; + this.miEdit.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miAddChannel), + new DevExpress.XtraBars.LinkPersistInfo(this.miRemove), + new DevExpress.XtraBars.LinkPersistInfo(this.miReplace), + new DevExpress.XtraBars.LinkPersistInfo(this.miSort), + new DevExpress.XtraBars.LinkPersistInfo(this.miRenum), + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, "", true, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), + new DevExpress.XtraBars.LinkPersistInfo(this.mnuFavUnset), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOff), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOff), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOff)}); + this.miEdit.Name = "miEdit"; + // + // miAddChannel + // + resources.ApplyResources(this.miAddChannel, "miAddChannel"); + this.miAddChannel.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miAddChannel.Id = 39; + this.miAddChannel.ImageIndex = 20; + this.miAddChannel.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Add)); + this.miAddChannel.Name = "miAddChannel"; + // + // miRemove + // + resources.ApplyResources(this.miRemove, "miRemove"); + this.miRemove.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miRemove.Id = 25; + this.miRemove.ImageIndex = 11; + this.miRemove.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X)); + this.miRemove.Name = "miRemove"; + this.miRemove.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRemove_ItemClick); + // + // miReplace + // + resources.ApplyResources(this.miReplace, "miReplace"); + this.miReplace.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miReplace.Id = 26; + this.miReplace.ImageIndex = 12; + this.miReplace.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)); + this.miReplace.Name = "miReplace"; + this.miReplace.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miReplace_ItemClick); + // + // miSort + // + resources.ApplyResources(this.miSort, "miSort"); + this.miSort.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miSort.Id = 40; + this.miSort.ImageIndex = 21; + this.miSort.Name = "miSort"; + // + // miRenum + // + resources.ApplyResources(this.miRenum, "miRenum"); + this.miRenum.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miRenum.Id = 41; + this.miRenum.ImageIndex = 22; + this.miRenum.Name = "miRenum"; + // + // mnuFavSet + // + resources.ApplyResources(this.mnuFavSet, "mnuFavSet"); + this.mnuFavSet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.mnuFavSet.Id = 37; + this.mnuFavSet.ImageIndex = 13; + this.mnuFavSet.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.F)); + this.mnuFavSet.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miFavSet)}); + this.mnuFavSet.Name = "mnuFavSet"; + this.mnuFavSet.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionInMenu; + // + // miFavSet + // + resources.ApplyResources(this.miFavSet, "miFavSet"); + this.miFavSet.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miFavSet.Id = 20; + this.miFavSet.Name = "miFavSet"; + this.miFavSet.ShowNumbers = true; + this.miFavSet.Strings.AddRange(new object[] { + "A", + "B", + "C", + "D"}); + this.miFavSet.ListItemClick += new DevExpress.XtraBars.ListItemClickEventHandler(this.miFavSet_ListItemClick); + // + // mnuFavUnset + // + resources.ApplyResources(this.mnuFavUnset, "mnuFavUnset"); + this.mnuFavUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.mnuFavUnset.Id = 38; + this.mnuFavUnset.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miFavUnset)}); + this.mnuFavUnset.Name = "mnuFavUnset"; + // + // miFavUnset + // + resources.ApplyResources(this.miFavUnset, "miFavUnset"); + this.miFavUnset.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miFavUnset.Id = 21; + this.miFavUnset.Name = "miFavUnset"; + this.miFavUnset.Strings.AddRange(new object[] { + "A", + "B", + "C", + "D"}); + this.miFavUnset.ListItemClick += new DevExpress.XtraBars.ListItemClickEventHandler(this.miFavUnset_ListItemClick); + // + // miLockOn + // + resources.ApplyResources(this.miLockOn, "miLockOn"); + this.miLockOn.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miLockOn.Id = 27; + this.miLockOn.ImageIndex = 15; + this.miLockOn.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.L)); + this.miLockOn.Name = "miLockOn"; + this.miLockOn.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miLockOn_ItemClick); + // + // miLockOff + // + resources.ApplyResources(this.miLockOff, "miLockOff"); + this.miLockOff.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miLockOff.Id = 28; + this.miLockOff.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.L)); + this.miLockOff.Name = "miLockOff"; + this.miLockOff.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miLockOff_ItemClick); + // + // miSkipOn + // + resources.ApplyResources(this.miSkipOn, "miSkipOn"); + this.miSkipOn.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miSkipOn.Id = 29; + this.miSkipOn.ImageIndex = 16; + this.miSkipOn.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K)); + this.miSkipOn.Name = "miSkipOn"; + this.miSkipOn.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miSkipOn_ItemClick); + // + // miSkipOff + // + resources.ApplyResources(this.miSkipOff, "miSkipOff"); + this.miSkipOff.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miSkipOff.Id = 30; + this.miSkipOff.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.K)); + this.miSkipOff.Name = "miSkipOff"; + this.miSkipOff.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miSkipOff_ItemClick); + // + // miHideOn + // + resources.ApplyResources(this.miHideOn, "miHideOn"); + this.miHideOn.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miHideOn.Id = 31; + this.miHideOn.ImageIndex = 17; + this.miHideOn.ItemShortcut = new DevExpress.XtraBars.BarShortcut((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.H)); + this.miHideOn.Name = "miHideOn"; + this.miHideOn.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miHideOn_ItemClick); + // + // miHideOff + // + resources.ApplyResources(this.miHideOff, "miHideOff"); + this.miHideOff.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miHideOff.Id = 32; + this.miHideOff.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.H)); + this.miHideOff.Name = "miHideOff"; + this.miHideOff.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miHideOff_ItemClick); + // + // barSubItem2 + // + resources.ApplyResources(this.barSubItem2, "barSubItem2"); + this.barSubItem2.Id = 47; + this.barSubItem2.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miTvSettings)}); + this.barSubItem2.Name = "barSubItem2"; + // + // miTvSettings + // + resources.ApplyResources(this.miTvSettings, "miTvSettings"); + this.miTvSettings.Id = 48; + this.miTvSettings.ImageIndex = 27; + this.miTvSettings.Name = "miTvSettings"; + this.miTvSettings.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miTvCountrySetup_ItemClick); + // + // mnuOptions + // + resources.ApplyResources(this.mnuOptions, "mnuOptions"); + this.mnuOptions.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.mnuOptions.Id = 34; + this.mnuOptions.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.barSubItem1, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuCharset, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph)}); + this.mnuOptions.Name = "mnuOptions"; + // + // barSubItem1 + // + resources.ApplyResources(this.barSubItem1, "barSubItem1"); + this.barSubItem1.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.barSubItem1.Id = 0; + this.barSubItem1.ImageIndex = 14; + this.barSubItem1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miEnglish), + new DevExpress.XtraBars.LinkPersistInfo(this.miGerman)}); + this.barSubItem1.Name = "barSubItem1"; + this.barSubItem1.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionInMenu; + // + // miEnglish + // + this.miEnglish.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check; + resources.ApplyResources(this.miEnglish, "miEnglish"); + this.miEnglish.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.miEnglish.Id = 2; + this.miEnglish.ImageIndex = 0; + this.miEnglish.Name = "miEnglish"; + this.miEnglish.Tag = "en"; + this.miEnglish.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miLanguage_DownChanged); + // + // miGerman + // + this.miGerman.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check; + resources.ApplyResources(this.miGerman, "miGerman"); + this.miGerman.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.miGerman.Id = 1; + this.miGerman.ImageIndex = 1; + this.miGerman.Name = "miGerman"; + this.miGerman.Tag = "de-DE"; + this.miGerman.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miLanguage_DownChanged); + // + // mnuCharset + // + resources.ApplyResources(this.mnuCharset, "mnuCharset"); + this.mnuCharset.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.mnuCharset.Id = 15; + this.mnuCharset.ImageIndex = 9; + this.mnuCharset.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miCharsetForm), + new DevExpress.XtraBars.LinkPersistInfo(this.miIsoCharSets, true)}); + this.mnuCharset.Name = "mnuCharset"; + this.mnuCharset.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionInMenu; + // + // miCharsetForm + // + resources.ApplyResources(this.miCharsetForm, "miCharsetForm"); + this.miCharsetForm.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.miCharsetForm.Id = 13; + this.miCharsetForm.ImageIndex = 9; + this.miCharsetForm.Name = "miCharsetForm"; + this.miCharsetForm.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miCharset_ItemClick); + // + // miIsoCharSets + // + resources.ApplyResources(this.miIsoCharSets, "miIsoCharSets"); + this.miIsoCharSets.CategoryGuid = new System.Guid("870e935c-f3d9-4202-9c58-87966069155d"); + this.miIsoCharSets.Id = 14; + this.miIsoCharSets.Name = "miIsoCharSets"; + this.miIsoCharSets.ShowNumbers = true; + this.miIsoCharSets.ListItemClick += new DevExpress.XtraBars.ListItemClickEventHandler(this.miIsoCharSets_ListItemClick); + // + // mnuHelp + // + resources.ApplyResources(this.mnuHelp, "mnuHelp"); + this.mnuHelp.CategoryGuid = new System.Guid("0d554574-30e8-4d31-9a70-da702a984260"); + this.mnuHelp.Id = 10; + this.mnuHelp.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miAbout)}); + this.mnuHelp.Name = "mnuHelp"; + // + // miAbout + // + resources.ApplyResources(this.miAbout, "miAbout"); + this.miAbout.CategoryGuid = new System.Guid("0d554574-30e8-4d31-9a70-da702a984260"); + this.miAbout.Id = 11; + this.miAbout.ImageIndex = 7; + this.miAbout.Name = "miAbout"; + this.miAbout.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miAbout_ItemClick); + // + // barDockControlTop + // + this.barDockControlTop.CausesValidation = false; + resources.ApplyResources(this.barDockControlTop, "barDockControlTop"); + // + // barDockControlBottom + // + this.barDockControlBottom.CausesValidation = false; + resources.ApplyResources(this.barDockControlBottom, "barDockControlBottom"); + // + // barDockControlLeft + // + this.barDockControlLeft.CausesValidation = false; + resources.ApplyResources(this.barDockControlLeft, "barDockControlLeft"); + // + // barDockControlRight + // + this.barDockControlRight.CausesValidation = false; + resources.ApplyResources(this.barDockControlRight, "barDockControlRight"); + // + // sharedImageCollection1 + // + // + // + // + this.sharedImageCollection1.ImageSource.ImageStream = ((DevExpress.Utils.ImageCollectionStreamer)(resources.GetObject("sharedImageCollection1.ImageSource.ImageStream"))); + this.sharedImageCollection1.ImageSource.Images.SetKeyName(24, "0088.png"); + this.sharedImageCollection1.ImageSource.Images.SetKeyName(25, "0089.png"); + this.sharedImageCollection1.ImageSource.Images.SetKeyName(26, "0119.png"); + this.sharedImageCollection1.ImageSource.Images.SetKeyName(27, "0025.png"); + this.sharedImageCollection1.ParentControl = this; + // + // miMoveUp + // + resources.ApplyResources(this.miMoveUp, "miMoveUp"); + this.miMoveUp.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miMoveUp.Id = 45; + this.miMoveUp.ImageIndex = 24; + this.miMoveUp.Name = "miMoveUp"; + this.miMoveUp.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miMoveUp_ItemClick); + // + // miMoveDown + // + resources.ApplyResources(this.miMoveDown, "miMoveDown"); + this.miMoveDown.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miMoveDown.Id = 46; + this.miMoveDown.ImageIndex = 25; + this.miMoveDown.Name = "miMoveDown"; + this.miMoveDown.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miMoveDown_ItemClick); + // + // btnSyncFromLeft + // + resources.ApplyResources(this.btnSyncFromLeft, "btnSyncFromLeft"); + this.btnSyncFromLeft.Name = "btnSyncFromLeft"; + this.btnSyncFromLeft.Click += new System.EventHandler(this.btnSyncFromLeft_Click); + // + // labelControl2 + // + resources.ApplyResources(this.labelControl2, "labelControl2"); + this.labelControl2.Name = "labelControl2"; + // + // btnClearLeftFilter + // + this.btnClearLeftFilter.Appearance.Font = ((System.Drawing.Font)(resources.GetObject("btnClearLeftFilter.Appearance.Font"))); + this.btnClearLeftFilter.Appearance.Options.UseFont = true; + resources.ApplyResources(this.btnClearLeftFilter, "btnClearLeftFilter"); + this.btnClearLeftFilter.Name = "btnClearLeftFilter"; + this.btnClearLeftFilter.Click += new System.EventHandler(this.btnClearLeftFilter_Click); + // + // btnRenum + // + this.btnRenum.ImageIndex = 22; + this.btnRenum.ImageList = this.sharedImageCollection1; + resources.ApplyResources(this.btnRenum, "btnRenum"); + this.btnRenum.Name = "btnRenum"; + this.btnRenum.Click += new System.EventHandler(this.btnRenum_Click); + // + // btnSort + // + this.btnSort.ImageIndex = 21; + this.btnSort.ImageList = this.sharedImageCollection1; + resources.ApplyResources(this.btnSort, "btnSort"); + this.btnSort.Name = "btnSort"; + this.btnSort.Click += new System.EventHandler(this.btnSort_Click); + // + // btnDown + // + this.btnDown.ImageIndex = 25; + this.btnDown.ImageList = this.sharedImageCollection1; + resources.ApplyResources(this.btnDown, "btnDown"); + this.btnDown.Name = "btnDown"; + this.btnDown.Click += new System.EventHandler(this.btnDown_Click); + // + // btnUp + // + this.btnUp.ImageIndex = 24; + this.btnUp.ImageList = this.sharedImageCollection1; + resources.ApplyResources(this.btnUp, "btnUp"); + this.btnUp.Name = "btnUp"; + this.btnUp.Click += new System.EventHandler(this.btnUp_Click); + // + // btnRemove + // + this.btnRemove.ImageIndex = 11; + this.btnRemove.ImageList = this.sharedImageCollection1; + resources.ApplyResources(this.btnRemove, "btnRemove"); + this.btnRemove.Name = "btnRemove"; + this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); + // + // txtSetSlot + // + resources.ApplyResources(this.txtSetSlot, "txtSetSlot"); + this.txtSetSlot.Name = "txtSetSlot"; + this.txtSetSlot.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("txtSetSlot.Properties.Buttons"))))}); + this.txtSetSlot.Properties.Mask.EditMask = resources.GetString("txtSetSlot.Properties.Mask.EditMask"); + this.txtSetSlot.Properties.Mask.MaskType = ((DevExpress.XtraEditors.Mask.MaskType)(resources.GetObject("txtSetSlot.Properties.Mask.MaskType"))); + this.txtSetSlot.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.txtSetSlot_ButtonClick); + this.txtSetSlot.EditValueChanged += new System.EventHandler(this.txtSetSlot_EditValueChanged); + this.txtSetSlot.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSetSlot_KeyDown); + // + // labelControl11 + // + resources.ApplyResources(this.labelControl11, "labelControl11"); + this.labelControl11.Name = "labelControl11"; + // + // grpInputList + // + this.grpInputList.Controls.Add(this.gridInput); + this.grpInputList.Controls.Add(this.lblHotkeyRight); + this.grpInputList.Controls.Add(this.panelControl3); + resources.ApplyResources(this.grpInputList, "grpInputList"); + this.grpInputList.Name = "grpInputList"; + // + // gridInput + // + this.gridInput.DataSource = this.dsChannels; + resources.ApplyResources(this.gridInput, "gridInput"); + this.gridInput.MainView = this.gviewInput; + this.gridInput.Name = "gridInput"; + this.gridInput.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { + this.repositoryItemCheckedComboBoxEdit2}); + this.gridInput.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { + this.gviewInput}); + this.gridInput.ProcessGridKey += new System.Windows.Forms.KeyEventHandler(this.gridInput_ProcessGridKey); + this.gridInput.Enter += new System.EventHandler(this.gridInput_Enter); + // + // gviewInput + // + this.gviewInput.Appearance.HeaderPanel.Options.UseTextOptions = true; + this.gviewInput.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap; + this.gviewInput.ColumnPanelRowHeight = 35; + this.gviewInput.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { + this.colIndex, + this.colSlotOld, + this.colSlotNew, + this.colName, + this.colShortName, + this.colFavorites, + this.colLock, + this.colSkip, + this.colHidden, + this.colEncrypted, + this.colChannelOrTransponder, + this.colFreqInMhz, + this.colServiceId, + this.colVideoPid, + this.colAudioPid, + this.colServiceType, + this.colServiceTypeName, + this.colSatellite, + this.colNetworkId, + this.colTransportStreamId, + this.colSymbolRate, + this.colPolarity, + this.colUid, + this.colNetworkName, + this.colNetworkOperator, + this.colDebug, + this.colLogicalIndex}); + this.gviewInput.GridControl = this.gridInput; + this.gviewInput.Name = "gviewInput"; + this.gviewInput.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click; + this.gviewInput.OptionsCustomization.AllowGroup = false; + this.gviewInput.OptionsLayout.LayoutVersion = "3"; + this.gviewInput.OptionsSelection.MultiSelect = true; + this.gviewInput.OptionsView.ColumnAutoWidth = false; + this.gviewInput.OptionsView.ShowAutoFilterRow = true; + this.gviewInput.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never; + this.gviewInput.OptionsView.ShowGroupPanel = false; + this.gviewInput.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] { + new DevExpress.XtraGrid.Columns.GridColumnSortInfo(this.colSlotOld, DevExpress.Data.ColumnSortOrder.Ascending)}); + this.gviewInput.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(this.gviewInput_RowClick); + this.gviewInput.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(this.gviewInput_RowCellStyle); + this.gviewInput.PopupMenuShowing += new DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventHandler(this.gviewInput_PopupMenuShowing); + this.gviewInput.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gviewInput_FocusedRowChanged); + this.gviewInput.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.gviewInput_CellValueChanged); + this.gviewInput.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.gviewInput_CustomColumnDisplayText); + this.gviewInput.LayoutUpgrade += new DevExpress.Utils.LayoutUpgadeEventHandler(this.gviewInput_LayoutUpgrade); + this.gviewInput.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gview_MouseDown); + this.gviewInput.ValidatingEditor += new DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventHandler(this.gviewInput_ValidatingEditor); + // + // colIndex + // + resources.ApplyResources(this.colIndex, "colIndex"); + this.colIndex.FieldName = "RecordIndex"; + this.colIndex.Name = "colIndex"; + this.colIndex.OptionsColumn.AllowEdit = false; + // + // colSlotOld + // + resources.ApplyResources(this.colSlotOld, "colSlotOld"); + this.colSlotOld.FieldName = "OldProgramNr"; + this.colSlotOld.Name = "colSlotOld"; + this.colSlotOld.OptionsColumn.AllowEdit = false; + this.colSlotOld.OptionsFilter.AllowAutoFilter = false; + // + // colSlotNew + // + resources.ApplyResources(this.colSlotNew, "colSlotNew"); + this.colSlotNew.FieldName = "NewProgramNr"; + this.colSlotNew.Name = "colSlotNew"; + // + // colName + // + resources.ApplyResources(this.colName, "colName"); + this.colName.FieldName = "Name"; + this.colName.Name = "colName"; + this.colName.OptionsColumn.AllowEdit = false; + this.colName.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains; + // + // colShortName + // + resources.ApplyResources(this.colShortName, "colShortName"); + this.colShortName.FieldName = "ShortName"; + this.colShortName.Name = "colShortName"; + this.colShortName.OptionsColumn.AllowEdit = false; + // + // colFavorites + // + resources.ApplyResources(this.colFavorites, "colFavorites"); + this.colFavorites.ColumnEdit = this.repositoryItemCheckedComboBoxEdit2; + this.colFavorites.FieldName = "Favorites"; + this.colFavorites.Name = "colFavorites"; + // + // repositoryItemCheckedComboBoxEdit2 + // + resources.ApplyResources(this.repositoryItemCheckedComboBoxEdit2, "repositoryItemCheckedComboBoxEdit2"); + this.repositoryItemCheckedComboBoxEdit2.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("repositoryItemCheckedComboBoxEdit2.Buttons"))))}); + this.repositoryItemCheckedComboBoxEdit2.CloseUpKey = new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.F2); + this.repositoryItemCheckedComboBoxEdit2.ForceUpdateEditValue = DevExpress.Utils.DefaultBoolean.True; + this.repositoryItemCheckedComboBoxEdit2.Mask.EditMask = resources.GetString("repositoryItemCheckedComboBoxEdit2.Mask.EditMask"); + this.repositoryItemCheckedComboBoxEdit2.Mask.MaskType = ((DevExpress.XtraEditors.Mask.MaskType)(resources.GetObject("repositoryItemCheckedComboBoxEdit2.Mask.MaskType"))); + this.repositoryItemCheckedComboBoxEdit2.Name = "repositoryItemCheckedComboBoxEdit2"; + this.repositoryItemCheckedComboBoxEdit2.PopupSizeable = false; + this.repositoryItemCheckedComboBoxEdit2.SelectAllItemVisible = false; + this.repositoryItemCheckedComboBoxEdit2.ShowButtons = false; + this.repositoryItemCheckedComboBoxEdit2.ShowPopupCloseButton = false; + this.repositoryItemCheckedComboBoxEdit2.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard; + // + // colLock + // + resources.ApplyResources(this.colLock, "colLock"); + this.colLock.FieldName = "Lock"; + this.colLock.Name = "colLock"; + // + // colSkip + // + resources.ApplyResources(this.colSkip, "colSkip"); + this.colSkip.FieldName = "Skip"; + this.colSkip.Name = "colSkip"; + // + // colHidden + // + resources.ApplyResources(this.colHidden, "colHidden"); + this.colHidden.FieldName = "Hidden"; + this.colHidden.Name = "colHidden"; + // + // colEncrypted + // + resources.ApplyResources(this.colEncrypted, "colEncrypted"); + this.colEncrypted.FieldName = "Encrypted"; + this.colEncrypted.Name = "colEncrypted"; + this.colEncrypted.OptionsColumn.AllowEdit = false; + this.colEncrypted.OptionsColumn.FixedWidth = true; + // + // colChannelOrTransponder + // + resources.ApplyResources(this.colChannelOrTransponder, "colChannelOrTransponder"); + this.colChannelOrTransponder.FieldName = "ChannelOrTransponder"; + this.colChannelOrTransponder.Name = "colChannelOrTransponder"; + this.colChannelOrTransponder.OptionsColumn.AllowEdit = false; + // + // colFreqInMhz + // + resources.ApplyResources(this.colFreqInMhz, "colFreqInMhz"); + this.colFreqInMhz.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; + this.colFreqInMhz.FieldName = "FreqInMhz"; + this.colFreqInMhz.Name = "colFreqInMhz"; + this.colFreqInMhz.OptionsColumn.AllowEdit = false; + // + // colServiceId + // + resources.ApplyResources(this.colServiceId, "colServiceId"); + this.colServiceId.FieldName = "ServiceId"; + this.colServiceId.Name = "colServiceId"; + this.colServiceId.OptionsColumn.AllowEdit = false; + // + // colVideoPid + // + resources.ApplyResources(this.colVideoPid, "colVideoPid"); + this.colVideoPid.FieldName = "VideoPid"; + this.colVideoPid.Name = "colVideoPid"; + this.colVideoPid.OptionsColumn.AllowEdit = false; + // + // colAudioPid + // + resources.ApplyResources(this.colAudioPid, "colAudioPid"); + this.colAudioPid.FieldName = "AudioPid"; + this.colAudioPid.Name = "colAudioPid"; + this.colAudioPid.OptionsColumn.AllowEdit = false; + // + // colServiceType + // + resources.ApplyResources(this.colServiceType, "colServiceType"); + this.colServiceType.FieldName = "ServiceType"; + this.colServiceType.Name = "colServiceType"; + this.colServiceType.OptionsColumn.AllowEdit = false; + // + // colServiceTypeName + // + this.colServiceTypeName.FieldName = "ServiceTypeName"; + this.colServiceTypeName.Name = "colServiceTypeName"; + this.colServiceTypeName.OptionsColumn.AllowEdit = false; + resources.ApplyResources(this.colServiceTypeName, "colServiceTypeName"); + // + // colSatellite + // + resources.ApplyResources(this.colSatellite, "colSatellite"); + this.colSatellite.FieldName = "Satellite"; + this.colSatellite.Name = "colSatellite"; + this.colSatellite.OptionsColumn.AllowEdit = false; + // + // colNetworkId + // + resources.ApplyResources(this.colNetworkId, "colNetworkId"); + this.colNetworkId.FieldName = "OriginalNetworkId"; + this.colNetworkId.Name = "colNetworkId"; + this.colNetworkId.OptionsColumn.AllowEdit = false; + // + // colTransportStreamId + // + resources.ApplyResources(this.colTransportStreamId, "colTransportStreamId"); + this.colTransportStreamId.FieldName = "TransportStreamId"; + this.colTransportStreamId.Name = "colTransportStreamId"; + this.colTransportStreamId.OptionsColumn.AllowEdit = false; + // + // colSymbolRate + // + resources.ApplyResources(this.colSymbolRate, "colSymbolRate"); + this.colSymbolRate.FieldName = "SymbolRate"; + this.colSymbolRate.Name = "colSymbolRate"; + this.colSymbolRate.OptionsColumn.AllowEdit = false; + // + // colPolarity + // + resources.ApplyResources(this.colPolarity, "colPolarity"); + this.colPolarity.FieldName = "Polarity"; + this.colPolarity.Name = "colPolarity"; + this.colPolarity.OptionsColumn.AllowEdit = false; + // + // colUid + // + resources.ApplyResources(this.colUid, "colUid"); + this.colUid.FieldName = "Uid"; + this.colUid.Name = "colUid"; + this.colUid.OptionsColumn.AllowEdit = false; + // + // colNetworkName + // + resources.ApplyResources(this.colNetworkName, "colNetworkName"); + this.colNetworkName.FieldName = "NetworkName"; + this.colNetworkName.Name = "colNetworkName"; + this.colNetworkName.OptionsColumn.AllowEdit = false; + // + // colNetworkOperator + // + resources.ApplyResources(this.colNetworkOperator, "colNetworkOperator"); + this.colNetworkOperator.FieldName = "NetworkOperator"; + this.colNetworkOperator.Name = "colNetworkOperator"; + this.colNetworkOperator.OptionsColumn.AllowEdit = false; + // + // colDebug + // + this.colDebug.FieldName = "Debug"; + this.colDebug.Name = "colDebug"; + this.colDebug.OptionsColumn.AllowEdit = false; + // + // colLogicalIndex + // + resources.ApplyResources(this.colLogicalIndex, "colLogicalIndex"); + this.colLogicalIndex.FieldName = "RecordOrder"; + this.colLogicalIndex.Name = "colLogicalIndex"; + this.colLogicalIndex.OptionsColumn.AllowEdit = false; + this.colLogicalIndex.OptionsColumn.ReadOnly = true; + // + // lblHotkeyRight + // + resources.ApplyResources(this.lblHotkeyRight, "lblHotkeyRight"); + this.lblHotkeyRight.Name = "lblHotkeyRight"; + // + // panelControl3 + // + this.panelControl3.Controls.Add(this.btnCloneChannelList); + this.panelControl3.Controls.Add(this.btnClearRightFilter); + this.panelControl3.Controls.Add(this.btnSyncFromRight); + this.panelControl3.Controls.Add(this.btnAdd); + resources.ApplyResources(this.panelControl3, "panelControl3"); + this.panelControl3.Name = "panelControl3"; + // + // btnCloneChannelList + // + resources.ApplyResources(this.btnCloneChannelList, "btnCloneChannelList"); + this.btnCloneChannelList.Name = "btnCloneChannelList"; + this.btnCloneChannelList.Click += new System.EventHandler(this.btnCloneChannelList_Click); + // + // btnClearRightFilter + // + this.btnClearRightFilter.Appearance.Font = ((System.Drawing.Font)(resources.GetObject("btnClearRightFilter.Appearance.Font"))); + this.btnClearRightFilter.Appearance.Options.UseFont = true; + resources.ApplyResources(this.btnClearRightFilter, "btnClearRightFilter"); + this.btnClearRightFilter.Name = "btnClearRightFilter"; + this.btnClearRightFilter.Click += new System.EventHandler(this.btnClearRightFilter_Click); + // + // btnSyncFromRight + // + resources.ApplyResources(this.btnSyncFromRight, "btnSyncFromRight"); + this.btnSyncFromRight.Name = "btnSyncFromRight"; + this.btnSyncFromRight.Click += new System.EventHandler(this.btnSyncFromRight_Click); + // + // btnAdd + // + this.btnAdd.ImageIndex = 20; + this.btnAdd.ImageList = this.sharedImageCollection1; + resources.ApplyResources(this.btnAdd, "btnAdd"); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // defaultLookAndFeel1 + // + this.defaultLookAndFeel1.LookAndFeel.SkinName = "Office 2007 Blue"; + // + // grpTopPanel + // + this.grpTopPanel.Controls.Add(this.comboUnsortedAction); + this.grpTopPanel.Controls.Add(this.labelControl3); + this.grpTopPanel.Controls.Add(this.btnResetChannelData); + this.grpTopPanel.Controls.Add(this.comboChannelList); + this.grpTopPanel.Controls.Add(this.labelControl1); + resources.ApplyResources(this.grpTopPanel, "grpTopPanel"); + this.grpTopPanel.Name = "grpTopPanel"; + this.grpTopPanel.ShowCaption = false; + // + // comboUnsortedAction + // + resources.ApplyResources(this.comboUnsortedAction, "comboUnsortedAction"); + this.comboUnsortedAction.MenuManager = this.barManager1; + this.comboUnsortedAction.Name = "comboUnsortedAction"; + this.comboUnsortedAction.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("comboUnsortedAction.Properties.Buttons"))))}); + this.comboUnsortedAction.Properties.Items.AddRange(new object[] { + resources.GetString("comboUnsortedAction.Properties.Items"), + resources.GetString("comboUnsortedAction.Properties.Items1"), + resources.GetString("comboUnsortedAction.Properties.Items2")}); + this.comboUnsortedAction.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; + // + // labelControl3 + // + this.labelControl3.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far; + resources.ApplyResources(this.labelControl3, "labelControl3"); + this.labelControl3.Name = "labelControl3"; + // + // btnResetChannelData + // + resources.ApplyResources(this.btnResetChannelData, "btnResetChannelData"); + this.btnResetChannelData.Name = "btnResetChannelData"; + this.btnResetChannelData.Click += new System.EventHandler(this.btnResetChannelData_Click); + // + // comboChannelList + // + resources.ApplyResources(this.comboChannelList, "comboChannelList"); + this.comboChannelList.MenuManager = this.barManager1; + this.comboChannelList.Name = "comboChannelList"; + this.comboChannelList.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { + new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("comboChannelList.Properties.Buttons"))))}); + this.comboChannelList.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; + this.comboChannelList.SelectedIndexChanged += new System.EventHandler(this.comboChannelList_SelectedIndexChanged); + // + // labelControl1 + // + resources.ApplyResources(this.labelControl1, "labelControl1"); + this.labelControl1.Name = "labelControl1"; + // + // mnuContext + // + this.mnuContext.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { + new DevExpress.XtraBars.LinkPersistInfo(this.miMoveUp), + new DevExpress.XtraBars.LinkPersistInfo(this.miMoveDown), + new DevExpress.XtraBars.LinkPersistInfo(this.miAddChannel), + new DevExpress.XtraBars.LinkPersistInfo(this.miRemove), + new DevExpress.XtraBars.LinkPersistInfo(this.miReplace), + new DevExpress.XtraBars.LinkPersistInfo(this.miSort), + new DevExpress.XtraBars.LinkPersistInfo(this.miRenum), + new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.mnuFavSet, "", true, true, true, 0, null, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), + new DevExpress.XtraBars.LinkPersistInfo(this.mnuFavUnset), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miLockOff), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miSkipOff), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOn, true), + new DevExpress.XtraBars.LinkPersistInfo(this.miHideOff)}); + this.mnuContext.Manager = this.barManager1; + this.mnuContext.Name = "mnuContext"; + // + // MainForm + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.splitContainerControl1); + this.Controls.Add(this.grpTopPanel); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Name = "MainForm"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.Load += new System.EventHandler(this.MainForm_Load); + this.Shown += new System.EventHandler(this.MainForm_Shown); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).EndInit(); + this.splitContainerControl1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).EndInit(); + this.grpOutputList.ResumeLayout(false); + this.grpOutputList.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.gridOutput)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dsChannels)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gviewOutput)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckedComboBoxEdit1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pnlEditControls)).EndInit(); + this.pnlEditControls.ResumeLayout(false); + this.pnlEditControls.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comboEditMode.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.sharedImageCollection1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.txtSetSlot.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.grpInputList)).EndInit(); + this.grpInputList.ResumeLayout(false); + this.grpInputList.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.gridInput)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gviewInput)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckedComboBoxEdit2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.panelControl3)).EndInit(); + this.panelControl3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.grpTopPanel)).EndInit(); + this.grpTopPanel.ResumeLayout(false); + this.grpTopPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.comboUnsortedAction.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.comboChannelList.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.mnuContext)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private DevExpress.LookAndFeel.DefaultLookAndFeel defaultLookAndFeel1; + private DevExpress.XtraGrid.GridControl gridInput; + private DevExpress.XtraGrid.Views.Grid.GridView gviewInput; + private System.Windows.Forms.BindingSource dsChannels; + private DevExpress.XtraGrid.Columns.GridColumn colIndex; + private DevExpress.XtraGrid.Columns.GridColumn colSlotOld; + private DevExpress.XtraGrid.Columns.GridColumn colSlotNew; + private DevExpress.XtraGrid.Columns.GridColumn colUid; + private DevExpress.XtraGrid.Columns.GridColumn colName; + private DevExpress.XtraEditors.GroupControl grpOutputList; + private DevExpress.XtraEditors.SimpleButton btnRemove; + private DevExpress.XtraEditors.GroupControl grpInputList; + private DevExpress.XtraEditors.SimpleButton btnAdd; + private DevExpress.XtraGrid.GridControl gridOutput; + private DevExpress.XtraGrid.Views.Grid.GridView gviewOutput; + private DevExpress.XtraGrid.Columns.GridColumn colOutSlot; + private DevExpress.XtraGrid.Columns.GridColumn colOutName; + private DevExpress.XtraEditors.SimpleButton btnDown; + private DevExpress.XtraEditors.SimpleButton btnUp; + private DevExpress.XtraEditors.LabelControl lblHotkeyLeft; + private DevExpress.XtraEditors.LabelControl lblHotkeyRight; + private DevExpress.XtraEditors.ButtonEdit txtSetSlot; + private DevExpress.XtraEditors.LabelControl labelControl11; + private DevExpress.XtraGrid.Columns.GridColumn colEncrypted; + private DevExpress.XtraEditors.SimpleButton btnSort; + private DevExpress.XtraBars.BarManager barManager1; + private DevExpress.XtraBars.Bar bar1; + private DevExpress.XtraBars.BarSubItem barSubItem1; + private DevExpress.XtraBars.BarButtonItem miGerman; + private DevExpress.XtraBars.BarButtonItem miEnglish; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; + private DevExpress.Utils.SharedImageCollection sharedImageCollection1; + private DevExpress.XtraBars.BarSubItem miFile; + private DevExpress.XtraBars.BarButtonItem miOpen; + private DevExpress.XtraBars.BarButtonItem miSave; + private DevExpress.XtraBars.BarButtonItem miReload; + private DevExpress.XtraBars.BarButtonItem miSaveAs; + private DevExpress.XtraBars.BarButtonItem miQuit; + private DevExpress.XtraBars.BarSubItem mnuHelp; + private DevExpress.XtraBars.BarButtonItem miAbout; + private DevExpress.XtraBars.BarButtonItem miCharsetForm; + private DevExpress.XtraBars.BarListItem miIsoCharSets; + private DevExpress.XtraBars.BarSubItem mnuCharset; + private DevExpress.XtraEditors.SimpleButton btnSyncFromRight; + private DevExpress.XtraEditors.SimpleButton btnSyncFromLeft; + private DevExpress.XtraEditors.SimpleButton btnClearRightFilter; + private DevExpress.XtraEditors.SimpleButton btnClearLeftFilter; + private DevExpress.XtraGrid.Columns.GridColumn colAudioPid; + private DevExpress.XtraGrid.Columns.GridColumn colVideoPid; + private DevExpress.XtraGrid.Columns.GridColumn colNetworkId; + private DevExpress.XtraGrid.Columns.GridColumn colFreqInMhz; + private DevExpress.XtraGrid.Columns.GridColumn colServiceId; + private DevExpress.XtraGrid.Columns.GridColumn colServiceType; + private DevExpress.XtraGrid.Columns.GridColumn colShortName; + private DevExpress.XtraGrid.Columns.GridColumn colFavorites; + private DevExpress.XtraGrid.Columns.GridColumn colSkip; + private DevExpress.XtraGrid.Columns.GridColumn colLock; + private DevExpress.XtraGrid.Columns.GridColumn colSatellite; + private DevExpress.XtraGrid.Columns.GridColumn colHidden; + private DevExpress.XtraGrid.Columns.GridColumn colSymbolRate; + private DevExpress.XtraGrid.Columns.GridColumn colPolarity; + private DevExpress.XtraGrid.Columns.GridColumn colTransportStreamId; + private DevExpress.XtraEditors.SplitContainerControl splitContainerControl1; + private DevExpress.XtraEditors.PanelControl pnlEditControls; + private DevExpress.XtraEditors.GroupControl grpTopPanel; + private DevExpress.XtraEditors.ComboBoxEdit comboChannelList; + private DevExpress.XtraEditors.LabelControl labelControl1; + private DevExpress.XtraEditors.PanelControl panelControl3; + private DevExpress.XtraEditors.LabelControl labelControl2; + private DevExpress.XtraGrid.Columns.GridColumn colOutFav; + private DevExpress.XtraEditors.SimpleButton btnRenum; + private DevExpress.XtraGrid.Columns.GridColumn colIndex1; + private DevExpress.XtraGrid.Columns.GridColumn colUid1; + private DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit repositoryItemCheckedComboBoxEdit1; + private DevExpress.XtraBars.PopupMenu mnuContext; + private DevExpress.XtraBars.BarSubItem miEdit; + private DevExpress.XtraBars.BarListItem miFavSet; + private DevExpress.XtraBars.BarListItem miFavUnset; + private DevExpress.XtraBars.BarButtonItem miRemove; + private DevExpress.XtraBars.BarButtonItem miReplace; + private DevExpress.XtraBars.BarButtonItem miLockOn; + private DevExpress.XtraBars.BarButtonItem miLockOff; + private DevExpress.XtraBars.BarButtonItem miSkipOn; + private DevExpress.XtraBars.BarButtonItem miSkipOff; + private DevExpress.XtraBars.BarButtonItem miHideOn; + private DevExpress.XtraBars.BarButtonItem miHideOff; + private DevExpress.XtraBars.BarSubItem mnuOptions; + private DevExpress.XtraBars.BarSubItem mnuFavSet; + private DevExpress.XtraBars.BarSubItem mnuFavUnset; + private DevExpress.XtraBars.BarButtonItem miAddChannel; + private DevExpress.XtraBars.BarButtonItem miSort; + private DevExpress.XtraBars.BarButtonItem miRenum; + private DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit repositoryItemCheckedComboBoxEdit2; + private DevExpress.XtraGrid.Columns.GridColumn colChannelOrTransponder; + private DevExpress.XtraGrid.Columns.GridColumn colNetworkName; + private DevExpress.XtraGrid.Columns.GridColumn colNetworkOperator; + private DevExpress.XtraGrid.Columns.GridColumn colDebug; + private DevExpress.XtraGrid.Columns.GridColumn colServiceTypeName; + private DevExpress.XtraEditors.SimpleButton btnResetChannelData; + private DevExpress.XtraBars.BarButtonItem miRestoreOriginal; + private DevExpress.XtraEditors.ComboBoxEdit comboUnsortedAction; + private DevExpress.XtraEditors.LabelControl labelControl3; + private DevExpress.XtraGrid.Columns.GridColumn colLogicalIndex; + private DevExpress.XtraBars.BarButtonItem miFileInformation; + private DevExpress.XtraBars.BarButtonItem miOpenReferenceFile; + private DevExpress.XtraEditors.SimpleButton btnCloneChannelList; + private DevExpress.XtraBars.BarButtonItem miMoveUp; + private DevExpress.XtraBars.BarButtonItem miMoveDown; + private DevExpress.XtraEditors.ComboBoxEdit comboEditMode; + private DevExpress.XtraBars.BarSubItem barSubItem2; + private DevExpress.XtraBars.BarButtonItem miTvSettings; + private DevExpress.XtraSplashScreen.SplashScreenManager splashScreenManager1; + } +} + diff --git a/ChanSort.Ui/MainForm.cs b/ChanSort.Ui/MainForm.cs new file mode 100644 index 0000000..286fdc3 --- /dev/null +++ b/ChanSort.Ui/MainForm.cs @@ -0,0 +1,1712 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using ChanSort.Api; +using ChanSort.Ui.Properties; +using DevExpress.Utils; +using DevExpress.XtraBars; +using DevExpress.XtraEditors; +using DevExpress.XtraEditors.Controls; +using DevExpress.XtraGrid; +using DevExpress.XtraGrid.Columns; +using DevExpress.XtraGrid.Views.Base; +using DevExpress.XtraGrid.Views.Grid; + +namespace ChanSort.Ui +{ + // http://www.lg-forum.com/lg-led-plasma-lcd-fernseher/5098-channeleditor-40.html + // http://www.lg-hack.info/cgi-bin/sn_forumr.cgi?fid=2677&cid=2674&tid=2690&pg=1&sc=20&x=0 + public partial class MainForm : XtraForm + { + #region enum EditMode + private enum EditMode + { + InsertBefore = 0, + InsertAfter = 1, + Swap = 2 + } + #endregion + + private readonly IList plugins; + private string currentTvFile; + private string currentCsvFile; + private ISerializerPlugin currentPlugin; + private SerializerBase currentTvSerializer; + private Editor editor; + private readonly CsvFileSerializer csvSerializer = new CsvFileSerializer(); + private DataRoot dataRoot; + private bool ignoreLanguageChange; + private readonly string title; + private Encoding defaultEncoding = Encoding.Default; + private readonly List isoEncodings = new List(); + private ChannelList currentChannelList; + private GridView lastFocusedGrid; + private EditMode curEditMode = EditMode.InsertAfter; + + #region ctor() + public MainForm() + { + if (!string.IsNullOrEmpty(Settings.Default.Language)) + Thread.CurrentThread.CurrentUICulture = new CultureInfo(Settings.Default.Language); + this.LookAndFeel.SetSkinStyle("Office 2010 Blue"); + InitializeComponent(); + this.SetControlsEnabled(false); + if (!Settings.Default.WindowSize.IsEmpty) + this.Size = Settings.Default.WindowSize; + this.title = this.Text; + this.plugins = this.LoadSerializerPlugins(); + this.FillMenuWithIsoEncodings(); + + this.Icon = new Icon(Assembly.GetExecutingAssembly().GetManifestResourceStream("ChanSort.Ui.app.ico")); + var bcLeft = new BindingContext(); + this.grpOutputList.BindingContext = bcLeft; + this.lastFocusedGrid = this.gviewInput; + this.comboEditMode.SelectedIndex = (int) this.curEditMode; + this.ActiveControl = this.gridInput; + } + #endregion + + #region SetControlsEnabled() + private void SetControlsEnabled(bool enabled) + { + foreach (Control control in this.grpTopPanel.Controls) + control.Enabled = enabled; + foreach (Control control in this.pnlEditControls.Controls) + { + if (control != this.btnClearLeftFilter && control != this.btnSyncFromLeft) + control.Enabled = enabled; + } + + this.miReload.Enabled = enabled; + this.miSave.Enabled = enabled; + this.miSaveAs.Enabled = enabled; + } + #endregion + + #region LoadSerializerPlugins() + private IList LoadSerializerPlugins() + { + var list = new List(); + string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + foreach (var file in Directory.GetFiles(exeDir, "ChanSort.Plugin.*.dll")) + { + try + { + var assembly = Assembly.LoadFrom(file); + foreach(var type in assembly.GetTypes()) + { + if (typeof(ISerializerPlugin).IsAssignableFrom(type) && !type.IsAbstract) + list.Add((ISerializerPlugin) Activator.CreateInstance(type)); + } + } + catch(Exception ex) { HandleException(new IOException("Plugin " + file + "\n" + ex.Message, ex)); } + } + return list; + } + #endregion + + #region ShowOpenFileDialog() + private void ShowOpenFileDialog() + { + StringBuilder filter = new StringBuilder(); + StringBuilder extension = new StringBuilder(); + foreach (var plugin in this.plugins) + { + filter.Append(plugin.PluginName).Append("|").Append(plugin.FileFilter); + extension.Append(plugin.FileFilter); + filter.Append("|"); + extension.Append(";"); + } + if (extension.Length > 0) + extension.Remove(extension.Length - 1, 1); + + using (OpenFileDialog dlg = new OpenFileDialog()) + { + dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); + dlg.AddExtension = true; + dlg.Filter = filter + string.Format(Resources.MainForm_FileDialog_OpenFileFilter, extension); + dlg.FilterIndex = this.plugins.Count + 1; + dlg.CheckFileExists = true; + dlg.RestoreDirectory = true; + if (dlg.ShowDialog() == DialogResult.OK) + { + this.SetFileName(dlg.FileName); + var plugin = dlg.FilterIndex <= this.plugins.Count ? this.plugins[dlg.FilterIndex - 1] : null; + this.LoadFiles(plugin); + } + } + } + #endregion + + #region SetFileName() + private void SetFileName(string tvDataFile) + { + this.currentTvFile = tvDataFile; + if (!string.IsNullOrEmpty(tvDataFile)) + { + this.currentCsvFile = Path.Combine(Path.GetDirectoryName(this.currentTvFile), + Path.GetFileNameWithoutExtension(this.currentTvFile) + ".csv"); + } + this.Text = this.title + " - " + this.currentTvFile; + } + #endregion + + #region LoadFiles() + + private void LoadFiles(ISerializerPlugin plugin) + { + SerializerBase newSerializer = null; + bool dataUpdated = false; + try + { + if (plugin == null) + plugin = this.GetPluginForFile(this.currentTvFile); + // abort action if there is no currentTvSerializer for the input file + newSerializer = plugin == null ? null : plugin.CreateSerializer(this.currentTvFile); + if (newSerializer == null) + { + this.currentTvFile = this.currentTvSerializer == null ? string.Empty : this.currentTvSerializer.FileName; + return; + } + + if (!this.PromptSaveAndContinue()) + return; + + dataUpdated = true; + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + + this.currentPlugin = plugin; + this.currentTvSerializer = newSerializer; + this.currentTvSerializer.DefaultEncoding = this.defaultEncoding; + this.btnResetChannelData.Visible = newSerializer.SupportsEraseChannelData; + if (!this.LoadTvDataFile()) + return; + this.LoadCsvFile(); + + this.editor = new Editor(); + this.editor.DataRoot = this.dataRoot; + + this.currentChannelList = null; + this.editor.ChannelList = null; + this.gridInput.DataSource = null; + this.gridOutput.DataSource = null; + this.comboChannelList.Properties.Items.Clear(); + foreach (var list in this.dataRoot.ChannelLists) + this.comboChannelList.Properties.Items.Add(list); + this.comboChannelList.SelectedIndex = this.dataRoot.IsEmpty ? -1 : 0; + + this.SetControlsEnabled(!this.dataRoot.IsEmpty); + this.UpdateFavoritesEditor(this.dataRoot.SupportedFavorites); + this.colName.OptionsColumn.AllowEdit = this.currentTvSerializer.SupportsChannelNameEdit; + this.colOutName.OptionsColumn.AllowEdit = this.currentTvSerializer.SupportsChannelNameEdit; + + if (this.dataRoot.Warnings.Length > 0) + { + var lines = this.dataRoot.Warnings.ToString().Split('\n'); + Array.Sort(lines); + var sortedWarnings = String.Join("\n", lines); + InfoBox.Show(this, + Resources.MainForm_LoadFiles_ValidationWarningMsg + "\r\n\r\n" + sortedWarnings, + Resources.MainForm_LoadFiles_ValidationWarningCap); + } + } + catch (Exception ex) + { + if (ex.GetType() != typeof(Exception) && !(ex is IOException)) + throw; + string name = newSerializer != null ? newSerializer.DisplayName : plugin.PluginName; + XtraMessageBox.Show(this, name + "\n\n" + ex.Message, Resources.MainForm_LoadFiles_IOException, + MessageBoxButtons.OK, MessageBoxIcon.Error); + this.currentPlugin = null; + this.currentTvFile = null; + this.currentTvSerializer = null; + this.Text = this.title; + } + finally + { + if (dataUpdated) + { + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + } + } + #endregion + + #region UpdateFavoritesEditor() + private void UpdateFavoritesEditor(Favorites favorites) + { + this.repositoryItemCheckedComboBoxEdit1.Items.Clear(); + this.repositoryItemCheckedComboBoxEdit2.Items.Clear(); + byte mask = 0x01; + string regex = "["; + for (int bit=0; bit<8; bit++, mask<<=1) + { + if (((int) favorites & mask) != 0) + { + char c = (char) ('A' + bit); + this.repositoryItemCheckedComboBoxEdit1.Items.Add(c); + this.repositoryItemCheckedComboBoxEdit2.Items.Add(c); + regex += c; + } + } + regex += "]*"; + this.repositoryItemCheckedComboBoxEdit1.Mask.EditMask = regex; + this.repositoryItemCheckedComboBoxEdit2.Mask.EditMask = regex; + } + + #endregion + + #region GetTvFileSerializer() + private ISerializerPlugin GetPluginForFile(string inputFileName) + { + if (!File.Exists(inputFileName)) + { + XtraMessageBox.Show(this, String.Format(Resources.MainForm_LoadTll_SourceTllNotFound, inputFileName)); + return null; + } + string extension = (Path.GetExtension(inputFileName) ?? "").ToUpper(); + foreach (var plugin in this.plugins) + { + if ((plugin.FileFilter.ToUpper()+"|").Contains("*"+extension)) + return plugin; + } + + XtraMessageBox.Show(this, String.Format(Resources.MainForm_LoadTll_SerializerNotFound, inputFileName)); + return null; + } + #endregion + + #region LoadTvDataFile() + private bool LoadTvDataFile() + { + this.currentTvSerializer.Load(); + this.dataRoot = this.currentTvSerializer.DataRoot; + return true; + } + #endregion + + #region PromptSaveAndContinue() + private bool PromptSaveAndContinue() + { + if (this.dataRoot == null || !this.dataRoot.NeedsSaving) + return true; + + switch (XtraMessageBox.Show(this, + Resources.MainForm_PromptSaveAndContinue_Message, + Resources.MainForm_PromptSaveAndContinue_Caption, + MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, + MessageBoxDefaultButton.Button3)) + { + case DialogResult.Yes: this.SaveFiles(); break; + case DialogResult.No: break; + case DialogResult.Cancel: return false; + } + return true; + } + #endregion + + #region LoadCsvFile() + private void LoadCsvFile() + { + if (File.Exists(this.currentCsvFile)) + this.csvSerializer.Load(this.currentCsvFile, this.dataRoot); + else + { + foreach (var list in this.dataRoot.ChannelLists) + { + foreach (var channel in list.Channels) + channel.NewProgramNr = channel.OldProgramNr; + } + } + } + #endregion + + #region ShowOpenReferenceFileDialog() + private void ShowOpenReferenceFileDialog() + { + using (OpenFileDialog dlg = new OpenFileDialog()) + { + dlg.Title = Resources.MainForm_ShowOpenReferenceFileDialog_Title; + dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer); + dlg.AddExtension = true; + dlg.Filter = Resources.MainForm_ShowOpenReferenceFileDialog_Filter; + dlg.FilterIndex = 3; + dlg.CheckFileExists = true; + dlg.RestoreDirectory = true; + if (dlg.ShowDialog(this) == DialogResult.OK) + { + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + + string ext = (Path.GetExtension(dlg.FileName) ?? "").ToLower(); + if (ext == ".csv") + this.csvSerializer.Load(dlg.FileName, this.dataRoot); + else if (ext == ".chl") + { + ChlFileSerializer loader = new ChlFileSerializer(); + string warnings = loader.Load(dlg.FileName, this.dataRoot, this.currentChannelList); + InfoBox.Show(this, warnings, Path.GetFileName(dlg.FileName)); + } + + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + } + } + #endregion + + + #region ShowChannelList() + private void ShowChannelList(ChannelList channelList) + { + if (this.currentChannelList != null) + this.SaveInputGridLayout(this.currentChannelList.SignalSource); + if (channelList != null) + { + this.LoadInputGridLayout(channelList.SignalSource); + this.gridInput.DataSource = channelList.Channels; + this.gridOutput.DataSource = channelList.Channels; + } + else + { + this.gridInput.DataSource = null; + this.gridOutput.DataSource = null; + } + this.currentChannelList = channelList; + this.editor.ChannelList = channelList; + + if (gviewInput.IsValidRowHandle(0)) + { + this.gviewInput.FocusedRowHandle = 0; + this.gviewInput.SelectRow(0); + } + if (gviewOutput.IsValidRowHandle(0)) + { + this.gviewOutput.FocusedRowHandle = 0; + this.gviewOutput.SelectRow(0); + } + this.UpdateInsertSlotTextBox(); + } + #endregion + + #region ShowSaveFileDialog() + + private void ShowSaveFileDialog() + { + string extension = Path.GetExtension(this.currentTvSerializer.FileName) ?? "."; + using (SaveFileDialog dlg = new SaveFileDialog()) + { + dlg.FileName = this.currentTvFile; + dlg.AddExtension = true; + dlg.DefaultExt = extension; + dlg.Filter = string.Format(Resources.MainForm_FileDialog_SaveFileFilter, extension); + dlg.FilterIndex = 0; + dlg.ValidateNames = true; + dlg.RestoreDirectory = true; + dlg.OverwritePrompt = true; + if (dlg.ShowDialog() == DialogResult.OK) + { + this.SetFileName(dlg.FileName); + this.SaveFiles(); + } + } + } + + #endregion + + #region SaveFiles() + + private void SaveFiles() + { + this.gviewInput.PostEditor(); + this.gviewOutput.PostEditor(); + try + { + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + this.SaveReferenceFile(); + this.SaveTvDataFile(); + this.dataRoot.NeedsSaving = false; + } + catch (IOException ex) + { + XtraMessageBox.Show(this, + Resources.MainForm_SaveFiles_ErrorMsg + + ex.Message, + Resources.MainForm_SaveFiles_ErrorTitle, + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + } + + #endregion + + #region SaveReferenceFile() + + private void SaveReferenceFile() + { + this.csvSerializer.Save(this.currentCsvFile, this.dataRoot, UnsortedChannelMode.Hide); + } + + #endregion + + #region SaveTvDataFile() + + private void SaveTvDataFile() + { + this.splashScreenManager1.ShowWaitForm(); + try + { + // create backup file if none exists + if (File.Exists(currentTvFile)) + { + string bakFile = currentTvFile + ".bak"; + if (!File.Exists(bakFile)) + File.Copy(currentTvFile, bakFile); + } + this.currentTvSerializer.Save(this.currentTvFile, this.currentCsvFile, (UnsortedChannelMode)this.comboUnsortedAction.SelectedIndex); + } + finally + { + this.splashScreenManager1.CloseWaitForm(); + } + } + #endregion + + #region AddChannels() + private void AddChannels() + { + var selectedChannels = this.GetSelectedChannels(gviewInput); + if (selectedChannels.Count == 0) return; + + ChannelInfo lastInsertedChannel; + this.gviewOutput.BeginDataUpdate(); + this.gviewInput.BeginDataUpdate(); + try + { + lastInsertedChannel = this.editor.AddChannels(selectedChannels); + this.UpdateInsertSlotTextBox(); + } + finally + { + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + + if (lastInsertedChannel == null) + { + this.NavigateToChannel(selectedChannels[0], this.gviewOutput); + return; + } + + this.gviewOutput.BeginSelection(); + try + { + this.gviewOutput.ClearSelection(); + int index = this.currentChannelList.Channels.IndexOf(lastInsertedChannel); + int rowHandle = this.gviewOutput.GetRowHandle(index); + if (this.comboEditMode.SelectedIndex == (int)EditMode.InsertBefore) + ++rowHandle; + this.gviewOutput.FocusedRowHandle = rowHandle; + this.gviewOutput.SelectRow(rowHandle); + } + finally + { + this.gviewOutput.EndSelection(); + } + } + #endregion + + #region RemoveChannels() + + private void RemoveChannels() + { + var selectedChannels = this.GetSelectedChannels(this.lastFocusedGrid); + if (selectedChannels.Count == 0) return; + + int focusedRow = Math.Max(0, this.gviewOutput.FocusedRowHandle - selectedChannels.Count); + if (!gviewOutput.IsLastRow) + ++focusedRow; + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + try + { + this.editor.RemoveChannels(selectedChannels); + } + finally + { + this.gviewOutput.EndDataUpdate(); + this.gviewInput.EndDataUpdate(); + } + this.gviewOutput.FocusedRowHandle = focusedRow; + this.gviewOutput.SelectRow(focusedRow); + this.UpdateInsertSlotTextBox(); + } + + #endregion + + #region MoveChannels() + + private void MoveChannels(bool up) + { + var selectedChannels = this.GetSelectedChannels(this.gviewOutput); + if (selectedChannels.Count == 0) return; + + this.gviewOutput.BeginDataUpdate(); + try + { + this.editor.MoveChannels(selectedChannels, up); + } + finally + { + this.gviewOutput.EndDataUpdate(); + } + this.UpdateInsertSlotTextBox(); + } + + #endregion + + #region SetSlotNumber() + private bool SetSlotNumber(string slotNr) + { + int slot; + if (!int.TryParse(slotNr, out slot) || slot < 0) + return false; + var selectedChannels = this.GetSelectedChannels(this.lastFocusedGrid); + if (selectedChannels.Count == 0) return true; + this.gviewOutput.BeginDataUpdate(); + this.gviewInput.BeginDataUpdate(); + try + { + this.editor.SetSlotNumber(selectedChannels, slot, this.comboEditMode.SelectedIndex == (int)EditMode.Swap); + } + finally + { + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + return true; + } + #endregion + + #region SortSelectedChannels() + private void SortSelectedChannels() + { + var selectedChannels = this.GetSelectedChannels(this.gviewOutput); + if (selectedChannels.Count == 0) return; + this.gviewOutput.BeginDataUpdate(); + this.gviewInput.BeginDataUpdate(); + try + { + this.editor.SortSelectedChannels(selectedChannels); + } + finally + { + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + } + #endregion + + #region CloneChannelList() + private void CloneChannelList() + { + if (this.currentChannelList == null) return; + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + foreach (var channel in this.currentChannelList.Channels) + channel.NewProgramNr = channel.OldProgramNr; + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + #endregion + + #region RenumberSelectedChannels() + private void RenumberSelectedChannels() + { + var list = this.GetSelectedChannels(this.gviewOutput); + if (list.Count == 0) return; + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + this.editor.RenumberChannels(list); + this.gviewOutput.EndDataUpdate(); + this.gviewInput.EndDataUpdate(); + } + #endregion + + #region SwapChannels() + private void SwapChannels() + { + int oldMode = this.comboEditMode.SelectedIndex; + this.comboEditMode.SelectedIndex = (int)EditMode.Swap; + this.RemoveChannels(); + this.AddChannels(); + this.comboEditMode.SelectedIndex = oldMode; + } + #endregion + + #region GetSelectedChannels() + private List GetSelectedChannels(GridView gview) + { + var channels = new List(); + if (gview.IsDataRow(gview.FocusedRowHandle)) + gview.SelectRow(gview.FocusedRowHandle); + foreach (int rowHandle in gview.GetSelectedRows()) + { + if (gview.IsDataRow(rowHandle)) + channels.Add((ChannelInfo)gview.GetRow(rowHandle)); + } + return channels; + } + #endregion + + #region TryExecute() + + private void TryExecute(Action action) + { + try { action(); } + catch (Exception ex) { HandleException(ex); } + } + + #endregion + + #region HandleException() + public static void HandleException(Exception ex) + { + XtraMessageBox.Show(string.Format(Resources.MainForm_TryExecute_Exception, ex)); + } + #endregion + + #region LoadSettings() + private void LoadSettings() + { + // note: WindowSize must be restored in ctor in order to make WindowStartPosition.CenterScreen work + if (!string.IsNullOrEmpty(Settings.Default.Encoding)) + this.defaultEncoding = Encoding.GetEncoding(Settings.Default.Encoding); + this.SetFileName(Settings.Default.InputTLL); + int width = Settings.Default.LeftPanelWidth; + if (width > 0) + this.splitContainerControl1.SplitterPosition = width; + this.SelectLanguageMenuItem(); + + this.SetGridLayout(this.gviewOutput, Settings.Default.OutputListLayout); + this.gviewOutput.ClearSelection(); + if (this.gviewOutput.IsValidRowHandle(this.gviewOutput.FocusedRowHandle)) + this.gviewOutput.SelectRow(Settings.Default.OutputListRowHandle); + + this.ClearLeftFilter(); + } + #endregion + + #region SelectLanguageMenuItem() + private void SelectLanguageMenuItem() + { + this.barManager1.ForceLinkCreate(); + foreach (BarItemLink itemLink in this.barSubItem1.ItemLinks) + { + if (Settings.Default.Language.StartsWith((string) itemLink.Item.Tag)) + { + this.ignoreLanguageChange = true; + ((BarButtonItem) itemLink.Item).Down = true; + this.ignoreLanguageChange = false; + break; + } + } + } + #endregion + + #region SetGridLayout() + private void SetGridLayout(GridView grid, string layout) + { + if (string.IsNullOrEmpty(layout)) return; + MemoryStream stream = new MemoryStream(); + using (StreamWriter wrt = new StreamWriter(stream)) + { + wrt.Write(layout); + wrt.Flush(); + stream.Seek(0, SeekOrigin.Begin); + grid.RestoreLayoutFromStream(stream); + } + + // put the filter text back into the auto-filter-row + foreach (GridColumn col in grid.Columns) + { + string[] parts = (col.FilterInfo.FilterString ?? "").Split('\''); + if (parts.Length >= 2) + this.gviewInput.SetRowCellValue(GridControl.AutoFilterRowHandle, col, parts[1]); + } + } + #endregion + + #region SaveSettings(), GetGridLayout() + private void SaveSettings() + { + this.gviewInput.PostEditor(); + this.gviewOutput.PostEditor(); + + Settings.Default.WindowSize = this.WindowState == FormWindowState.Normal ? this.Size : this.RestoreBounds.Size; + Settings.Default.Encoding = this.defaultEncoding.WebName; + Settings.Default.Language = Thread.CurrentThread.CurrentUICulture.Name; + Settings.Default.InputTLL = this.currentTvFile; + Settings.Default.LeftPanelWidth = this.splitContainerControl1.SplitterPosition; + Settings.Default.OutputListLayout = GetGridLayout(this.gviewOutput); + if (this.currentChannelList != null) + SaveInputGridLayout(this.currentChannelList.SignalSource); + Settings.Default.Save(); + } + + private string GetGridLayout(GridView grid) + { + MemoryStream stream = new MemoryStream(); + grid.SaveLayoutToStream(stream, OptionsLayoutBase.FullLayout); + stream.Seek(0, SeekOrigin.Begin); + using (StreamReader rdr = new StreamReader(stream, Encoding.UTF8)) + return rdr.ReadToEnd(); + } + + #endregion + + #region UpdateInsertSlotTextBox() + private void UpdateInsertSlotTextBox() + { + int programNr = this.currentChannelList == null ? 0 : this.currentChannelList.InsertProgramNumber; + this.txtSetSlot.Text = programNr.ToString(); + } + #endregion + + #region FillMenuWithIsoEncodings() + private void FillMenuWithIsoEncodings() + { + this.miIsoCharSets.Strings.Clear(); + this.isoEncodings.Clear(); + foreach(var encoding in Encoding.GetEncodings()) + { + if (!encoding.Name.StartsWith("iso")) + continue; + this.miIsoCharSets.Strings.Add(encoding.DisplayName); + this.isoEncodings.Add(encoding.Name); + } + } + #endregion + + #region ShowCharsetForm() + private void ShowCharsetForm() + { + using (var form = new CharsetForm(this.defaultEncoding)) + { + form.Location = new Point(this.Location.X + 30, this.Location.Y + 70); + form.EncodingChanged += this.charsetForm_EncodingChanged; + form.ShowDialog(this); + } + } + #endregion + + #region SetDefaultEncoding() + private void SetDefaultEncoding(Encoding encoding) + { + this.defaultEncoding = encoding; + if (this.currentTvSerializer == null) + return; + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + this.currentTvSerializer.DefaultEncoding = encoding; + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + #endregion + + #region ClearLeftFilter(), ClearRightFilter() + private void ClearLeftFilter() + { + this.gviewOutput.BeginSort(); + this.gviewOutput.ClearColumnsFilter(); + this.colOutSlot.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>0"); + this.gviewOutput.EndSort(); + } + + private void ClearRightFilter() + { + this.gviewInput.BeginSort(); + this.gviewInput.ClearColumnsFilter(); + this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>0"); + this.gviewInput.EndSort(); + } + #endregion + + #region SyncLists() + private void SyncLists(GridView source, GridView target) + { + var channel = (ChannelInfo)source.GetFocusedRow(); + if (channel == null) + return; + target.SetRowCellValue(GridControl.AutoFilterRowHandle, colName, channel.Name); + target.BeginSelection(); + target.ClearSelection(); + int rowIndex = ((IList) target.DataSource).IndexOf(channel); + int rowHandle = target.GetRowHandle(rowIndex); + target.FocusedRowHandle = rowHandle; + target.SelectRow(rowHandle); + target.EndSelection(); + } + #endregion + + #region LoadInputGridLayout() + private void LoadInputGridLayout(SignalSource newSource) + { + string newLayout; + if ((newSource & SignalSource.Digital) == 0) + newLayout = Settings.Default.InputGridLayoutAnalog; + else if (newSource == SignalSource.DvbS) + newLayout = Settings.Default.InputGridLayoutDvbS; + else + newLayout = Settings.Default.InputGridLayoutDvbCT; + if (!string.IsNullOrEmpty(newLayout)) + this.SetGridLayout(this.gviewInput, newLayout); + + foreach (GridColumn col in this.gviewInput.Columns) + col.Visible = GetGridColumnVisibility(col, newSource); + + this.gviewInput.ClearSelection(); + if (this.gviewInput.IsValidRowHandle(this.gviewInput.FocusedRowHandle)) + this.gviewInput.SelectRow(Settings.Default.InputListRowHandle); + + this.ClearRightFilter(); + } + #endregion + + #region SaveInputGridLayout() + private void SaveInputGridLayout(SignalSource signalSource) + { + string currentLayout = GetGridLayout(this.gviewInput); + switch (signalSource) + { + case SignalSource.Analog: Settings.Default.InputGridLayoutAnalog = currentLayout; break; + case SignalSource.DvbCT: Settings.Default.InputGridLayoutDvbCT = currentLayout; break; + case SignalSource.DvbS: Settings.Default.InputGridLayoutDvbS = currentLayout; break; + } + } + #endregion + + #region GetGridColumnVisibility() + + private bool GetGridColumnVisibility(GridColumn col, SignalSource source) + { + if (col == this.colShortName) return (source & SignalSource.Digital) != 0; + if (col == this.colEncrypted) return (source & SignalSource.Digital) != 0; + if (col == this.colServiceId) return (source & SignalSource.Digital) != 0; + if (col == this.colVideoPid) return (source & SignalSource.Digital) != 0; + if (col == this.colAudioPid) return (source & SignalSource.Digital) != 0; + if (col == this.colServiceType) return (source & SignalSource.Digital) != 0; + if (col == this.colServiceTypeName) return (source & SignalSource.Digital) != 0; + if (col == this.colEncrypted) return (source & SignalSource.Digital) != 0; + if (col == this.colTransportStreamId) return (source & SignalSource.Digital) != 0; + if (col == this.colNetworkName) return (source & SignalSource.Digital) != 0; + if (col == this.colNetworkOperator) return (source & SignalSource.Digital) != 0; + if (col == this.colSatellite) return (source & SignalSource.Sat) != 0; + if (col == this.colNetworkId) return (source & SignalSource.Digital) != 0; + if (col == this.colSymbolRate) return (source & SignalSource.Sat) != 0; + if (col == this.colIndex) return col.Visible; + if (col == this.colUid) return col.Visible; + if (col == this.colDebug) return colDebug.Visible; + if (col == this.colLogicalIndex) return colLogicalIndex.Visible; + if (col == this.colPolarity) return false; + + return true; + } + + #endregion + + #region SetFavorite() + private void SetFavorite(string fav, bool set) + { + if (string.IsNullOrEmpty(fav)) return; + char ch = Char.ToUpper(fav[0]); + if (ch<'A' || ch>'D') return; + var list = this.GetSelectedChannels(this.lastFocusedGrid); + if (list.Count == 0) return; + + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + Favorites mask = (Favorites)(1 << (ch - 'A')); + foreach(var channel in list) + { + if (set) + channel.Favorites |= mask; + else + channel.Favorites &= ~mask; + } + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + } + #endregion + + #region SetChannelFlag() + private void SetChannelFlag(Action setFlag) + { + var list = this.GetSelectedChannels(this.lastFocusedGrid); + if (list.Count == 0) return; + + this.gviewInput.BeginDataUpdate(); + this.gviewOutput.BeginDataUpdate(); + foreach (var channel in list) + setFlag(channel); + this.gviewInput.EndDataUpdate(); + this.gviewOutput.EndDataUpdate(); + this.dataRoot.NeedsSaving = true; + } + #endregion + + #region NavigateToChannel + private void NavigateToChannel(ChannelInfo channel, GridView view) + { + if (channel == null) return; + int rowHandle = this.gviewInput.GetRowHandle(this.currentChannelList.Channels.IndexOf(channel)); + if (view.IsValidRowHandle(rowHandle)) + { + view.ClearSelection(); + view.FocusedRowHandle = rowHandle; + view.SelectRow(rowHandle); + view.MakeRowVisible(rowHandle); + } + } + #endregion + + #region UpdateMenu + private void UpdateMenu() + { + bool isRight = this.lastFocusedGrid == this.gviewInput; + this.miAddChannel.Enabled = isRight; + + var visRight = isRight ? BarItemVisibility.Always : BarItemVisibility.Never; + var visLeft = isRight ? BarItemVisibility.Never : BarItemVisibility.Always; + + this.miSort.Visibility = visLeft; + this.miRenum.Visibility = visLeft; + this.miMoveUp.Visibility = visLeft; + this.miMoveDown.Visibility = visLeft; + this.miRemove.Visibility = visLeft; + this.miAddChannel.Visibility = visRight; + + var sel = this.gviewOutput.GetSelectedRows(); + var channel = sel.Length == 0 ? null : (ChannelInfo) this.gviewInput.GetRow(sel[0]); + this.miMoveUp.Enabled = channel != null && channel.NewProgramNr > 1; + + this.miTvSettings.Enabled = this.currentTvSerializer != null; + } + #endregion + + #region RestoreBackupFile() + private void RestoreBackupFile() + { + var bakFile = this.currentTvFile + ".bak"; + if (!File.Exists(bakFile)) + { + XtraMessageBox.Show(this, string.Format(Resources.MainForm_miRestoreOriginal_ItemClick_NoBackup, bakFile), + this.miRestoreOriginal.Caption, + MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + return; + } + + if (XtraMessageBox.Show(this, + Resources.MainForm_miRestoreOriginal_ItemClick_Confirm, + this.miRestoreOriginal.Caption, + MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) != + DialogResult.Yes) + { + return; + } + + try + { + File.Copy(bakFile, this.currentTvFile, true); + if (this.currentPlugin != null) + this.LoadFiles(this.currentPlugin); + } + catch (Exception) + { + XtraMessageBox.Show(this, string.Format(Resources.MainForm_miRestoreOriginal_Message, this.currentTvFile), + this.miRestoreOriginal.Caption, + MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + } + } + #endregion + + #region ShowFileInformation() + private void ShowFileInformation() + { + if (this.currentTvSerializer == null) + return; + var info = this.currentTvSerializer.GetFileInformation(); + InfoBox.Show(this, info, this.miFileInformation.Caption.Replace("...", "").Replace("&","")); + } + #endregion + + #region VerifyChannelNameModified() + private void VerifyChannelNameModified(ChannelInfo info, string newName) + { + if (newName != info.Name) + info.IsNameModified = true; + } + #endregion + + #region ShowTvCountrySettings() + private void ShowTvCountrySettings() + { + if (this.currentTvSerializer != null) + this.currentTvSerializer.ShowDeviceSettingsForm(this); + } + #endregion + + // UI events + + #region MainForm_Load + private void MainForm_Load(object sender, EventArgs e) + { + TryExecute(this.LoadSettings); + } + #endregion + + #region MainForm_Shown + private void MainForm_Shown(object sender, EventArgs e) + { + try + { + if (this.currentTvFile != "" && File.Exists(this.currentTvFile)) + this.LoadFiles(null); + } + catch (Exception ex) { HandleException(ex); } + } + #endregion + + // -- menus + + #region File menu + + private void miOpen_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(this.ShowOpenFileDialog); + } + + private void miOpenReferenceFile_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(this.ShowOpenReferenceFileDialog); + } + + private void miReload_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(() => this.LoadFiles(this.currentPlugin)); + } + + private void miRestoreOriginal_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(this.RestoreBackupFile); + } + + private void miFileInformation_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(this.ShowFileInformation); + } + + private void miSave_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(this.SaveFiles); + } + + private void miSaveAs_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(this.ShowSaveFileDialog); + } + + private void miQuit_ItemClick(object sender, ItemClickEventArgs e) + { + this.Close(); + } + + #endregion + + #region Edit menu + + private void miMoveDown_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.MoveChannels(false)); + } + + private void miMoveUp_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.MoveChannels(true)); + } + + private void miRemove_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(this.RemoveChannels); + } + + private void miReplace_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(this.SwapChannels); + } + + private void miFavSet_ListItemClick(object sender, ListItemClickEventArgs e) + { + this.TryExecute(() => this.SetFavorite(this.miFavSet.Strings[e.Index], true)); + } + + private void miFavUnset_ListItemClick(object sender, ListItemClickEventArgs e) + { + this.TryExecute(() => this.SetFavorite(this.miFavSet.Strings[e.Index], false)); + } + + private void miLockOn_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.SetChannelFlag(ch => ch.Lock = true)); + } + + private void miLockOff_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.SetChannelFlag(ch => ch.Lock = false)); + } + + private void miSkipOn_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.SetChannelFlag(ch => ch.Skip = true)); + } + + private void miSkipOff_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.SetChannelFlag(ch => ch.Skip = false)); + } + + private void miHideOn_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.SetChannelFlag(ch => ch.Hidden = true)); + } + + private void miHideOff_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(() => this.SetChannelFlag(ch => ch.Hidden = false)); + } + #endregion + + #region Language menu + private void miLanguage_DownChanged(object sender, ItemClickEventArgs e) + { + try + { + if (this.ignoreLanguageChange) + return; + BarButtonItem menuItem = (BarButtonItem)sender; + if (!menuItem.Down) + return; + if (!this.PromptSaveAndContinue()) + return; + string locale = (string)menuItem.Tag; + Program.ChangeLanguage = true; + Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale); + this.Close(); + } + catch (Exception ex) { HandleException(ex); } + } + #endregion + + #region TV-Set menu + private void miTvCountrySetup_ItemClick(object sender, ItemClickEventArgs e) + { + this.TryExecute(this.ShowTvCountrySettings); + } + #endregion + + #region Character set menu + + private void miIsoCharSets_ListItemClick(object sender, ListItemClickEventArgs e) + { + TryExecute(() => this.SetDefaultEncoding(Encoding.GetEncoding(this.isoEncodings[e.Index]))); + } + + private void miCharset_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(ShowCharsetForm); + } + + private void charsetForm_EncodingChanged(object sender, EncodingChangedEventArgs e) + { + SetDefaultEncoding(e.Encoding); + } + #endregion + + #region miAbout_ItemClick + private void miAbout_ItemClick(object sender, ItemClickEventArgs e) + { + TryExecute(() => new AboutForm(this.plugins).ShowDialog()); + } + #endregion + + // -- controls + + #region comboChannelList_SelectedIndexChanged + private void comboChannelList_SelectedIndexChanged(object sender, EventArgs e) + { + this.TryExecute(() => ShowChannelList((ChannelList) this.comboChannelList.SelectedItem)); + } + #endregion + + #region gview_MouseDown + private void gview_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + GridView view = (GridView)sender; + var hit = view.CalcHitInfo(e.Location); + if (view.IsDataRow(hit.RowHandle) && !view.IsRowSelected(hit.RowHandle)) + { + view.ClearSelection(); + view.SelectRow(hit.RowHandle); + } + } + } + #endregion + + #region gviewOutput_LayoutUpgrade, gviewInput_LayoutUpgrade + private void gviewOutput_LayoutUpgrade(object sender, LayoutUpgadeEventArgs e) + { + this.gviewOutput.ClearGrouping(); + this.gviewOutput.OptionsCustomization.AllowGroup = false; + } + + private void gviewInput_LayoutUpgrade(object sender, LayoutUpgadeEventArgs e) + { + this.gviewInput.ClearGrouping(); + this.gviewInput.OptionsCustomization.AllowGroup = false; + } + #endregion + + #region gridInput_Enter, gridOutput_Enter + private void gridInput_Enter(object sender, EventArgs e) + { + this.lastFocusedGrid = this.gviewInput; + this.UpdateMenu(); + } + + private void gridOutput_Enter(object sender, EventArgs e) + { + this.lastFocusedGrid = this.gviewOutput; + this.UpdateMenu(); + } + #endregion + + #region gviewInput_FocusedRowChanged + private void gviewInput_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) + { + if (!this.gviewInput.IsRowSelected(e.FocusedRowHandle)) + this.gviewInput.SelectRow(e.FocusedRowHandle); + } + #endregion + + #region gviewInput_CustomColumnDisplayText + private void gviewInput_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) + { + if (e.Column == this.colSlotNew) + { + if (!(e.Value is int)) return; + if ((int) e.Value == 0) + e.DisplayText = string.Empty; + } + else if (e.Column == this.colFavorites) + { + if (!(e.Value is Favorites)) return; + if ((Favorites) e.Value == 0) + e.DisplayText = string.Empty; + } + } + #endregion + + #region gviewInput_RowCellStyle + private void gviewInput_RowCellStyle(object sender, RowCellStyleEventArgs e) + { + ChannelInfo channel = (ChannelInfo)this.gviewInput.GetRow(e.RowHandle); + if (channel == null) return; + if (channel.OldProgramNr == 0) + { + e.Appearance.ForeColor = Color.Red; + e.Appearance.Options.UseForeColor = true; + } + else if (channel.NewProgramNr != 0) + { + e.Appearance.ForeColor = Color.Gray; + e.Appearance.Options.UseForeColor = true; + } + } + #endregion + + #region gviewInput_RowClick + private void gviewInput_RowClick(object sender, RowClickEventArgs e) + { + if (e.Clicks == 2 && e.Button == MouseButtons.Left && this.gviewInput.IsDataRow(e.RowHandle)) + TryExecute(this.AddChannels); + } + #endregion + + #region gridInput_ProcessGridKey + private void gridInput_ProcessGridKey(object sender, KeyEventArgs e) + { + if (this.gviewInput.ActiveEditor != null) + return; + if (e.KeyCode == Keys.Enter) + { + TryExecute(this.AddChannels); + e.Handled = true; + } + } + + #endregion + + #region gviewInput_ValidatingEditor + private void gviewInput_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) + { + try + { + if (gviewInput.FocusedRowHandle == GridControl.AutoFilterRowHandle) + return; + if (this.gviewInput.FocusedColumn == this.colSlotNew && e.Value is string) + e.Valid = this.SetSlotNumber((string)e.Value); + else if (this.gviewInput.FocusedColumn == this.colFavorites && e.Value is string) + e.Value = ChannelInfo.ParseFavString((string)e.Value); + else if (gviewInput.FocusedColumn == this.colName) + this.VerifyChannelNameModified(this.gviewInput.GetFocusedRow() as ChannelInfo, e.Value as string); + dataRoot.NeedsSaving = true; + } catch(Exception ex) { HandleException(ex); } + } + #endregion + + #region gviewInput_PopupMenuShowing + private void gviewInput_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) + { + this.lastFocusedGrid = this.gviewInput; + this.UpdateMenu(); + if (e.MenuType == GridMenuType.Row) + this.mnuContext.ShowPopup(this.gridInput.PointToScreen(e.Point)); + } + #endregion + + #region gviewOutput_FocusedRowChanged + + private void gviewOutput_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) + { + var channel = (ChannelInfo)this.gviewOutput.GetRow(e.FocusedRowHandle); + if (channel == null) + return; + int programNr = channel.NewProgramNr; + if (this.comboEditMode.SelectedIndex == (int)EditMode.InsertAfter) + ++programNr; + if (this.currentChannelList != null) + this.currentChannelList.InsertProgramNumber = programNr; + this.UpdateInsertSlotTextBox(); + if (!this.gviewOutput.IsRowSelected(e.FocusedRowHandle)) + this.gviewOutput.SelectRow(e.FocusedRowHandle); + } + + #endregion + + #region gviewOutput_CustomColumnDisplayText + private void gviewOutput_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) + { + if (e.Column == this.colOutFav) + { + if (!(e.Value is Favorites)) return; + if ((Favorites)e.Value == 0) + e.DisplayText = string.Empty; + } + } + #endregion + + #region gviewOutput_RowCellStyle + private void gviewOutput_RowCellStyle(object sender, RowCellStyleEventArgs e) + { + var channel = (ChannelInfo)this.gviewOutput.GetRow(e.RowHandle); + if (channel == null) return; + if (channel.OldProgramNr == 0) + { + e.Appearance.ForeColor = Color.Red; + e.Appearance.Options.UseForeColor = true; + } + } + #endregion + + #region gviewOutput_ValidatingEditor + private void gviewOutput_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e) + { + try + { + if (gviewOutput.FocusedRowHandle == GridControl.AutoFilterRowHandle) + return; + if (this.gviewOutput.FocusedColumn == this.colOutSlot && e.Value is string) + e.Valid = this.SetSlotNumber((string)e.Value); + else if (this.gviewOutput.FocusedColumn == this.colOutFav && e.Value is string) + e.Value = ChannelInfo.ParseFavString((string) e.Value); + else if (gviewOutput.FocusedColumn == this.colOutName) + this.VerifyChannelNameModified(this.gviewOutput.GetFocusedRow() as ChannelInfo, e.Value as string); + dataRoot.NeedsSaving = true; + } + catch (Exception ex) { HandleException(ex); } + } + #endregion + + #region gviewOutput_CellValueChanged + private void gviewOutput_CellValueChanged(object sender, CellValueChangedEventArgs e) + { + this.gviewInput.BeginDataUpdate(); + this.gviewInput.EndDataUpdate(); + } + #endregion + + #region gviewOutput_PopupMenuShowing + private void gviewOutput_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) + { + this.lastFocusedGrid = this.gviewOutput; + this.UpdateMenu(); + if (e.MenuType == GridMenuType.Row) + this.mnuContext.ShowPopup(this.gridOutput.PointToScreen(e.Point)); + } + #endregion + + #region gviewOutput_RowClick + private void gviewOutput_RowClick(object sender, RowClickEventArgs e) + { + if (e.Clicks == 2 && e.Button == MouseButtons.Left && this.gviewOutput.IsDataRow(e.RowHandle)) + { + ChannelInfo channel = (ChannelInfo) this.gviewOutput.GetRow(e.RowHandle); + this.NavigateToChannel(channel, this.gviewInput); + } + } + #endregion + + #region gridOutput_ProcessGridKey + private void gridOutput_ProcessGridKey(object sender, KeyEventArgs e) + { + if (gviewOutput.ActiveEditor != null) + return; + if (e.KeyCode == Keys.Delete) + TryExecute(this.RemoveChannels); + else if (e.KeyCode == Keys.Add) + TryExecute(() => this.MoveChannels(false)); + else if (e.KeyCode == Keys.Subtract) + TryExecute(() => this.MoveChannels(true)); + else + return; + e.Handled = true; + } + #endregion + + #region comboEditMode_SelectedIndexChanged + private void comboEditMode_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + if (this.currentChannelList == null) + return; + int delta = this.curEditMode == EditMode.InsertAfter ? -1 : + (EditMode)this.comboEditMode.SelectedIndex == EditMode.InsertAfter ? +1 : 0; + this.currentChannelList.InsertProgramNumber += delta; + this.UpdateInsertSlotTextBox(); + this.curEditMode = (EditMode) this.comboEditMode.SelectedIndex; + } catch(Exception ex) { HandleException(ex); } + } + #endregion + + #region btnClearLeftFilter_Click, btnClearRightFilter_Click + private void btnClearLeftFilter_Click(object sender, EventArgs e) + { + TryExecute(this.ClearLeftFilter); + } + + private void btnClearRightFilter_Click(object sender, EventArgs e) + { + TryExecute(this.ClearRightFilter); + } + #endregion + + #region btnSyncFromLeft_Click, btnSyncFromRight_Click + private void btnSyncFromLeft_Click(object sender, EventArgs e) + { + TryExecute(() => this.SyncLists(this.gviewOutput, this.gviewInput)); + } + + private void btnSyncFromRight_Click(object sender, EventArgs e) + { + TryExecute(() => this.SyncLists(this.gviewInput, this.gviewOutput)); + } + #endregion + + #region btnAdd_Click + + private void btnAdd_Click(object sender, EventArgs e) + { + TryExecute(this.AddChannels); + } + #endregion + + #region btnRemove_Click + + private void btnRemove_Click(object sender, EventArgs e) + { + TryExecute(this.RemoveChannels); + } + #endregion + + #region btnUp_Click, btnDown_Click + + private void btnUp_Click(object sender, EventArgs e) + { + TryExecute(() => MoveChannels(true)); + } + + private void btnDown_Click(object sender, EventArgs e) + { + TryExecute(() => MoveChannels(false)); + } + + #endregion + + #region txtSetSlot_EditValueChanged + private void txtSetSlot_EditValueChanged(object sender, EventArgs e) + { + TryExecute(() => + { + int nr; + int.TryParse(this.txtSetSlot.Text, out nr); + if (this.currentChannelList != null) + this.currentChannelList.InsertProgramNumber = nr; + }); + } + #endregion + + #region txtSetSlot_ButtonClick, txtSetSlot_KeyDown + private void txtSetSlot_ButtonClick(object sender, ButtonPressedEventArgs e) + { + TryExecute(() => this.SetSlotNumber(this.txtSetSlot.Text)); + } + + private void txtSetSlot_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Enter) + { + TryExecute(() => this.SetSlotNumber(this.txtSetSlot.Text)); + e.Handled = true; + } + } + #endregion + + #region btnSort_Click + private void btnSort_Click(object sender, EventArgs e) + { + TryExecute(this.SortSelectedChannels); + } + #endregion + + #region btnRenum_Click + private void btnRenum_Click(object sender, EventArgs e) + { + TryExecute(this.RenumberSelectedChannels); + } + #endregion + + #region ProcessCmdKey + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + switch (keyData) + { + case Keys.F3: + this.gviewOutput.FocusedRowHandle = GridControl.AutoFilterRowHandle; + this.gviewOutput.FocusedColumn = this.colOutName; + this.gridOutput.Focus(); + return true; + case Keys.F4: + if (this.gviewOutput.SelectedRowsCount > 0) + { + this.gviewOutput.FocusedRowHandle = this.gviewOutput.GetSelectedRows()[0]; + this.gridOutput.Focus(); + } + return true; + case Keys.F5: + this.gviewInput.FocusedRowHandle = GridControl.AutoFilterRowHandle; + this.gviewInput.FocusedColumn = this.colName; + this.gridInput.Focus(); + return true; + case Keys.F6: + if (this.gviewInput.SelectedRowsCount > 0) + { + this.gviewInput.FocusedRowHandle = this.gviewInput.GetSelectedRows()[0]; + this.gridInput.Focus(); + } + return true; + } + return base.ProcessCmdKey(ref msg, keyData); + } + + #endregion + + #region MainForm_FormClosing + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (this.PromptSaveAndContinue()) + this.SaveSettings(); + else + e.Cancel = true; + } + #endregion + + #region btnResetChannelData_Click + private void btnResetChannelData_Click(object sender, EventArgs e) + { + if (this.currentTvSerializer == null) + return; + + if (XtraMessageBox.Show(this, + Resources.MainForm_btnResetChannelData_Click_Message, + Resources.MainForm_btnResetChannelData_Click_Caption, + MessageBoxButtons.YesNo, + MessageBoxIcon.Warning, + MessageBoxDefaultButton.Button2) != DialogResult.Yes) + { + return; + } + + TryExecute(() => + { + this.currentTvSerializer.EraseChannelData(); + this.LoadFiles(this.currentPlugin); + }); + } + #endregion + + #region btnCloneChannelList_Click + private void btnCloneChannelList_Click(object sender, EventArgs e) + { + this.TryExecute(this.CloneChannelList); + } + #endregion + + private void gviewOutput_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) + { + this.UpdateMenu(); + } + + private void gviewInput_CellValueChanged(object sender, CellValueChangedEventArgs e) + { + + } + + } +} diff --git a/ChanSort.Ui/MainForm.de.resx b/ChanSort.Ui/MainForm.de.resx new file mode 100644 index 0000000..6ffc157 --- /dev/null +++ b/ChanSort.Ui/MainForm.de.resx @@ -0,0 +1,693 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + + + + + + Default + + + + Top, Left + + + + + + Tile + + + Inherit + + + + Center + + + + + + + None + + + + + + + Horizontal + + + + + + Neue Pr# + + + Neuer Programmplatz + + + Sendername + + + Favoriten + + + Default + + + + False + + + True + + + _ + + + True + + + True + + + False + + + 333, 17 + + + F3: Filter | F4: Liste | -: nach oben | +: nach unten | Entf: entfernen + + + Dahinter einfügen + + + &Datei + + + TV Senderliste &öffnen... + + + &Erneut laden + + + Sicherheitskopie wiederherstellen + + + Datei&information... + + + &Speichern + + + Speichern &unter... + + + Referenzliste öffnen... + + + &Beenden + + + &Bearbeiten + + + Sender &übernehmen + + + Sender &entfernen + + + Sender erset&zen + + + Sender alphabetisch sortieren + + + Sender neu &nummerieren + + + &Favoriten hinzufügen + + + Favoriten entfernen + + + Sender s&perren: ein + + + Sender sperren: aus + + + Sender ü&berspringen: ein + + + Sender überspringen: aus + + + Sender &verstecken: ein + + + Sender verstecken: aus + + + TV-Gerät + + + Geräteeinstellungen... + + + &Einstellungen + + + &Sprache + + + &Zeichensatz + + + &Hilfe + + + &Über ChanSort... + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC + X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe + Xxl+0wEL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC + X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw + KphCYAEL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC + X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu + ZMgcwAEL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC + X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc + WIeWYGkVXQEL + + + + Horizontal + + + + + + Horizontal + + + + + + Horizontal + + + + + + Horizontal + + + + + + In bestehender Reihenfolge am Ende anhängen + + + + + + + + + True + + + In bestehender Reihenfolge am Ende anhängen + + + In alphabetischer Reihenfolge am Ende anhängen + + + Löschen + + + + + + False + + + 262, 20 + + + + + + Horizontal + + + + + + + + + + + + Nicht explizit sortierte Sender: + + + Senderlisten vollständig löschen + + + + + + + + + True + + + + + + False + + + 57, 13 + + + Senderliste: + + + ChanSort v2013-03-30 - Senderlisten Editor für LG und Samsung TV + + + Nach oben + + + Nach unten + + + + + + + + + True + + + Davor einfügen + + + Dahinter einfügen + + + Austauschen + + + + + + False + + + Nach aktuellem Sender in rechtem Fenster filtern + + + 35, 13 + + + Modus: + + + Horizontal + + + + + + Filter zurücksetzen + + + Markierte Sender neu nummerieren + + + Markierte Sender alphabetisch sortieren + + + Markierte Sender nach unten verschieben + + + Markierte Sender nach oben verschieben + + + Markierte Sender entfernen + + + + + + + + + True + + + Default + + + False + + + True + + + _ + + + True + + + True + + + False + + + + + + False + + + Setze Pr#: + + + Programplatz für Einfügen und Festlegen + + + Sortierte Sender (.csv) + + + + + + + + + Default + + + Top, Left + + + + + + Tile + + + Inherit + + + Center + + + + + + None + + + + + + Horizontal + + + + + + Alte Pr# + + + Alter Programmplatz + + + Neue Pr# + + + Neuer Programmplatz + + + Sendername + + + Kurzname + + + Favoriten + + + Default + + + False + + + True + + + _ + + + True + + + True + + + False + + + Ge- sperrt + + + Über- springen + + + Ver- steckt + + + Ver- schlüss + + + Verschlüsselt + + + Kanal/ Transp. + + + Kanal- bzw. Transpondernummer + + + Freqenz (MHz) + + + Satellit + + + Symbol- rate + + + Polarität + + + Netzwerk Name + + + Netzwerk Betreiber + + + 213, 17 + + + F5: Filter | F6: Liste | Eingabe: übernehmen + + + << Alle hinzufügen (aktuelle Senderliste kopieren) + + + Horizontal + + + + + + Filter zurücksetzen + + + Nach aktuellem Sender in linkem Fenster filtern + + + Markierte Sender übernehmen + + + Alle Sender + + \ No newline at end of file diff --git a/ChanSort.Ui/MainForm.resx b/ChanSort.Ui/MainForm.resx new file mode 100644 index 0000000..bbb1eff --- /dev/null +++ b/ChanSort.Ui/MainForm.resx @@ -0,0 +1,2375 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Fill + + + + 0, 59 + + + 361, 17 + + + Fill + + + 2, 85 + + + Pr. index + + + New Pr# + + + New program number + + + + True + + + 0 + + + 50 + + + Channel name + + + True + + + 1 + + + 180 + + + Favorites + + + False + + + + Combo + + + + + + + + RegEx + + + True + + + 2 + + + 55 + + + UID + + + 332, 436 + + + 1 + + + gridOutput + + + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpOutputList + + + 0 + + + Bottom + + + 2, 521 + + + 2, 2, 2, 2 + + + 302, 17 + + + 2 + + + F3: Filter | F4: List | -: move up | +: move down | Del: remove + + + lblHotkeyLeft + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpOutputList + + + 1 + + + Insert after + + + 213, 7 + + + 475, 17 + + + &File + + + &Open TV data file... + + + &Reload + + + Restore backup + + + File &information... + + + &Save + + + Save &as... + + + Import reference list... + + + &Quit + + + &Edit + + + &Add channels + + + &Remove channels + + + Re&place channel + + + Sor&t channels alphabetically + + + Re&number channels + + + Add to &Favorites + + + Favoriten setzen + + + Remove from Favorites + + + Favoriten entfernen + + + &Lock channel: on + + + Lock channel: off + + + &Skip channel: on + + + Skip channel: off + + + &Hide channel: on + + + Hide channel: off + + + TV-Set + + + Device setting... + + + &Settings + + + &Language + + + &English + + + &Deutsch + + + &Character set + + + Alle &Zeichensätze... + + + ISO Zeichensätze + + + &Help + + + &About ChanSort... + + + Tools + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC + X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe + Xxl+0wEL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC + X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw + KphCYAEL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC + X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu + ZMgcwAEL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy + LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li + bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC + X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc + WIeWYGkVXQEL + + + + Top + + + 0, 0 + + + 1474, 25 + + + barDockControlTop + + + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 5 + + + Bottom + + + 0, 599 + + + 1474, 0 + + + barDockControlBottom + + + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 4 + + + Left + + + 0, 25 + + + 0, 574 + + + barDockControlLeft + + + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 2 + + + Right + + + 1474, 25 + + + 0, 574 + + + barDockControlRight + + + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 3 + + + True + + + 6, 13 + + + 1474, 599 + + + Delete + + + 511, 7 + + + Combo + + + Append at end in current order + + + Append at end in alphabetical order + + + Delete (=set to Pr# 0) + + + 250, 20 + + + 4 + + + comboUnsortedAction + + + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpTopPanel + + + 0 + + + Vertical + + + 316, 10 + + + 189, 13 + + + 3 + + + Channels not sorted explicitly: + + + labelControl3 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpTopPanel + + + 1 + + + 784, 6 + + + 170, 23 + + + 2 + + + Erase all channel data + + + btnResetChannelData + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpTopPanel + + + 2 + + + 92, 7 + + + Combo + + + 218, 20 + + + 1 + + + comboChannelList + + + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpTopPanel + + + 3 + + + 12, 10 + + + 59, 13 + + + 0 + + + Channel list: + + + labelControl1 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpTopPanel + + + 4 + + + Top + + + 0, 25 + + + 1474, 34 + + + 0 + + + groupControl1 + + + grpTopPanel + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 1 + + + CenterScreen + + + ChanSort v2013-03-30 - Channel List Editor for LG and Samsung TVs + + + dsChannels + + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + gviewOutput + + + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colIndex1 + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colOutSlot + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colOutName + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colOutFav + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + repositoryItemCheckedComboBoxEdit1 + + + DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colUid1 + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + barManager1 + + + DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + bar1 + + + DevExpress.XtraBars.Bar, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miFile + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miOpen + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miReload + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miRestoreOriginal + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miFileInformation + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miSave + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miSaveAs + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miOpenReferenceFile + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miQuit + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miEdit + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miAddChannel + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miRemove + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miReplace + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miSort + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miRenum + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + mnuFavSet + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miFavSet + + + DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + mnuFavUnset + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miFavUnset + + + DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miLockOn + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miLockOff + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miSkipOn + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miSkipOff + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miHideOn + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miHideOff + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + barSubItem2 + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miTvSettings + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + mnuOptions + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + barSubItem1 + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miEnglish + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miGerman + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + mnuCharset + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miCharsetForm + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miIsoCharSets + + + DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + mnuHelp + + + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miAbout + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + sharedImageCollection1 + + + DevExpress.Utils.SharedImageCollection, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miMoveUp + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miMoveDown + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + gviewInput + + + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colIndex + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colSlotOld + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colSlotNew + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colName + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colShortName + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colFavorites + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + repositoryItemCheckedComboBoxEdit2 + + + DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colLock + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colSkip + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colHidden + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colEncrypted + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colChannelOrTransponder + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colFreqInMhz + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colServiceId + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colVideoPid + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colAudioPid + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colServiceType + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colServiceTypeName + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colSatellite + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colNetworkId + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colTransportStreamId + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colSymbolRate + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colPolarity + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colUid + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colNetworkName + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colNetworkOperator + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colDebug + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + colLogicalIndex + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + defaultLookAndFeel1 + + + DevExpress.LookAndFeel.DefaultLookAndFeel, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + splashScreenManager1 + + + DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + mnuContext + + + DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + MainForm + + + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + 600, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxMi4yLCBWZXJzaW9uPTEyLjIu + Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT + eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv + a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0 + cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P// + /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP + BQAAABRDAAACDgMAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACukAAArpAf11ztMAAAAqdEVYdENyZWF0aW9uIFRpbWUATWkgMSBNcnogMjAwNiAx + NToxMDo1MSArMDEwMP/NqUUAAAAHdElNRQfWAwEODCaDia/cAAACZ0lEQVQ4T82S7UsTUBSH75eCCAx6 + oTAqg7BMRKjoQ6S9Oa1I10gzU8PUZmYpKEamy8gCX8iS2YxqiRmREMrUltEoLdSMps458wXUEiW0UToN + bdTTpaLtP6gDlwuXe57zO79zxP8RC1M7CCzqRSR0IZI7EepOvLO7CI4qRRGpxTejGRHTioiVd+RrAmMq + 8FA+4k+6EGHJlfA4H+MoiMJviKtO7nbPQcJqOLaSNtsHxKUpxMUpzmobQX+aYI2E/Y3kftJ1LVClwfxF + Qgp+cL3DKQG+ErAek2UUoZmloMwEFeco75hEhJrcAElWRD6ElA3CzVR6ZkDXA5zwgzgfntrsFGnroVLD + leYZRKoEKp+5AP457TR0j/PA4uB9v4QMmGHWAepNcNyPuSEbziYDw2MT3GkcpuZVHz6JT1wA5dESiF0p + q22ERH+ZuPn3ObVNqtgK0RsgfA0cWA57PWC3QLkz0wVQHSmGqCXy41qI8ZZ9S1CclK/eAvFSRYR8D10B + +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 + ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tl + dCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1s + bnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0 + MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw + Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiBy + ZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4 + bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9u + cy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRv + YmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjQ1QTVE + QzE1NTY1MTFFMTlEMzlGQkM3NTZEQTg5QjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjQ1QTVE + QzI1NTY1MTFFMTlEMzlGQkM3NTZEQTg5QjAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFu + Y2VJRD0ieG1wLmlpZDo2NDVBNURCRjU1NjUxMUUxOUQzOUZCQzc1NkRBODlCMCIgc3RSZWY6ZG9jdW1l + bnRJRD0ieG1wLmRpZDo2NDVBNURDMDU1NjUxMUUxOUQzOUZCQzc1NkRBODlCMCIvPiA8L3JkZjpEZXNj + cmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqSWWTYAAAJY + SURBVDhPbVJLaxNhFP2gexdCacxrEpIWUbJI2qSPpKn4iNZYGsGkWqFPRaGFaA1qYjOmaqFkEVQIFXWn + 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 + A6hW1582hiNtAAAAAElFTkSuQmCCCw== + + + + 03/28/2013 23:00:31 + + + 16, 16 + + + Move up + + + Move down + + + Combo + + + Insert before + + + Insert after + + + Swap + + + 114, 20 + + + 11 + + + comboEditMode + + + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 0 + + + 273, 34 + + + 54, 23 + + + 10 + + + Filter > + + + Filter for current channel in right list + + + btnSyncFromLeft + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 1 + + + 165, 10 + + + 30, 13 + + + 2 + + + Mode: + + + labelControl2 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 2 + + + Tahoma, 8.25pt, style=Strikeout + + + 213, 34 + + + 54, 23 + + + 9 + + + Filter + + + Reset filter + + + btnClearLeftFilter + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 3 + + + 147, 35 + + + 23, 23 + + + 8 + + + 1-999 + + + Renumber selected channels + + + btnRenum + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 4 + + + 118, 34 + + + 23, 23 + + + 7 + + + A-Z + + + Sort selected channels alphabetically + + + btnSort + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 5 + + + 34, 34 + + + 23, 23 + + + 6 + + + v + + + Move selected channels down + + + btnDown + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 6 + + + 5, 34 + + + 23, 23 + + + 5 + + + ^ + + + Move selected channels up + + + btnUp + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 7 + + + 75, 34 + + + 23, 23 + + + 2 + + + >> + + + Remove selected channels + + + btnRemove + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 8 + + + 90, 8 + + + OK + + + \d{1,4} + + + RegEx + + + 66, 20 + + + 1 + + + txtSetSlot + + + DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 9 + + + Vertical + + + 4, 11 + + + 80, 13 + + + 0 + + + Set Pr#: + + + Program number for insert and set operations + + + labelControl11 + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + pnlEditControls + + + 10 + + + Top + + + 2, 21 + + + 332, 64 + + + 0 + + + pnlEditControls + + + DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpOutputList + + + 2 + + + Fill + + + 0, 0 + + + 336, 540 + + + 0 + + + Sorted channels (.csv) + + + grpOutputList + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + splitContainerControl1.Panel1 + + + 0 + + + Panel1 + + + Fill + + + 2, 85 + + + Pr. index + + + Old Pr# + + + Old program number + + + True + + + 0 + + + 50 + + + New Pr# + + + New program number + + + True + + + 1 + + + 45 + + + Channel name + + + True + + + 2 + + + 180 + + + Short name + + + True + + + 3 + + + Favorites + + + False + + + Combo + + + + + + RegEx + + + True + + + 4 + + + 55 + + + Locked + + + True + + + 5 + + + 40 + + + Skip + + + True + + + 6 + + + 40 + + + Hide + + + True + + + 7 + + + 40 + + + Crypt + + + Encrypted + + + True + + + 8 + + + 40 + + + Chan/ Transp + + + Channel or transponder number + + + True + + + 9 + + + 45 + + + Freqency (MHz) + + + True + + + 10 + + + 57 + + + Service ID + + + True + + + 11 + + + 45 + + + Video PID + + + True + + + 12 + + + 40 + + + Audio PID + + + True + + + 13 + + + 40 + + + Service Typ + + + True + + + 14 + + + 45 + + + True + + + 15 + + + 45 + + + Satellite + + + True + + + 16 + + + 100 + + + Netzwerk (ONID) + + + True + + + 17 + + + 45 + + + TS ID + + + Transport Stream ID + + + True + + + 18 + + + 40 + + + Symbol rate + + + True + + + 19 + + + 40 + + + Polarity + + + 40 + + + Uid + + + 120 + + + Network Name + + + True + + + 20 + + + Network Operator + + + True + + + 21 + + + Order + + + 1130, 436 + + + 1 + + + gridInput + + + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpInputList + + + 0 + + + Bottom + + + 2, 521 + + + 2, 2, 2, 2 + + + 153, 17 + + + 2 + + + F5: Filter | F6: List | Enter: add + + + lblHotkeyRight + + + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpInputList + + + 1 + + + 5, 5 + + + 263, 23 + + + 5 + + + << Add all (copy current channel setup) + + + Filter for current channel in left list + + + btnCloneChannelList + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + panelControl3 + + + 0 + + + Tahoma, 8.25pt, style=Strikeout + + + 65, 34 + + + 54, 23 + + + 2 + + + Filter + + + Reset filter + + + btnClearRightFilter + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + panelControl3 + + + 1 + + + 5, 34 + + + 54, 23 + + + 1 + + + < Filter + + + Filter for current channel in left list + + + btnSyncFromRight + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + panelControl3 + + + 2 + + + 136, 36 + + + 23, 23 + + + 4 + + + << + + + Add selected channels + + + btnAdd + + + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + panelControl3 + + + 3 + + + Top + + + 2, 21 + + + 1130, 64 + + + 0 + + + panelControl3 + + + DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + grpInputList + + + 2 + + + Fill + + + 0, 0 + + + 1134, 540 + + + 0 + + + All channels + + + grpInputList + + + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + splitContainerControl1.Panel2 + + + 0 + + + Panel2 + + + 1474, 540 + + + 5 + + + splitContainerControl1 + + + splitContainerControl1 + + + DevExpress.XtraEditors.SplitContainerControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + $this + + + 0 + + + 194, 17 + + + 783, 17 + + \ No newline at end of file diff --git a/ChanSort.Ui/Program.cs b/ChanSort.Ui/Program.cs new file mode 100644 index 0000000..aabb30b --- /dev/null +++ b/ChanSort.Ui/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Windows.Forms; + +namespace ChanSort.Ui +{ + static class Program + { + internal static bool ChangeLanguage; + + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + do + { + ChangeLanguage = false; + Application.Run(new MainForm()); + } while (ChangeLanguage); + } + } +} diff --git a/ChanSort.Ui/Properties/AssemblyInfo.cs b/ChanSort.Ui/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d723c41 --- /dev/null +++ b/ChanSort.Ui/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ChanSortUI")] +[assembly: AssemblyDescription("TV Channel Sort Utility")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ChanSort")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en-US")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("207c2719-5641-4141-917e-e76b7c3b952a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// 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("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ChanSort.Ui/Properties/DataSources/ChannelInfo.datasource b/ChanSort.Ui/Properties/DataSources/ChannelInfo.datasource new file mode 100644 index 0000000..53208e9 --- /dev/null +++ b/ChanSort.Ui/Properties/DataSources/ChannelInfo.datasource @@ -0,0 +1,10 @@ + + + + GUI.ChannelInfo, GUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/ChanSort.Ui/Properties/DataSources/System.Text.EncodingInfo.datasource b/ChanSort.Ui/Properties/DataSources/System.Text.EncodingInfo.datasource new file mode 100644 index 0000000..ca71191 --- /dev/null +++ b/ChanSort.Ui/Properties/DataSources/System.Text.EncodingInfo.datasource @@ -0,0 +1,10 @@ + + + + System.Text.EncodingInfo, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/ChanSort.Ui/Properties/Resources.Designer.cs b/ChanSort.Ui/Properties/Resources.Designer.cs new file mode 100644 index 0000000..97bccaa --- /dev/null +++ b/ChanSort.Ui/Properties/Resources.Designer.cs @@ -0,0 +1,337 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.586 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ChanSort.Ui.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Ui.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap Donate { + get { + object obj = ResourceManager.GetObject("Donate", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to Delete all channel data. + /// + internal static string MainForm_btnResetChannelData_Click_Caption { + get { + return ResourceManager.GetString("MainForm_btnResetChannelData_Click_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to WARNING: All analog, DVB-C/T and DVB-S channel and transponder data will be deleted. + ///You will have to run a full channel scan after loading this file into your TV. + ///Proceed?. + /// + internal static string MainForm_btnResetChannelData_Click_Message { + get { + return ResourceManager.GetString("MainForm_btnResetChannelData_Click_Message", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Supported Files|{0}|All Files (*.*)|*. + /// + internal static string MainForm_FileDialog_OpenFileFilter { + get { + return ResourceManager.GetString("MainForm_FileDialog_OpenFileFilter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0}-Files|*{0}|All Files (*.*)|*. + /// + internal static string MainForm_FileDialog_SaveFileFilter { + get { + return ResourceManager.GetString("MainForm_FileDialog_SaveFileFilter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The input file contains multiple records that use the same + ///program number. It is possible that the TV will not accept + ///the changes made by ChanSort. + ///This is typically caused by running a manual transponder scan. + ///It is recommended to use a clean input file for any modifications. + ///To do that, turn Hotel Mode OFF, reset the TV to + ///factory defaults, run a new blind channel scan and turn + ///Hotel Mode back ON, then export a new clean TLL file. + ///. + /// + internal static string MainForm_LoadFiles_DupeWarningMsg { + get { + return ResourceManager.GetString("MainForm_LoadFiles_DupeWarningMsg", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Error loading file. + /// + internal static string MainForm_LoadFiles_IOException { + get { + return ResourceManager.GetString("MainForm_LoadFiles_IOException", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data validation. + /// + internal static string MainForm_LoadFiles_ValidationWarningCap { + get { + return ResourceManager.GetString("MainForm_LoadFiles_ValidationWarningCap", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to The verification of the file content showed some anomalies. Possible causes are: + ///- The TV itself created a mess in the channel lists (which happens frequently). + ///- The file format is partially unknown (e.g. unknown TV model or firmware). + ///- The file has been edited with a broken program version. + ///- ChanSort's validation rules are based on wrong assumptions. + ///You can continue editing, but it is possibile that your TV will reject the changes.. + /// + internal static string MainForm_LoadFiles_ValidationWarningMsg { + get { + return ResourceManager.GetString("MainForm_LoadFiles_ValidationWarningMsg", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error occured while loading the TV's data file: + ///{0}. + /// + internal static string MainForm_LoadTll_Exception { + get { + return ResourceManager.GetString("MainForm_LoadTll_Exception", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No plugin found to read/write {0} files.. + /// + internal static string MainForm_LoadTll_SerializerNotFound { + get { + return ResourceManager.GetString("MainForm_LoadTll_SerializerNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Quell-TLL konnte nicht gefunden werden: + ///'{0}'. + /// + internal static string MainForm_LoadTll_SourceTllNotFound { + get { + return ResourceManager.GetString("MainForm_LoadTll_SourceTllNotFound", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to You are about to restore the backup file. All changes will be lost! + ///Do you want to continue?. + /// + internal static string MainForm_miRestoreOriginal_ItemClick_Confirm { + get { + return ResourceManager.GetString("MainForm_miRestoreOriginal_ItemClick_Confirm", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No backup file found: {0}. + /// + internal static string MainForm_miRestoreOriginal_ItemClick_NoBackup { + get { + return ResourceManager.GetString("MainForm_miRestoreOriginal_ItemClick_NoBackup", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unable to copy .bak file to {0}. + /// + internal static string MainForm_miRestoreOriginal_Message { + get { + return ResourceManager.GetString("MainForm_miRestoreOriginal_Message", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data modified. + /// + internal static string MainForm_PromptSaveAndContinue_Caption { + get { + return ResourceManager.GetString("MainForm_PromptSaveAndContinue_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do you want to save the changes?. + /// + internal static string MainForm_PromptSaveAndContinue_Message { + get { + return ResourceManager.GetString("MainForm_PromptSaveAndContinue_Message", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Restore order from channel scan. + /// + internal static string MainForm_RestoreScanOrder_Caption { + get { + return ResourceManager.GetString("MainForm_RestoreScanOrder_Caption", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to All custom storing will be lost. + ///Are you sure you want to restore the order from the channel scan?. + /// + internal static string MainForm_RestoreScanOrder_Message { + get { + return ResourceManager.GetString("MainForm_RestoreScanOrder_Message", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to There was an error saving the file. Please make sure that + ///- you have write permission on the file + ///- the file is not open in another program + /// + ///The error message is: + ///. + /// + internal static string MainForm_SaveFiles_ErrorMsg { + get { + return ResourceManager.GetString("MainForm_SaveFiles_ErrorMsg", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to File write error. + /// + internal static string MainForm_SaveFiles_ErrorTitle { + get { + return ResourceManager.GetString("MainForm_SaveFiles_ErrorTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An error occured while writing the TV data file: + ///{0}. + /// + internal static string MainForm_SaveTllFile_Exception { + get { + return ResourceManager.GetString("MainForm_SaveTllFile_Exception", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sorted TV data file was created successfully.. + /// + internal static string MainForm_SaveTllFile_Success { + get { + return ResourceManager.GetString("MainForm_SaveTllFile_Success", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ChanSort Reference List|*.csv|SamToolBox Reference List|*.chl|All Reference Lists|*.csv;*.chl. + /// + internal static string MainForm_ShowOpenReferenceFileDialog_Filter { + get { + return ResourceManager.GetString("MainForm_ShowOpenReferenceFileDialog_Filter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Open Reference List. + /// + internal static string MainForm_ShowOpenReferenceFileDialog_Title { + get { + return ResourceManager.GetString("MainForm_ShowOpenReferenceFileDialog_Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to An unexpected error occured: + ///{0}. + /// + internal static string MainForm_TryExecute_Exception { + get { + return ResourceManager.GetString("MainForm_TryExecute_Exception", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <html> + ///<body> + ///<p style="font-family:Arial;font-size:12pt">PayPal donation page is being opened...</p> + ///<p></p> + ///<p style="font-family:Arial;font-size:12pt">PayPal Spendenseite wird ge&ouml;ffnet...</p> + ///<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> + ///<input type="hidden" name="cmd" value="_s-xclick"> + ///<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHVwYJKoZIhvcNAQcEoIIHSDCCB0QCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBW [rest of string was truncated]";. + /// + internal static string paypal_button { + get { + return ResourceManager.GetString("paypal_button", resourceCulture); + } + } + } +} diff --git a/ChanSort.Ui/Properties/Resources.de.Designer.cs b/ChanSort.Ui/Properties/Resources.de.Designer.cs new file mode 100644 index 0000000..e69de29 diff --git a/ChanSort.Ui/Properties/Resources.de.resx b/ChanSort.Ui/Properties/Resources.de.resx new file mode 100644 index 0000000..9bf5b0f --- /dev/null +++ b/ChanSort.Ui/Properties/Resources.de.resx @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Quell-TLL konnte nicht gefunden werden: +'{0}' + + + Beim Auslesen der TLL-Datei trat ein Fehler auf: +{0} + + + Unterstützte Dateien|{0}|Alle Dateien (*.*)|* + + + {0}-Dateien|*{0}|Alle Dateien (*.*)|* + + + Beim Ausführen der Aktion trat ein Programmfehler auf: +{0} + + + Beim Schreiben der TLL-Datei trat ein Fehler auf: +{0} + + + Die sortierte TLL-Datei wurde erfolgreich erstellt. + + + Möchten Sie die Änderungen Speichern? + + + Daten verändert + + + Es konnte kein Modul zum Lesen/Schreiben von {0}-Dateien gefunden werden. + + + Fehler beim Laden der Datei + + + Datenüberprüfung + + + Die Überprüfung des Dateiinhalts fand einige Auffälligkeiten. Mögliche Ursachen sind: +- Der Fernseher hat seine Senderlisten versaut (was häufig vorkommt). +- Das Dateiformat ist teilweise unbekannt (unbekanntes Modell oder Firmware). +- Die Datei wurde mit einer defekten Programmversion bearbeitet. +- Eine von ChanSort's Prüfungen geht von einer falschen Annahme aus. +Sie können mit der Bearbeitung fortfahren, es ist aber möglich, dass Ihr Fernsehgerät die Änderungen nicht annimmt. + + + Die händische Sortierung wird überschrieben. +Wollen Sie wirklich die Reihenfolge des Sendersuchlaufs wiederherstellen? + + + Reihenfolge des Sendersuchlaufs wiederherstellen + + + Die Eingabedatei enthält mehrere Einträge die der +gleichen Programmnummer zugeordnet sind. Es ist möglich, +dass das Fernsehgerät die von ChanSort durchgeführten +Änderungen nicht akzeptiert. +Eine typische Ursache für diese Situation ist ein +manueller Transponderscan. +Es wird empfohlen, für die Bearbeitung eine saubere +Ausgangsdatei zu verwenden. Dazu schalten Sie zunächst +den Hotel-Modus AUS, daraufhin können Sie die +Werkseinstellungen wiederherstellen und einen +Sender-Blindsuchlauf ausführen. Anschließend aktivieren +Sie bitte den den Hotel-Modus wieder und exportieren +die Senderliste erneut auf einen USB-Stick. + + + + ACHTUNG: Alle analogen, DVB-C/T und DVB-S Sender- und Transponderdaten werden gelöscht. +Nach dem Laden der Datei in den Fernseher ist ein vollständer Suchlauf notwendig. +Wollen Sie fortsetzen? + + + Senderinformationen löschen + + + Die .bak Datei konnte nicht nach {0} kopiert werden + + + Sicherheitskopie wurde nicht gefunden: {0} + + + Sie sind dabei die Sicherheitskopie wiederherzustellen. Sämtliche Änderungen gehen verloren! +Möchten Sie fortfahren? + + + Referenzliste öffnen + + + ChanSort Referenzliste (*.csv)|*.csv|SamToolBox Referenzliste|*.chl|Alle Referenzlisten|*.csv;*.chl + + + + ..\Resources\btn_donateCC_LG_de.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Schreibfehler + + + Beim Schreiben der Datei trat ein Fehler auf. Bitte stellen Sie sicher dass +- Sie Schreibrechte auf die Datei besitzen +- die Datei in keinem anderen Programm geöffnet ist + +Die Fehlermeldung lautet: + + + \ No newline at end of file diff --git a/ChanSort.Ui/Properties/Resources.resx b/ChanSort.Ui/Properties/Resources.resx new file mode 100644 index 0000000..0d7abfc --- /dev/null +++ b/ChanSort.Ui/Properties/Resources.resx @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Quell-TLL konnte nicht gefunden werden: +'{0}' + + + An error occured while loading the TV's data file: +{0} + + + Supported Files|{0}|All Files (*.*)|* + + + {0}-Files|*{0}|All Files (*.*)|* + + + An unexpected error occured: +{0} + + + An error occured while writing the TV data file: +{0} + + + Sorted TV data file was created successfully. + + + Do you want to save the changes? + + + Data modified + + + No plugin found to read/write {0} files. + + + Error loading file + + + The verification of the file content showed some anomalies. Possible causes are: +- The TV itself created a mess in the channel lists (which happens frequently). +- The file format is partially unknown (e.g. unknown TV model or firmware). +- The file has been edited with a broken program version. +- ChanSort's validation rules are based on wrong assumptions. +You can continue editing, but it is possibile that your TV will reject the changes. + + + Data validation + + + All custom storing will be lost. +Are you sure you want to restore the order from the channel scan? + + + Restore order from channel scan + + + The input file contains multiple records that use the same +program number. It is possible that the TV will not accept +the changes made by ChanSort. +This is typically caused by running a manual transponder scan. +It is recommended to use a clean input file for any modifications. +To do that, turn Hotel Mode OFF, reset the TV to +factory defaults, run a new blind channel scan and turn +Hotel Mode back ON, then export a new clean TLL file. + + + + WARNING: All analog, DVB-C/T and DVB-S channel and transponder data will be deleted. +You will have to run a full channel scan after loading this file into your TV. +Proceed? + + + Delete all channel data + + + Unable to copy .bak file to {0} + + + No backup file found: {0} + + + You are about to restore the backup file. All changes will be lost! +Do you want to continue? + + + Open Reference List + + + ChanSort Reference List|*.csv|SamToolBox Reference List|*.chl|All Reference Lists|*.csv;*.chl + + + + ..\Resources\btn_donateCC_LG.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + ..\Resources\paypal-button.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + There was an error saving the file. Please make sure that +- you have write permission on the file +- the file is not open in another program + +The error message is: + + + + File write error + + \ No newline at end of file diff --git a/ChanSort.Ui/Properties/Settings.Designer.cs b/ChanSort.Ui/Properties/Settings.Designer.cs new file mode 100644 index 0000000..f033d21 --- /dev/null +++ b/ChanSort.Ui/Properties/Settings.Designer.cs @@ -0,0 +1,266 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.586 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ChanSort.Ui.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputTLL { + get { + return ((string)(this["InputTLL"])); + } + set { + this["InputTLL"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int InputListRowHandle { + get { + return ((int)(this["InputListRowHandle"])); + } + set { + this["InputListRowHandle"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int OutputListRowHandle { + get { + return ((int)(this["OutputListRowHandle"])); + } + set { + this["OutputListRowHandle"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string OutputListLayout { + get { + return ((string)(this["OutputListLayout"])); + } + set { + this["OutputListLayout"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputFilterName { + get { + return ((string)(this["InputFilterName"])); + } + set { + this["InputFilterName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputFilterOldSlot { + get { + return ((string)(this["InputFilterOldSlot"])); + } + set { + this["InputFilterOldSlot"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputFilterCrypt { + get { + return ((string)(this["InputFilterCrypt"])); + } + set { + this["InputFilterCrypt"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputFilterNewSlot { + get { + return ((string)(this["InputFilterNewSlot"])); + } + set { + this["InputFilterNewSlot"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputFilterChannel { + get { + return ((string)(this["InputFilterChannel"])); + } + set { + this["InputFilterChannel"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputFilterUid { + get { + return ((string)(this["InputFilterUid"])); + } + set { + this["InputFilterUid"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string OutputFilterName { + get { + return ((string)(this["OutputFilterName"])); + } + set { + this["OutputFilterName"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Language { + get { + return ((string)(this["Language"])); + } + set { + this["Language"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string OutputFilterNewSlot { + get { + return ((string)(this["OutputFilterNewSlot"])); + } + set { + this["OutputFilterNewSlot"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string Encoding { + get { + return ((string)(this["Encoding"])); + } + set { + this["Encoding"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool HideLeftList { + get { + return ((bool)(this["HideLeftList"])); + } + set { + this["HideLeftList"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0, 0")] + public global::System.Drawing.Size WindowSize { + get { + return ((global::System.Drawing.Size)(this["WindowSize"])); + } + set { + this["WindowSize"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputGridLayoutAnalog { + get { + return ((string)(this["InputGridLayoutAnalog"])); + } + set { + this["InputGridLayoutAnalog"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputGridLayoutDvbCT { + get { + return ((string)(this["InputGridLayoutDvbCT"])); + } + set { + this["InputGridLayoutDvbCT"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string InputGridLayoutDvbS { + get { + return ((string)(this["InputGridLayoutDvbS"])); + } + set { + this["InputGridLayoutDvbS"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("0")] + public int LeftPanelWidth { + get { + return ((int)(this["LeftPanelWidth"])); + } + set { + this["LeftPanelWidth"] = value; + } + } + } +} diff --git a/ChanSort.Ui/Properties/Settings.settings b/ChanSort.Ui/Properties/Settings.settings new file mode 100644 index 0000000..ecb339a --- /dev/null +++ b/ChanSort.Ui/Properties/Settings.settings @@ -0,0 +1,66 @@ + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + 0, 0 + + + + + + + + + + + + 0 + + + \ No newline at end of file diff --git a/ChanSort.Ui/Properties/licenses.licx b/ChanSort.Ui/Properties/licenses.licx new file mode 100644 index 0000000..e9727a2 --- /dev/null +++ b/ChanSort.Ui/Properties/licenses.licx @@ -0,0 +1,7 @@ +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/ChanSort.Ui/Resources/Donate.bmp b/ChanSort.Ui/Resources/Donate.bmp new file mode 100644 index 0000000000000000000000000000000000000000..55516c7aaa3591604865d4cd18379f8f650c3104 GIT binary patch literal 3382 zcmeIwA#&YN425B3CLjUbgJ57$uqM1+gO+lZkut%6E<(#F6wORPc)-i=r?4!c_Vwp; zZ3Fx2>gm_x54#?Zw`LE_etx;JyM1xL@%<_@PLnpcGPUluKQDjn-|L&12NJySLSxLr z;9wF7q0kt!G&lm>q)=$g*LR%^B!og^%$Qm^0tune7=F^=2qc6;W6U^h9D#&TXpDvN zo8~x1LMSw5m*!3e5<;OdyXkPr%u*^;D_frLmI06Zw(3st}a59h(3XRzqWFR3F8nf*xCj$wg(3oxIax#z*3XRz|Zzlr@q3r$RV$Z*g8j2NO iuBTlt#|(_)(Q$tsX9dm*oE11La8}@~z*&L+tOB3FDm>c& literal 0 HcmV?d00001 diff --git a/ChanSort.Ui/Resources/btn_donateCC_LG.gif b/ChanSort.Ui/Resources/btn_donateCC_LG.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab78d8bead8876051c2e35ec3308e35908530a33 GIT binary patch literal 2858 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 I$^`-dJ0nF%0ssI2 literal 0 HcmV?d00001 diff --git a/ChanSort.Ui/Resources/btn_donateCC_LG_de.gif b/ChanSort.Ui/Resources/btn_donateCC_LG_de.gif new file mode 100644 index 0000000000000000000000000000000000000000..73fbd6616938c58374bacc9979734f2debe9a8a3 GIT binary patch literal 2378 zcmV-Q3AOe|Nk%w1VQK&`0Oo%H|Grur56=&y0VqAib#%? zjQ{=k|Mum+x}|4iPyV<_{^`JJ0x{Q`IREU)LsM7&-=ctUN&eoR|MT2XYI|^igZ|Tt z{^z>Cjy>j9`Y`V_Q;o-<$!b9bv|nZ*%Yqv!GXssk1JfN{Nrl=PAX=Tij#>E%v{yoQFgEd*52 zy2JPS{GnkcrJ=l|G~Qd)6oAcF#q%N$epIdKQG5@bj-M`Mwrjw&anUb z@#ng5!<}~Tqb>g#9eFrH-kYDFfJXk$egFVt05fL)nKS?Y|NsC0A^8LW004ggEC2ui z0BQg)000O7fPaF6gntZuh>41ejE#`CprN9pq@|{(rxPfM zm#u<*G8iGVw6(UkxVgH!yuG$8eXf>$91O8fcJI1VE)m8yJwwhvzD7)`o#>Bf5td?1bBVhjX473ff~7Xio&qiK$SL7UHLo+S`uxTrzL@Zhm$ zU(5iTPYl!0NptResSoJ3IkIctzP$io0VlE-;8P-d>lHa@lE{8B2Z@W}-wVj`6n%~s z7h#;(Yn~7K+u4Bx19t@GaKUuc4MV_!3j(k~1rSCkVT3Jsw->(Kf<|JgraxPa3|+#|aZoc)7mVUbK;Fy0DR761c&OZ`0GIsyfd5~@N17+HWQ1*}3!fde#2pu$BSuu7~7 zosQr@trnp~q4AgXBsAh@kBhdGPVbB$sUR$iXn+N*@5U?DESn$K3K9RLX4g%{b?*^UWK-GQiJ32QBo_ zL>F!J(MTtqbTAB2)5iuVL@o8yR99{F)mUe(_10LYOieX1upsu>WS4FB*=VP&_S$Tl zeSz0sSM&4)G}LYP-FWA%_uhQ>?f2g_00Y88aTCJOB#0-j_~MKZU`XMRM=tr~lvi%~ z<(Ox#`R1H=?)m4Shc0^PK=fex>8PX5#1KRr;QH&ZzfQ#Lu!sh#m}~g+Vw%6Jq#; zDb((QG1twgf3IUiS00V#oBr1`Kxm!RP z$^bW_+quwo03FoYv;F$!PA;Q_GVhBmn22|R2A7kk*@PZeLAcg=yApk@8pdgmGfF(>}31}E(6nWr#u+qTmOJqCuiVcqtLcKn5iw;Q(idA__m+!X_}G2wX(N0kePxNs1AI zI`m;D&*y|KY{3aa1(^P^6ZD%_& z2!RM?C2bIz00bmxlbZ(s!x$ylLoNWZf=)2Q27BrUqE_JyckBTWWLbqGywacd{i7ey zu!J;pkO~LbfeDj<-RxEoq^8}X46^`U2acDAX}n;kdWYCPB<9Y-VpxFg{0Kroda#6s zRG(S@fL0gAunje|p(M5Uz#W1Q4CS+}ZO5Qq3Ky|`O62HDcg$lR<1fV8qk;<0aD*4a zP=+Z6WB$MZh6p%WeA*-57{+ji>8|(2I35I7cfjQ?d-=<=3$vKTJkd(P!KYV9^A(05 wg)X?+%^|?y=;karI8YA=Lx5hMr3bwpz=6(yjvEt>Fu+0^8V*QcLLdMDJCkg3v;Y7A literal 0 HcmV?d00001 diff --git a/ChanSort.Ui/Resources/paypal-button.txt b/ChanSort.Ui/Resources/paypal-button.txt new file mode 100644 index 0000000..22a41f1 --- /dev/null +++ b/ChanSort.Ui/Resources/paypal-button.txt @@ -0,0 +1,19 @@ + + +

PayPal donation page is being opened...

+

+

PayPal Spendenseite wird geöffnet...

+
+ + + + +
+ + + \ No newline at end of file diff --git a/ChanSort.Ui/Settings.cs b/ChanSort.Ui/Settings.cs new file mode 100644 index 0000000..9d10655 --- /dev/null +++ b/ChanSort.Ui/Settings.cs @@ -0,0 +1,28 @@ +namespace ChanSort.Ui.Properties { + + + // This class allows you to handle specific events on the settings class: + // The SettingChanging event is raised before a setting's value is changed. + // The PropertyChanged event is raised after a setting's value is changed. + // The SettingsLoaded event is raised after the setting values are loaded. + // The SettingsSaving event is raised before the setting values are saved. + internal sealed partial class Settings { + + public Settings() { + // // To add event handlers for saving and changing settings, uncomment the lines below: + // + // this.SettingChanging += this.SettingChangingEventHandler; + // + // this.SettingsSaving += this.SettingsSavingEventHandler; + // + } + + private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { + // Add code to handle the SettingChangingEvent event here. + } + + private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { + // Add code to handle the SettingsSaving event here. + } + } +} diff --git a/ChanSort.Ui/WaitForm1.Designer.cs b/ChanSort.Ui/WaitForm1.Designer.cs new file mode 100644 index 0000000..0d30284 --- /dev/null +++ b/ChanSort.Ui/WaitForm1.Designer.cs @@ -0,0 +1,80 @@ +namespace ChanSort.Ui +{ + partial class WaitForm1 + { + /// + /// 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitForm1)); + this.progressPanel1 = new DevExpress.XtraWaitForm.ProgressPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // progressPanel1 + // + resources.ApplyResources(this.progressPanel1, "progressPanel1"); + this.progressPanel1.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("progressPanel1.Appearance.BackColor"))); + this.progressPanel1.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("progressPanel1.Appearance.GradientMode"))); + this.progressPanel1.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("progressPanel1.Appearance.Image"))); + this.progressPanel1.Appearance.Options.UseBackColor = true; + this.progressPanel1.AppearanceCaption.Font = ((System.Drawing.Font)(resources.GetObject("resource.Font"))); + this.progressPanel1.AppearanceCaption.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("resource.GradientMode"))); + this.progressPanel1.AppearanceCaption.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.progressPanel1.AppearanceCaption.Options.UseFont = true; + this.progressPanel1.AppearanceDescription.Font = ((System.Drawing.Font)(resources.GetObject("resource.Font1"))); + this.progressPanel1.AppearanceDescription.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("resource.GradientMode1"))); + this.progressPanel1.AppearanceDescription.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1"))); + this.progressPanel1.AppearanceDescription.Options.UseFont = true; + this.progressPanel1.ImageHorzOffset = 20; + this.progressPanel1.Name = "progressPanel1"; + // + // tableLayoutPanel1 + // + resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.Controls.Add(this.progressPanel1, 0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + // + // WaitForm1 + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tableLayoutPanel1); + this.DoubleBuffered = true; + this.Name = "WaitForm1"; + this.tableLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraWaitForm.ProgressPanel progressPanel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + } +} diff --git a/ChanSort.Ui/WaitForm1.cs b/ChanSort.Ui/WaitForm1.cs new file mode 100644 index 0000000..30a14f0 --- /dev/null +++ b/ChanSort.Ui/WaitForm1.cs @@ -0,0 +1,37 @@ +using System; +using DevExpress.XtraWaitForm; + +namespace ChanSort.Ui +{ + public partial class WaitForm1 : WaitForm + { + public WaitForm1() + { + InitializeComponent(); + this.progressPanel1.AutoHeight = true; + } + + #region Overrides + + public override void SetCaption(string caption) + { + base.SetCaption(caption); + this.progressPanel1.Caption = caption; + } + public override void SetDescription(string description) + { + base.SetDescription(description); + this.progressPanel1.Description = description; + } + public override void ProcessCommand(Enum cmd, object arg) + { + base.ProcessCommand(cmd, arg); + } + + #endregion + + public enum WaitFormCommand + { + } + } +} \ No newline at end of file diff --git a/ChanSort.Ui/WaitForm1.de.resx b/ChanSort.Ui/WaitForm1.de.resx new file mode 100644 index 0000000..8b49001 --- /dev/null +++ b/ChanSort.Ui/WaitForm1.de.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bitte um Geduld + + + TV Senderliste wird gespeichert... + + \ No newline at end of file diff --git a/ChanSort.Ui/WaitForm1.resx b/ChanSort.Ui/WaitForm1.resx new file mode 100644 index 0000000..b297549 --- /dev/null +++ b/ChanSort.Ui/WaitForm1.resx @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + True + + + Generating TV data file... + + + + GrowAndShrink + + + + 6, 13 + + + Microsoft Sans Serif, 12pt + + + True + + + progressPanel1 + + + 0, 14, 0, 14 + + + DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + WaitForm1 + + + 1 + + + + + + + 0, 3, 0, 3 + + + + + + 246, 0 + + + Fill + + + 1 + + + Transparent + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="progressPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Absolute,246" /><Rows Styles="Percent,100" /></TableLayoutSettings> + + + $this + + + 246, 73 + + + Fill + + + Manual + + + 0, 17 + + + 0, 0 + + + tableLayoutPanel1 + + + GrowAndShrink + + + progressPanel1 + + + 0 + + + + + + 0 + + + 246, 73 + + + 246, 39 + + + 0 + + + Horizontal + + + DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + Horizontal + + + Microsoft Sans Serif, 8.25pt + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1 + + + Form1 + + + Horizontal + + + tableLayoutPanel1 + + + True + + \ No newline at end of file diff --git a/ChanSort.Ui/app.config b/ChanSort.Ui/app.config new file mode 100644 index 0000000..24048ff --- /dev/null +++ b/ChanSort.Ui/app.config @@ -0,0 +1,114 @@ + + + + +
+
+ + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + + + 0, 0 + + + + + + + + + + + + 0 + + + + + + + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChanSort.Ui/app.ico b/ChanSort.Ui/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..9c1ff6a0eef763be0d65c92b60f9964399bd3340 GIT binary patch literal 99678 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 bTTk0xTMM+cKwAs6wLn`7w6(xx*8=|w%EGFc literal 0 HcmV?d00001 diff --git a/ChanSort.Ui/icons/flag_austria.png b/ChanSort.Ui/icons/flag_austria.png new file mode 100644 index 0000000000000000000000000000000000000000..3049cab9c682fb84ca580d73e991ada9df6d2056 GIT binary patch literal 541 zcmV+&0^WdKBJATux^O>%l5GB7YSATc;PGc-CeHy|r8F)%P9(2&9a000McNliru z)B_$6CMvdGM`r*4010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00DJL zL_t(|+Qn1LPQx$|Tsui0yl&;tYs&{9&WLZ|S2%IuH~1mAbFIh$E=VAd5Nb&p+v{cQ zJlgWQ*3x(rCo{X7*${1esj!)o`cLKxw zPHFRw%%}j_z1H;$5L0MFqm2X=WYLX^6e`H_Ty=9`&kjD*$#f^$7p?4p?Ekg#c2-oU zuQJ%Qv2`kZ;td<=hmHPs8##>Mip+o5DBlElQ5K8*LC`Jn+9-1vW3*yzjWEIvu!iYn fA!ghEVZFWpXQ@rjWdKcSATu!_O>%l5GB7YSATcvKH8(mjHXti7F)%O)yxAQ9000McNliru z)B_(30X0k$#fAU?010qNS#tmY3h)2`3h)6!tTdPa000JJOGiWi{{a60|De66lK=n! z1ZP1_K>z@;j|==^1poj6u}MThRCwCOQ%i0eF${gue1aGa+Euqr7G8AgWiQa9^c=ZP zH$6s{**ZW^&;~I)cE>Z4DE3kEz`j8QJd>uW$480=-upQF*lafYzVB~y&QMjDjWI$* zioaNkrIbp}@pznvVYq9JV6|Gc>-DMm`WDtL;fJ5Id65pWo=eQpsODyiAJkQVI0LDkrkH z2KL-=1{@T7V`UWdKcSATc0Ka(W;#FfcYCF*Q0dFgi6cAS*C2FfjkksYL()00(qQO+^RR z0|5>UCWDEu+yDRo32;bRa{vGe@Bjb`@Bu=sG?)MY00d`2O+f$vv5yPQOl6<~)U%N@{psv(yU6=| zJ-D^lTz=O)u`nj(jLSe-)LY8JU-KxXl*X>oi?() zXQ^wh(5R7$S7i5z(`%3bcK|@q2Jk(889zZYKPX!fQWsAc8))>GHst`UCV8%p0-o- z%P91x1i*o%cY@~e2u!Va7=6>m>FNmv2JHWIL0I2EXry%P2G@Tq=a_xJ(Dv8sr|VSd z?!7rleMSjY3tv(k_eo0D&jIW->&ff6%%#3$3jbuv%@ko;Np?@D7OIsOj2^P?*{IoY zj*^H5_62v%jdFO-3tyUHm?oD@o5raM8M9cy^u1X|*~{R{G$#wLgCEsE)MKO56Lcysp@WmBBWqu8a*f%`1BM3VRL4ZRJ8WMxx_TR&>+6 z0%JN@^n{SCl0cG|5Uli`Rq~RM@?Na)QeN_2{6F72Gtx+_UDg5qIPZ5gAAM)$%)R%V z`@LoExmTn4_bVR0i_ymdpwADkp3OMzUk1=e-!Vr8V?H{!FdG|aXUr36-xSx0l33rIwMBm9=i1~~Uo2HB}8ITO@pA5*^vHi1Lq*amu$$(@)G9Vd{3`hq4Ut-{{ z`a|nH)?U^>TBZjUu!S-0q8z`DMv|0E1|$QL0m*=5Kr$d1kPJu$BmO1We}G9Vd{3`hnf z1CjyBfMh^2AQ_MhNCqSW`yB&4wE8}2Zqor4dj9`%eI?$ZTWPnl5Nouu4(s52Hp|M6 zH2(1KL*@d{yyMeh-F=L9^wA>zuMVF-S-a0*du%Lc>sZR(x3T}S^(44evRR=<1Kbidhh0IEi0=Vd>`~BWd?=0^m#{#imgvSBIkNNe>VfuytEP4(g z;B69O?P3ijHAfFO%rNU|Ip-T_wr{hUbR#0N2zu=p+g&sWEN)H+YfIWDH9yNxYCLy1`A}0Oe&CMGAPsbTo&K`@Kzi5)^2QcMge> z^-+V01ho9tu=%XM5P6n&XSvAq2t}ShQ{-BTe597W02#5(bjeqo?kGlybZ6<*R}s;! z(TJvu6>KXLNVmFh#YnZ9QeCK*irGFAPulLiWkkGu0gkvrDUz&AQdI7S-Q}3nZ4!Cy zr@9dK21G5Wqmo>}Gm(BWBs?_$8EhArli!PCN)44FVj^aB<*=Cz9B&ZnKK1*~K1t{UIf>J1SO{2EYLUCw~ z)I-sxn=SD|P)dobxXCHh<>2Wi7ukT$VyAbTNVkbf-qhk1y10#crdeK<@{WL7XT&MB z09rLFJ$jQxbUEzp7ilPTaoQq^)34X%I!ZL4m$ixOT8Irk8*!p{S0WV$R4k&TcaYYt z1*+(1hDcj8xB>CZxwlcgsT625>+E#>V6$}=5=>7}=FkzNmnzMVl>*E)$8eJ%pb<8=KL6mX(YNT+D<@=60x>Vmpq;}E^3f#Pn*Pojm)sW-w8yq$E8Yh+lOeIF^Id(FNKDyygu zG2LQD(JOAaBkvj26!}Q=ZNiTpX%quQ8V0dmYPe(dR0TTT6VYov(Vy68HM@z_3$GQGQhpL#F(YyU5!+2~I~KMMaK^Bw-p z%)5!NW#5jzLLDM@PXw0 zxqG8`r|%3W0=N5b3*8$0RQi_Sjq&UK*9GEHdpYK1HpA$SgeP-&6>}kB6O z$9_cX{ra>*e)n;wpI7v89Z)4S^6+6*;GK&KeT{c7e%SP6e93@hVE<(RZC!pO1CjyB zfMh^2AQ_MhNCqSWpCkkGTK|5F-P+BL(v7f?-`^7Zi#VGM9NxQkujw^)D$W?QjemL| z=7}}1;%({DQ?J;t5s2GHo+y>tD6BaJE!rw2TO9MBexA9oie? z`P}BsDsP8_O1*>u-I`f!OMWZpXJu6z+6pDNKv%cB`E_XhNcY{uUo%S ztEC94SIMFVQnl|5#2IU1VvEgS+GglOebflm_o9XtOH76owT)_#nNdNdidB+*$~eq8 zkX@PIMmL1T3{s6fV+(X`-`t0GVLSkZs0DjQZ5RArjbGP3wTo6(ycM;JW$TvrEnT^> zZ_UzGE7vX`y?xYS_OoE3mRByi-qCt>--w!2s%+(Qkxscb(y;Gs#5bY`DAhNzt(ba% zCWU%{LUC$2G2fiQAXu`0MobF5wQjAELNJu6(d>Jt3a9FOut(wWjYg3f^sPx z(VeXsU9nFcKpiXIiaG!q0BA!yL!}tcncBrfta%g&MKBstib2t6EnkgQu;MMRWsD|2 zxqOqiQyGk|$V)eA^OjdMW?P>+R$DJSu8OHKvl<-dRb8~noU4*1K7BmZ43rkejH)pP zk4<6PmRF^X(L{mijoP?`Q+&#`<{9G3sNkX6R8qi{U3dXA*yZ`nP^6C&^ER+A=-D8n`<>V^Eij{#$<=gm*kVQUOfn!DkPJu$Bm(EddzG0cf5S(1?Qh|)S6ju{^k{4Dx6Kik_6^q({f zW1NefqKKWvB6e1**x77iXSa);!y$G~r`V~g*tuL{=XQ%-MTOXTJYwhdid|);*!g^7 z=l6?URh8IPSBqUujo8)Jid|iu*wxpIT|VS?Coc8cA^iDEZtlGsh2EOt|-h~3nwVmED?*d1_y*iD}u49W}eEyQ_Cs^;Yfi$NWD3ps&j}RM}HGOs|q;-T_aCXIDjc#cp@6dygyT^0@}p zE_KM+;~aMMJD6j@-eKQm>$dH-_FDH?ViuoeQ0Y>Jcn=?D{X|D=%=zxI)^4`6M&ky5 z>~GQE28d?>{)fdJu}kT1&R4Em8|*r;tE=naLl9EGW{venHeS5ou=7q`w`u*dz76Lc zb8%$tsr0Abx*&gk;D+TZO!2(2{NLPeSh{B2@-AGHAIX4ZKr$d1kPJu$Bm!p{{;hi=EjJX(dvmr*W38Vk1 z>kzMtu(A%${=(T``9M4S8)tv#G0qwpz2<5cXDu{ez<0N^e{i;!`xG{Tu};>lut|8$ z1^wILRK}*UL4{tFL9YSXt>8}w4nnFy%A4ZrU^KI!C|&g8KZPC21}yk-{NZfK!j5G0 ze!@K#*3DRmby(Rkcr{j!l^x62acr2e#f%+KN#Ju58@93~IP%%pDU6+pL-Fai(aUw% z*=*3p&V^vNja|UlQhJ32i!gQ}>$0=ucw<|yon6G(#caUNE@5mH8?v)CjICvR?3gf# zvJMBMcUo?s8T~iI ztE}J6UT5snY|zc#VC=JOx0`*AvClJltxlS;FR-o(_9e#NV!ajY%Zz=64OFmyW9(~e zsDi!2*f-do3bvcE4D0Z)Z!z|5*5hH{W$b$_=3zfz?1yZZhy9qbpRi#M`x&EB@p;+L z8T$q6_Of3x_A5rSRqrwO8#d@=zhmt8Y`2&FCu4tL^uoIwV}E2_mF&M5`xEP}Wc2#U zzp{Z!_BY1<&W0-4|1$Ouwx<%ckn;{7qt`H6d5@3TIdgD&(WAZJMn33g%~VzSZa-_I*8_1@#R8m7;9XU0B4?9$Zxx%u z*;GDI#SY+XIv=WHGdVku@2O(+UX~#5sAdOqb_nmOW^*{3%juP5^Ef+<@2X};aCRgg zu4YGbdV`IxhRx^f7~WmO7IJnh@2_EtI9tpIYuE{#oyd3Bu#-7k!s!)*Va`tBUA62q z&Q9mOwd_pJ&f){L>>SR{H_tmrYoNeIU^=uPom-7C4b~$HP@WFa^6=$3I?s~R`vuilLlPAvE zwY;l=UC-GKytjef#M#Y!pn+}W>{EQGf!)U0?R-xI8{jO#I~v(toZZcP8ri*^-N$2% zY#V0}@Li4UAY}Drf)3ceSvubM_7&Zej0owwwD}**7`+7VmCl-{I`LyuX!wpR*tE!B+Mo z&VI~yx3Zsd_A^fJ(#&%9bKcd){++X5^4>P~YtG)|18wZLoc)duwXy%;q6g7nxQ+dR zvpw9`&i=^R`@Fl|bWt8k1|$QL0m*=5Kr$d1kPJu$_DcqSqYr7P*H0v`id-t)N^-K~ zM=~H8kPJu$BmN4rDeY1CjyBfMh^2AQ_MhNCqSWk^#wpWI!_T{{jQ} z|Nr;jySm$F?PfpKGi;&f|J(2b?Bb7VI?YcFu-MTMPX-L{-Md$Nn?26>Vw^GNr_{#z ziFso5cLzn=(xs$xPdKOw|2$Ki|Cj4^nu1$d-vYGQ(0cYTs%lnFinJG zHhPYMvGpl!s5^mthDX6U&% zvf*M8zMQ7R71C5{x}nK8LJbK>Q#C8z3{Cy(*MY~Sr8%RAEsT_ow6ONVnJ#s*e>lcs zusC0yd@-$!tmzX;DvHnQSvgz6C)-n;kc_wmG# z{#m58edBcWJ#`u4gL+%X#1@;#v@Nf7)l&TsRky$B3@M9J-n(~bZ;a>5j~)ja>r+KJ zFR5g@0SC|%J;qkv0D7)NPr6WY3v|i1nqOykBuh0L;fv*k*k)S_{b{U((C$PS=toMb6V&YmWmcT#wBE+9NV~yjPa=+SQ?i&ITXvVsj8nfo??N@JV%swy2d$QpV~lRl!#mkbgk<%U!iF)(@0QhrD^nzH`L z`VD>1II6N`7`>GimZ7XhL@R-qJw|`&RkUe2i!5J0rm8+GsVW^%8LApew1`tuRY^}? znm0|=@|7!AoHim`reWemHX0_{OVV^QJ2k%12HN%!18q&$$U&k>&q_P#DIGT%dJ65u zWC-P{xLWv_re}3uWQBHrL+El9W0ivl%#UF7Gz|jjvF4EENVgoJQXhxqj}co}T{H@d;=<^kdTJRZrAV2C;>m1%e$z8)Qa#oP>?66Q41~&N zhn}Gw>(fx$&}rCUkJYdmdgy&)e$%o;gDj0bQU7fWx2^x);!s|A)1e&jj|yesb9Uu> zzqc!w{MfE2x7w9^zh+mazhPHC_d~l9rtj}o+LfzRhqCi5kMgzGJj!LSs7lq_m5TR! zZl$xvsq8q!qdd3Fq0D;8p?q$>Ls@vIL-|qCuB_q?h0}gp%&tu7a42{r|I1%l^o*b0 z|M#GtIU|?HkIc_l*&p|{k2`(i#(#>nYau)Bqt67Ve<1j%QUw>r*C4R;+>pz?WI!_T zug!qb_aPUuo&Rf>rL&9F8i0TBTpp*k^#wpWI!??8ITM} z1|$QL0m*=5Kr-;J!$6Gwc(5<<6>lB=|KDWY;WzyL6F#axxhtXL<4(Us-A8`vr~m&m z{$udNCSFYmRM8iE<6}NHWO6SVkPQ6mGk~^ke9Xs&OztHEk^#wpWI!??8ITM}1|$O? zHv>&?zh6;L>;DHCj=8Qd?}zR({r?{~ohXXw#9}d>SgocLo6U4$x0_BJ4%3O#X*y9= z(}~MvI&r&AClwW@6OYGq;`N$NDl1JVKA-8t?>C)PRhdrmx&OH7m+4CeBm#U9?0}DHj z7?{;NZFhTj-9QCnS0DGs^^MkUcC+sPTj+QHErWj+hD;`m?cICy`;0ja%Qo)aYaEWg zM_POJ4~yAjHB4-=2~68otX$oQVA5Z4=^pFP8V~^D_eTz+vb+H9Z%iM}pdgl5g z>o@eRXZ@>|YDXLNJ=0H_GiGGc*lS7a1`ZM5d6ie?kF+o)*fjE?4KlEiHL{uPiu|S- zxbkw{z}0<`6ksjX+l zTahOHWaaWvb;da9EG%O6DS`o0x?>-*L&>l;<)jaJfW({&j;LuV=B zhR!jwxoq8c&mdgFWd%n-74#DXKeI(RNO?HireMNwaZp-THZ(f;l|O` z-tHu|syVB4Y^WWrE)_SI+G4fq`Zumzw{}Azqa}B^`^Iwpptebn6}*PpLtrVLCeVDNJm!P;5!; zOtz}Hp3oiK%!_eCrA4>SQLfNkUc0gZrK%q?R)!m7I$xfqJN(0W`w(Kpr?qT(A{U3V zoAR64x-qORXV(H<<#+etem_>3>3J+Ft4IHtvYN!i7CSPwIJSf>8@sHGn__868FDHo zF$zK{i33)y{(_2fWwfJw)inyMt!x>=`g!bz{5ED88FrSl>fsMa5X(M^0_>{}vOYn?Jhg?Sf+C;Px zAeF_9p~0NL4I3ltH`1MA^``;#G zbSPh&?@&%#?@+cxJjzdeE`{xJDAx?z*f-Bw+|gw1Wha%~cdB)}jAe67wT_tGHWseM z#j;DsV=UelFQ4kaGcZr~Vv=|C^?ZG?2|pyD<^KGPw!X|$5Em9$^c7lM8fA^txHMvw zQoB%goe-BsS*c6V8xrx8iE?XY`V@EZ)ODGuY9m0oDQA7fXwRjst5gh zDto=VDwumfjoG_wG0Sf9`Dee|w!NAD|L*! zEhlxk%1Pbsa?*;5a#D|{oYd2tUzQ}sCJk^#wpWI!??8ITM}1|$QL0m*=5Kr*mDFfiW# z|Nl!c@P{_?|96gO{om~W7p?XeE%Fzw?H4WS7p>$ME#Mce+ZQd@7p>A4EzTFM$rmlf z7p=e-ExZ@4w-+t57p<=6XFv9bqLemB1|$QL0m*=5Kr$d1kPJu$Bm-L|9OXMN&SI#m#3c;s<-oR%62Yzksuk6 z3`hnf1CjyBfMh^2@bNS7Gw=F69oBC4Kl=K=#oFy|ioGusmwOe$D-L@5Lg|ajjJGdz zl(Tp2w=Za~LRh_W?dY%edd*31UnqSAl=1e3iTkdyZ|!pPyBEsk^3y8i(p8eQkxN7v z@u6JmZ#mT7bx3G>p#@Zqna4L=lt*_-szx3UD3Oa(QrOChHYI2w z9K8s#=woDcMv+uMAj`cd24I9=iTe`9D^3h5C zS{11*{fUsFvh*!KMn2mqj(IaxAuXTF`&L9Yt=_ow(#YyfqjUUDHE~=c5-otiad$yf zIHK&%V8z?my2t1@Oojb!4Yec8Qkp+TJDP768pmYF0jzi%mmwp&5tA92TH>S5P@(S) zK8`Jsi_?8KW3*nyWX8AZh>iLZbp{)YO5}zaQ(5u$0c?!yWJ=y#_}%fmR}IPwZ!UDl zTA0{kGwB_%*vv-YZFa_clJK%A@p?P60Evl4NtO(o-p2Rm@mPY!neT$AR02$FvAMBh zVvE`NW=q7o`0|R4w{3~HyN!^3sCT>ZRM{>A`4pedk;@`vc_-^+bJ=nEt-zZ0_PxA~ zh4*$T-A2|69mWFvRatv%zNLo3!rlm9kl?5g+eBvZdlJoW5autMBNQivvx#N%*T&k| zEH*#Cjha94maxJLZVS40Own|`Z|h#l{#3g5Q$A}nLn_`^hM0vAqrU?3uj8$Bnkj@- zbjTWQv0&^t{S}Z#VX@*$C*Da`T;qhu+$NSnqQCl4Pev0lYqz1azzHOJ<0&el=SP-- z5gGd_BQNXu7*`Pqqsy5yQLp)bGNoV6yq8K#&ukoHQ%%wJD`eg@HjN$0PRehi)}YdX zjd#c>`T}v+>+5BIwDpd=oxo)=+!iB6ssKmBMC6hU7rm33d$r0mZDei`xZLN1-hdb> zGqAwRTnjJ%aM>o)apg?btma8{uEy?)f=P0hF(g~H2VF1$ed1IZ(g|Y z7#zNLoiv7h@vI}G4690WWTO@?>g3$84&Ys0Wcz;1?`+|M< z@j{3`O^@z)&eeUQ5WZCqs`p!mPZGkP6@>2Vtldk5@XrOIXRU3hM+iMsSM@Y2&u;8G zRR|9$2>lBh2Tl{h6AQxXgS_kvAzW4v);2kY&J@C{3&MJvyZ>w z$q77J1uk&`d)&Zq1@IIP@Ki7Gv`XOVKHwRC;F(pxv#Nn-*8tC{1)f_6Jg**jegp7= zM&QyWU~e;_k&Q?TL>IOKm$d2d;Gh z*ExaxDlqB-u6F}BQ~)=6fSbI)ODlnw`GA-Efmc)kudD`MRRi2y3%t4xxTPL=O#?92 zNN8ju-UQLL&A{tgfY-MIZ)gMF*bcm@19)=)c*_LfR@OuKDGt0<0p4Z--fjinVFM1> zfe8ojPABj#6?nG`c#j)+Zw2r^5Ac33a9btt0Uz)|Kk%U{;KS9xM{0oEYk`Axghn=! z^$@XadV=c<99uK^C#5*pb^*Fp4! zdf*oufM03^zSRVLyBYZ97T{M}fnRL{{#!fnYaPI^2Y~Oe0m5%^;JXTNw*{E70>5bk ze#;L0wgdPbC-A!}@Ov)c_uarBQ~-bI0shDf{Bb4lCqCd${lK490f(yzjcjCVAo_VN z@E3K!f3FArvH|$3M&PfTfbTT}f71f|Z7cA1ZNT5R1OKA~_@4pbA0`0zuw8^X4*a76 zeBT26FDvj*HsGJ_z`r;RWukBy@1*qn(})&i%Ne zQ~@p3Kx+-qRtvP(0Uh-~X9G}e1iG4l?q*;`3((UF^tJ&j+kw6gpg#btngFcs1lF)2 z!decjQ-JjrV1pIdXahFcfz1wJixb$Y0^3}`b~mu2g3!oDzyr|)FR-%`IMD~3s|6lV2b^9HoY4TB*$6za33yO5u&V_aYz5A010LKCJfs6SI{=(B0XVl4 zcqktxoTmT}vj7jb0*|l(kF*1iasZEZ0=rd0BO4(XMDyLiV=90PJivus;IWm!<9xtH ze&FIN;PKVK6Ka4b)&fte1D;$DT+#sSX#|FwfTuJAPi+C7)(Skm4R}U7@XQY2SpneL z6M*M*0?(ZYJdf`oJYNA`U;!?*0()(QMm8dLh%R&hmpOsURbZbBxWWy*r~-Jg2e{G; zyrdGi$_HHS2d=3CuB`^Hs{!`c0;6@n_4U9F4Zw|!z)elSOPhh0wE!<~1zynxys{m5 zRR?f$0C@ET;FeC{HLT-Ux^ZwqBO7rAqH8U{>#V@*ZNMAsz#ARFo1DO#Rp2cy;8r*A zQx(8lJ;2+%z}qWscxN^6t{ULowZMDofcMq|?`r_w-w52+1bmU*8x9W5By96@Qp^`XPba; zHUmG`0{na{aHx&Y$VR#yqAzp+zZd|1X#()APT<=UfnR3bgkRynuPVTQvjD$l1%BNI ze8&#_h6DJn6S!LiW?aB;x`E%S0Djv8{Eip+-Ads1e8BJffj_7M{;(SOqZ;6kYk@zh z1OBug__GG!a3i6SjcgM{KW_&9q6PTxt-xQl0e{sF{B;NLy#Vkx6M(<%1pbcq68>Hv z>i^F98#)^JeAnkQpNoFZ|GCtg;Wu-iO?)=^*~}Z!HwHfw`b_rI@lOXnoqj#?I)6R+ zTIjXxtMOL@uclv#yux2ez8rcv`%?U+z)R^DBQNq7lc`WDyDPpcuq*vS-r=w5%pH4j$ek%85;>qBXnJ1!8_@7Aa4DZZ6o_IX?cxFd* zhkr-vvG8NLM-z_@B_m0mOb&(yv)kj_1KZP&L>}RfBp(hvoP8+%P~f5TgOLaMgUJU% z4`jE+w*|JP?~mNi?@!(rx-WZg{NBL5J@@49PTU>5J9Ag`F8^JrJHvP85{X1Gkr{{% z_ypLLay`F3d0ptb?6vW01J|bGkvNYhW1(2~n)o$=YtmaHTlkjb)uF5V zH~TlIt_ok3yE1WQ@XE{;(JTB{q%IF%p1Uk@S@5#VrO`|Mm!>v_H{~`aHU>9lHbgi0 zH>B2w*XN>%XfT@TXZ^`_p>^4{@wI`q={1oxd`)t7Xmxf~d{tmo`jW^c{F3C#(8}z^ z@rwf&r!R_J#4k#&2(8HW#rpz%>E)5-1Iq%-(icW9wn6#Lo$wlRi6gHa|OgR_LtknZ7eqXN1qlot`*7czWiv z=xP4bQm2Mb&7G1sC3s3E91Z)!sh)68Zb@QEa7pIm=*j+*QzwN_%AJ@vF?eF;gy;!_ z$A^y3E{-n_EKVF-QU z2v5ib5`kbK(-H0Pccj|G?YXu@Td*zD8g2Errdq-+x#mQ3usPEdZSpsz8iyO=4S|Mq zeWae(C+k9W+1hw*pf+6-so^!r>QHsIDqa<+O8X;z?oawczHDW@GEkZJM!ejc^n^V9 z75<8pJM7N660V>tqefM~nsSDnIY+_~bY$$Tc2{+8mCrv^+3)S}>~_aoUFxu7z}{`! zV;NL>IAd4bT2(oL{QpbI!xo<*&Hu*==}ejwY9G+f*AzT(W@+frmNafO3!C>W76~Lx zLTk&w2}1aWSy~tXvn}wd; zX9(e1ldz&;@GK$xlu1}=kDVigPnm_)9p?$*7tO+Yc7d4K`MF70y@083eW&UV#g*!h=`gz^m}zRk-geXA7CC04xA2zy`1b900iOD!g_T zPP+=9U4_f8!edwAu&eObRk-Uaymb}Mx(Z)ig{!W@Q&-`rtMJoRxalgqbQMmzYWC3; z_~|XRPyiNy6<`C{0SIzT<30nkXG-}ac&1W7ZX1<(p;1GED=00F=R0P7*(00m$HSOGSG9pC^s0V==+ za04m;9)K563Ge~@fGR*WpaxJ2s3XYRSr17Apb^jnXa=+ZS^;fv)089X|T?8DU04xA2 zzy`1b8~`Uk1-JliKn1`9@B%6UK7zcRen_eS)qom6Euaoi4`={10-6BLfEGY2pbgLt z=l}!&69An6HblSy3cv!e0&D=dyQ%{KXIF)KmSQQ?u3I|q&|Ej`$ zRpGs=a9&mTt}0wt6`rdK$5n;js={qm;kBx8TGb9f05Ad23781rdk7SO1z-i(2=e7_ zhr|JJ0#twt;09CxJOD4C65s>)0abu%Kn#5RN-E#@Gez2mnwWq6|SWU z&r*eBslu;R;Z~~fDpfd@Dtt;6E~N^OQiVgQ!k<*(PO2tvl3CzQs&FP%_>wAINfn-? z3P)09-2`wWRd|sqoJbWuqzV^Og$Jp^fmGo?s&F4wc#kTaM-{%K3fEDE=cvMQRN*(O za2r*4jVhc*6+WX1mr;essKQ}X;V-Htcad4(E~@YrRXB?(d_@(mq6$w@?Et_}RN*G7 z@Df$tOP~NO04u--umc-A05}0Ezy)vvDgYjU7f=cC0sMd} zg1nv8kkkNb0d;_SKm(u=&;)1(v;bNGZ2*k8)tDG~ieGp1zt-_uhJ5PatJzl)uY_L7 zy_|eG{4#$z^-|=effqwB=2FR2IK@+`U6EaW@~fjS1YXEIAAdgheD=A-bD`&Q&nC&c z=Fg^{i9F+fCQbfz;OWd$@uz}MWuNptnI``_@I+>3d}nZHmOSjxRdfMjs74nn}i!!DMzYL7sMQdvbetJKvrnUweQ&?c77jhr$o>hf?Hg`yWg{5Pcx< zK!&{S;I{1jiTgwM=k8117ru|*m%2A{um9fkJ<)pt_hjyllh>WS%Xe4$&gh+iJ2Qzm zdEME8#6V~ucSn-^ZhlAV_Q>u2+tcKE2X4#U8oxDoYnFWP(5G@+lUu`EIeFiaTLx|p z-JH8Ac~hAD@6?Tv8~rz?Z-|lyp1D4LeenA1bqVspbJr%X4PVQzO_3MwkEdhNSRj@m zKRkF%c8hOI`s(P_fvYo{HcVcpg*%NzAi|9d17s7ZEj6+ zO_)6M)auA;|LXLrDEa1@OX8OVFUhX-txR7WCEq-AQT(FdMcEYz^3HR8$-ZzO?@N(? z?q8l>79}4&b7B0#;Dy;pg1q!xZ?ZSs%X?Ggrw@>qo;yEze)xQTev15b|9R=RK(=VjvrVY zTAW*yTofkXJ#}2#zwd`Ij z!VZ~*4ZSA{Vb(1444o{5e>V#oI>JJDiOGd#PIjgcUTYTeA4DQ8fUJTpCI9-g+#lTz)$HmZFjIhO! zS`3@TI9ZH|#UNM=crnb)+bPDkVrbh*Vr}>;hN@zeDh8-xY$`^iVhCC?`V<3CG3FE_ zOfjxx-ISCVLyF;}7&#Wki(;rK28d#8D29b%L?{M>V(2HvdKls5?G!^hF`yG;IWdeA zBRDZy6N51^+!8}8F@h4~CNWSFgCa5d5hESfZu(J*s{&ZzAymBpAI^P#99HA7x(0`J zIIOG3VIvM3n{YS*hZ8z+$o3F$fC8`ptNGqFpyN}W02SZ@xB(Ra55NoX6F4ug z!eK2AH`n2?5r?rR95w@50Ih&FKs%rV5CBX7C_NPARtuqO$Kikjhb|o6?Z#mRzyt6C zDgi!#A28a4nOcvl4S+^K6QCK;0%!%a0onl_0M<)@=`rW?Rvg*@c7Oxm1bmqJv3g3t z`2{f@){MiqG56*C>OM_=IR_}pcT__1Ea>q26*%{ zIEN1t9;y(E=@{qXVm<~_G0vkf4dd*_)QfXIrd^y1Fy-Pr7Sk=xMPj}MQ!UOD3Ue)( zW^pdT6pJ&AnHA@0Vrm7mD$X+}0M8avDws`io~IB}%O=1~inG^_LotPd*%RmT!t@Dd zPMjBusT0haI9FlD#JNUHnP9fW*vjrbN6D-d30n!AyuVQH@B2sSwP9IPVqHAeaGhZYxZIVD`iLa0hUE zfKU}v9+>TLK8BeN=i?<)9bzT@X|aa>tXMsNUaXt%5>p#u!ThECw1)E)u~Pn;SQmdo ztcbrU*1|uJ*$XjY;rxP_vA|@7^DQx3fr$#|R}?}OlN8RcVS>W>j#%7&SIkaePQv*u z%ttuCBPJv;7vcQASiJrr<{+Fu#{7fxrx+Q3;~m^Z+bfwQ?}&H&Q|&W^%70j3C?6HDd@FjRF; z69ZFaTG#8lUyHvM6zl7l3y8lGd?ovG;^iQ%uqR#$zLb42{$k+8Oe&rVrZTj~9^93E zA#R!rh&~s1F7s^s+2FI8XX3Qdo_#t_GXd$RB2W3BN8WYf`MfCus&CyEU;jxHWrA;+Eho*_#tL2XD^al(;E)Q})LA zje#38Gy~wjAw_HO{_9iMMXux5C9e%#n~lfgfp|uE|LJQY*YInSTS8lMS7Q}Ew>hyn zMBab=s=!t0D|{Jm-#PCT^hNRi?w*o^Y?E|(`tNRLuP$^ zePDe$8XcGKA6ez6b@}KeflD$g<12%-GM~6ObaC#Y_fu;4~DZn z@t$B$me%Y;OL8YCPY$2VY1KY*lK-UiiO~}Sv~C|iA$UUe_yn!p=N2ayhZpn3m;uNg zht>Psv58|t$7UBM7KX_Gk1q()`hDV<&@s9B$@yVg!B2%EA%7^{9i=t=%+c)V)KQV6 z{70o}6+duf=7{(a!6UM?jvqQacUbbU@L`-*@+0&7^U{Y#4-L>-etd3lZgx&$PKZ|X zle5FKV}}F}$sU|II7F-Y$ywo9d{&B9^!>qfSF|h8m7z8L;6d2~69WxGz;1sr1u|f7BcBW;}6E(37o5RD>#W?j)`I$7t0*t0vUY2>*Xi!(e?+-3PD# zS8ac5)kO0DXBiJn^e+_s4SJnL|GRf@?e3G<;X1wB>B!|+;IYuRnIr-4 zPR7&b*G%ZAo~ykyZUf=vwFk z%--x(>1Yudu9qtXwXnr(9dY)Mo~qX+Qkb~wMD}SC|1~eBti!S}SsJF4wtAnSGgLUe zh`mi(x_a6s75?Fq*@0xum4-Dgq(v1Y?A?;Lg-l@`r!)Nd!9zwkqdF(38dJqaSX4I( zTD$vfwuOQ|VGe4LxP_8Otp*=YP?iH!x3*LE7daLn35xFPSS%%jJw>UZ)$9-yG)oGm%$}WMTLTK^<9ft2c>X=p}mu|Ay3e|O;i&qLJH{UIe}sF?j|GPEKi%Kg@SDM z?hpYiLkn5%AA9%q8Omk}s{^D=FD$ADl#r8t1B3$ltr1StB&t`aj-*r1BZaimPlzt2 zkk=V1!7Qpnr`GovY#>$4i=0c^2aQy>h`wnv@kne?fNDzY9ZGD#NNkHv@+5D+NJ!Y` z>tR18!h%L1l=3#zc)`XKs2ZA9y=t@%p3dH)R971j5~%awmo|{7Qsixv2o+vFYoe9v z3AFVb$6lfYzHQh|_KK=sTn2e|sM?5TOO{Z=B4-K_zmkl;rjW!oO&?hR`orbhj@B$q zO{c135&Hur^s7QbrFDUt5XkNgvm_aPfRStDR*>Uq20ftCO%)5bkDW$hkB(BYoc$-T zC?&SSNNfkFq72}UfgYz!vxn&>!vnnw*&U?oe4&dXJW9N~Py!Sk4H9MX1m{MM$-MeK zi&%uTzALm+hlO(9L6K$r3!Px^rfchIM_Qw1n~`=LC+8~meNw$ zEV_<-HYGz(BQ zwo=|^k(n@8uZ~);FIsc;uCv(?DcPwh(fbf#YGCjrb|qc9#<&FibQ?xp6#+U(S(dW< zRZZD8tq-HJKxNL8NO?mGMeWr(N8i9g(K%+dbhi@)xV2Ig3W~m$dQyXTL4@F_Kp`gg zEZaPdnvpdB=58iK+*Tg}rlZ`Ljv>l{m)So|WnWk`<&@(M2(vYNI=kuth~w@k}9=L!m`z6}+EHK7d

_PBV$w}hHgkv_&U0P@sm+cVL53C>?X^$k!3{`6k>`%_}yk9`z06g15P9BC6_Rr z?atqPNm~Pzkb4o)tmZ?Klu@DhicBLRhp^DX^5J2$m9CZKg`_r;`paeANf#Q5(nlhg zT6c@PhNv0!#E)AvYh4uuX(5@}FcP&wG{P*c(W9?0o25wuBrP#ZyP)`r&C;a2m+YWI zB3%{=;NB(%Xy{pBbR~(r=B$v+2iXXdMDXeo6+&1;!pc&fD4lwe*O}9XLa_{?-CXIC zxh$Q;pNf0ZR=Vfnwo>T5n(0#g0`CkA_CyO2Ao}7eQeva~rLe?KCw7r6ZppVmDgud# zY7Dh-lcV9ZE>?(1RU7SKL`nA}{Q@TXTQMtc+e)2mKQ+QFWU>|=p(r0%>#(8c*E$E0 zHDcPbJujj_4zimh{aQOFH^{i7xk$4Gx0rm_;-$#8EqMvjt3vD@LxtqV6dMEhx?7s!Sn)`D4 zZU5V;F9p7sPV=G6=MrxwKO1@@_37~IiC06fWM9g>7)XU*;LjzV;ZG-?%uJvrD0yqBrsz!q@R@GxQWkbW31Mj-K2IUFp9fczNiu9Q`UJ zy`ewK`$Oyan)s^B%FM-~i~K9X%M%xdBEh9udX^$_e*C=PdD(M==hCk+&WNAN!~T=Q zCxuRooDe!bu_&~N=1vy!1WQWxFCBO9#&BJ)`H8?j?Ip96r8dQEVYQW>0tTQC&xL z9~PT4aL8cSo|*mAcTMh|G%#Vfy{m;)4XML45NK|gcm5>u|2OD=06`+U$IPd{-_bsf z!TD4dxbFNVXta@_s-}8pQ-u_bK$Q2wDAmJ+xI`YksE?vvii?eGJ_};-uu~snI697D zli(K8P=-Qlvj-HLj<=8$Z3BZf@^es;d%M{r41B3=PykWa#8`F?9iz%?!SKKQbM#{? z9Z!QVJ21tXR& zvcX8rc5Qg38C6B%DO<_*VzwBGr^CI}Tv8+5%H2c@GT*7Esz3nB$>*j-78&|Qktkzw zP8Vl+cT%3p77NMCF)ErnQC>+3I=6do+4txaLoXIlc6Lgr%3Shg&C&yWfKgUTD=^Zi z4~$%5l9x)>KHj>QH+LKnNRK(x$oiURmn=BnRL?&k-xU-*sO8(7KD^5^O=dh+P?+(n zucW$aFIQQLn;$W?#XDz|tmK2zb%TW(HlNk&6*^Dz2tA@tC^S$bay>;p(p=FRAi!kP z4zwy#gH{_B9mWh&DdrQXV%H&CG#! zXo&43o?S@E5H}3YXRVs)g^R+5(beczigb{y5Z_3=o^<*~yZe;MUYVd})2*d+rwdlxv^QO<{8YFRu?@pq6}#Ul3F3An9b$ZOod*r)eCcABk!%aTx8>jYNw)08hNuN zVzgw7E|GTAxoGrt6yIs8UWGgu@ry1}3Wjk_6jLwtqG~TpoJ4Mc5wL**&Nk=TLV}8s zw|tY$&{-6qgts~x3@l{0>zjuN`P!fhDH1wC`1R-p4SQg+N7UbB0_Hzz@Vo6_X#ONw_J%LFObF2}*}SV;RUP ze88+yfxtYDa#Bm)mr;y)9jA0f20u91hf51j1~ZY}xo>3O@qaz})!>)2Z)LueN~b>;p&5+OYoV8eF9lNmUHpaMbL^?i z&cNgT9pS;=hX(GC-W|CsGZ4HjcniPDe?u^y-W<9tN^=Z}wTYGKzQnS0By>UI?7&&+ zQxZ$ECuL5I93NgBU&y=thX!WznTe^H&QN<-W4b<77pl!vN2-GUNM*+3_k`SWm){w( z1!<1|$h)SzI+^_cixu7B*LSD&%oj&05wG>P=n4vBm;Ak3(5m;iG~-PrhWkFv8xiF$ zihPLZAs6YZDQ=R?#iE?Ha$=)XW8_KU$|hRSX;cO~#WEalQypHNk&3M(Zrw^L z=o1tsHme8c=SO)YE*f8tbyujNc+|_GC^7kBWTKYDts^^D{|5|pN5-haAlBUbRzomi z6e|k8ma;c;q)IE%v}r#E2#9cv6t1!S?W2w^)$0p%MRBTd!N^?$PRfsW>v73kdQA|N z-t%fmNWB$muVzv;Lg@mk78q?%>k`&F=%!hI{A*TYr%+T$Fh~(oQX;AoLaJn<&S30f zj!{b&%a4oAL)&T!)oSFs1}Ek;I0?#+bIqX?3Kb~6^HkH&PwQv&k*u(n`jwG2pk}n7 z=I-A=TA*^n3l8cl`x$0(6TTh9WnF?$q@y9mjS3|9J ztU15Ze2f_I2*L{aH1bkM>3#%rehO8qkt3-hqx2Fh9&of^7^5{3a|JZ4B*)o^SDPar*0?`_C6OaM~NJ3aa!ev6FBpf*) z5($Y336Xw6LLj#O_rC6)>7JR^VHpUdYIa|DS5?&==Q?|nXt4i4;j?=-OD)k_J;ta zxn$6(Z-WXwU9;|`I_mBb(CuEf>~(eN3+|=8af8J2Huth){B{ZIZuhcnt-F=LL+)i} zFL&Wr>cj43^WMAEA_)G9dr8f1M&q>-tM<;rH%K(d#~P=-8B5h^zAl$t&AZ)A3NMj+ zyOR6d{RJo8%O-DU!H3<;25+B&kGYq1*r6Z~NsqgiajbTy+^%O1?IiJ=#?A zwW;H4FD6jM*XB}4n+tzzt|GFz(9x!bugz6}Hdi;=)bO>rn$f0)ug%qqHZ^>0E<&=~ z2-NSjxuDXfdauouk~Y%@eYC0FYv%!oAs0Z}Hi4_AY^wL#2||)U^_0^MNqo|7C{qiLW~dxAcj=lwW+&nQ+L;ciXAhqtK?Z&QcZrV6o5 z6=Itj#CDEA1!B8nAAnlH_Ci7zfhxf^HG(0OD#12Yf^BL9+tdiQsSs?>B~T&QrarJu zbzpljfy%(PCd3GFLXtpDV4I4-HuVr}ssY>70=B6HY*Pu?rVg;(PM{93O%-698o)Lc zfNd%O+lvWH2-Z=Fp~k_s32{P#kR(w3*QWNbohDHG*QWBXP32#^nLyQFyNy82Uz;1H z*_{Mx{@PUhwdWHS5Ec^hgf7Bj0`-1vs{P82Xg1Y;ZL0m+)cUol^$QNE_iIz_*G>}} z2vqyEsr74T3Do+vsq|}8>DO)}Q0dpE&aX|KUz;kw_Iv_Wer;;}+En(A?+}X^gy01-bUz^IlHg$b%*3~vueQm1uB8JrOwW;1~Q@huua<9$Z$ZYEN z+SKi}soHB(wb!O*uT9Nfn~J?Q^?Gfp_1aYHwW-x>Q>oXcQm;*&UYjbtHZ^)}D)h=G zVm9@8ZL0Iy+&|2wI3IimeI&n-C`?328zjfg7dR+$hE7MkzKoO0hc$+$hE7Mk)4Ug1r%tAfyP~ zAjNJVaDx<^8>HCWAjMun;07tEwgKEA1(h{`8>HCWAO$T1z&Z>_5E^&07VJnM57#(d zTwrX^CoCW=BrGE22~F^e;tHS|2FfX*jnGc$AaoMu5cEEPO^6ZVgajc;ND=A?^@KE` zfzU{3B4h|zLXOZ(Xd$!`+6Z$A3kZ3_V!{%Fngv({O|S_uLY$BwBnc@(9ig6(CNvNl z2~7lU#c0(Vc070vBp_qkrqv`2{A&PAS<4^k{b^)1360X7gOBY`HuVQ=E{M1D1f2zB2rYyTf?5lR5mE$eBcP2ihcKUz*bPwoXh)b&SVZ84K5Lv6 z&I-WMPdc71fA1%beSGHQeIK_zz90ML=YH?N{)zovC2jsaAM5?tv5(GtwC|&bt9JG~ z`k|Q*b${r{2lsri7dz+Ae4y_Gmgw{6-hbeI6YuMK-=X*J!tVJ;pwZv^*s=G_VE=sU zJ^LRmKAL;Kk(4RLtPIY!VddA zqTk>9nq#k?d3E2btyk}VRS_Eg2VObx%C1))dd03+^kAR;J<#z#wrgfrA9mW`?-ZS! zbKvC@*lYjL%XYo2=VeD;x<~Zx^o75?jOdU`&`LA zv!hQm{fpak+Yd}nOm|`5{asT%Q%5HEO!i{u{h5ir32S2icyT;8zIUu|%o^K2S{%(` z|NV(=UE2>BC84*YxW?Y;NdJu~<8VGsWO!^PoT&7J<7p`M{5gL?*h2agTR4D=0H z1N%1>H{~`RC{7f+iifZtf6vAv{d+{$f98dKFSK5`{{_Vtd>-wJSk6gFsy8LyAuv>qRr|*Ak^~~zN)z<3$ ztBR{~*s*`&nyzaO_3rBJ!Jhql3cZD6SI=DChh6*2I{ykg_ZOd)d)9%gCa&tj-u=6- z?78yD6??Ae#qRwxm-k(6UB3UaBKGe;a4AN)m+r%kf4NHzUSJef*DIJacj1#n#39v6Fx9q5~IBT-bHtA?)SfbHS1G_nhB*{;~6B z&g(nR^7Q`qF6+a7{`=1j-xB?_GLq$;^_zB^LJeFD}k4 zKF~GM)rFn?cjbHXM;7goo&Ox{?SEv!o&~)Nj?JIJ?*7*N{qu_Ra`O&gfB&wzhvw{> z(=+Et=bp~q&SM=j9evp4e}8+iJ=cDqZ36rJA8Orr2D<-NdVhVv+x^eNuK&eUF6FfE zZrj_suVuFRVD51CXa@Q-*!RD?p^#o%zp-vS^k*xxO|CM6Tbexyq$<;Z&E*l z$3NhB7EXBci1%^g)QFKjf;wLG?!x3NR!)giF8h3y#V~l*cf#v=Z>d0L?e*$sm}+>) z571Md#kzvl?hPu9yVjTQ!YfhJaYwlmv*E%XNIsEKZGC=pEs%FS&Oy>Ua|^P8q0{ zA{J_|dlzS+p`PyEHU0v17*2m%?Zh$mx8StZb>eGnm%$8)uXBk`@YJP<&3|2=gv#zf z-ME~xw@~M@!M;F-y@EP7o$N!@xeDkUYsUEsz}=RB!&_Wp(VK+9F>Xe~ONIm3%n||z znHhGK;_`Yz{IS!N^!Z?KDb77DTzc4L%5ZR-K(MZS4*3%x$&DSy(9pfQz$-!Q>fjQ} z%n~$5s9rMIi%LSHM(o*tiSw1Fn{aleGm8-}?EE+X>}F-y`$=Li0J({MxH#0asd?FMikJzuj6LGTk68P1VpIO_lfv$MRy$*G5o zY|8hj$l@$SM&>Q*@I<`C^TmE={C7~&+(gM_gj={dQn9IMe7)zDW0nl3TH@|vAa2Dc z+Hn%R4Tn0n&@F*SzYM@nhFkq*xP@Pa+x2C*U0=pVqBAK%9U+OkGu*8&0fBDu$6SWF1HD^ zUCn1VfUJTS&gW%vS%6;4GeBIF(?v!z?OF)=jesr!XTiL(&AG750s^POGVOHcv{Ysh zfwM;_0H{$VthhqolKTw!YoEAHA@bfYnr(2;SXn?jA;}OqEQtHnoeTk&AUtHLgt%lD zu5*#UZpFsoV7v>L?nBFgVe++}a1IdTOK|7!$ekQ2#zm!GE;(MzaJ-n2{;>BtNSrvX z$Z!;yVTFab_>~k#k(s3g&Sg=L5?RCnp;KMOHdPwUM8hv;fa%o8JXt1fIj_NYpp~Q&#J^nhD+3F6$rCs?k;xD^L6K=8aF!y|LEuzHW&t5j z=ptyuBx4gebCJmsIDL_6C2$TS(@9Wk0Tv-fh!Z%ak+C)cJe7D!zN-W;r<{|@a0&?B zE5HB2$)HSg7It21fzxu69z$qeldcgxuSt)?Po{G%?h$2n2|K90j%u(4H~O0Exa1@b zo(yb0;bzHh%0p>(>w$U%?dz_?a}(|jbZ>%6>vA{eMl+@6Qm#~H+zni z_I{=B%f&BEe6j0`6MuT(PmX+{=L<(Zf9$}_fn&2hvqwI+=X1TEJNCyjf86)S7QT&G z{A}*C2mWZ{kGk-6#9e>b^M^V?}%wu@~P&v>xr5*|ql&zJ}QIJH7AjdzbaD+;8_{N5+|V^u43_TYK>B!((sl zdFzo!a*y=BrSD-2-#k39C%5MSzINF6raf<*c|+eDsQ*6m+C9*G-}9Q@*Ocd5im#k_ zMb|6%B?WheWk0@SNIm#NFSTB}|0Odo-t(d(_aEEYv-1dcOYGXgxszk~IzrE6??lh| zk+D5vyGHkH>)kdn(lyd|uXXQ!ZwJI(TYI)1*>ZIA%;vt$y+g+aX9oAhBS~`Cja9Xx)A6`IhWxn0wxVJ16e!x^v==t~(Arch_@!p4)r-u?;gD`Zib_j;-s$ zcL#HQz4+#!bz9G^M{e13OE11RICJv>d~LAnrb9RGy0Hge9NZ({E$F>|&vpB+wXWU2 zW(Hp=uvQ)Go#{PRm?`YXw*_-ocX?kW=zUiARY$HoCSM`o7YJr9J#zytU? z;DJRGi@Fvak}n4wncp*i*S!66i})(wfjJX%y5=0hmjQb^k96$m=DKsopX!XOIq|)HYJOZT zjH`8Oaa=8l7uKn>;_B@9_&RldTwM@9y6$w+$;}Krs!r#&ntn5$ZRN41XJcs?Fbo(5 z3GHFkl!k3>XFs1BQV!VBpi=Zu#T$VgA z5ig#z#~o1N8mlJBo+A$Dm&!-U&Wq=I_5RYY95Z#&coh6HR?Z3Eh9%H9?k6Xe`s;b0 zR&Sc|ZT+JkegE1$mhUc4ccGy3yB09+(a)>HfxJqeN?uW9DWc%uY|x3H)9b8rUZ5s| z1!MEQQF*0?cSbsm-&@YsDLyo%OrBDz25U@HDMz7g!)q9;u@pw;|CdkvTLvc(QcPjU%0jP@pVRO!*VGKfxVx zhD>}*DD(@alQP4ptZ0Vvr&6`?p)5B;4bFv1eps{S{(=%q^}7_|a*c%|T+t9kd0_ga z5F9@qYKgi+39q`isIq)WAz(yrS060>PAjUls;_bdRelP7nQhV1Q^~M!Th!nzQ}T0G zJGVO<)pV#fD>X*d`B83-YPda9&C%IqMyv7^78lpdRwn0J>cP@4n60Jus79n~<>+cp z>@TuGy2;J8?&`$UN;B=yAhl!L+TbtLAZ;EV8S39w9GClR)tUH?*Xj1x>#9VSq?}Sy zbUwfEw>akyXDoh zRKoswxCR~=^Eh?gnc5mXN2`XNu3=}F6La<9K!5q#Q(-DxN7XrtmHeEmoSU6H)V+ax zxwm#=SUc5BrHZJU;t|ok{^>+_k&>TtiL(mBvHqy&`b9V#SKn45$_uYQ&r|C=as9&Y zH0Zw>t=H#2Rj(iZ*MwfukktFGO6q6h|IX((>2H3jUhmqP)vuY;s0YtU>Z8{t^-J)d z*qqdF|9(O*9!lzu3?}tgRy66`cGc_u>doq(f3HD*?_ff2$G=*e)R#Wi_T>3k|Nr`m z2e#C;S=$FaB`I{7A3;+-aQR=@jy7=l6qenTFSGSnCm6Ww#44P?GHFkl!k3>XFs1BQWLO9oD=|9{7`{^SCT|KD~hF7{?MpD zH0BSD_(S9U&}ct2)(?&JL*x9=C_gmD|Fz6F6KTVMVZbn87%&VN1`Gp+0mFb{z%XDK zFbtdy1KkZ9)4S_u>yD=KskKQbu`hl&mW>tcalO|%h=4xwXFs1BL;^fMLKeU>GnA7zPXj zh5^GsfPt24UVro=y#JrAc>nK@N!9oZ{q_F~|8k9G1up+;jim#Z-&kYWfy-~Lv0{PC zZ?Cc9fy=*MVGnA7zPXjh5^HXVZbo(G#RM; z{@=Rqul~lx82>+hD&zmq=sz^}4~_goGHFkl!k3>XFs z1HVKDe(U>dztV&E|Me9g(D28kYVR6<{lBu-IBv{JC$<%E)>Y0i9dNd*oa1)DIacMI zhy|SERnEzHz&TOnoJs_oQ&r9?8E~$va@MJU^Y^Np>*~tRv6ojl*VmVwx&;B}V^z*(vgnssTN+V@0mFb{z%XDKFbo(5 z3gA!)9`(}FuV&iB65mg)^QgRD&LLe z(_8*_dW&=H}T+ig*Qf^m#c>Q_8KqOpNT?8FBo%gB7 zOTX$Av2m%kJ;ij^szz&7GXAI8|E^}$TD#^8)*0o>H{8s4l}+fg$Hh}A4|L8 zs|@&6Z|(f99pMw@cddLLIMsYEi9B+gagU!}wny=Ac# zt@q@qJjHy1%dL0T=~nV{)++Z`Db^nZmBdfE{4WNX#0)~qkToHc$M`<-X7jkON0@`(twu{%yB*GOBr?#(*q zEBQIsI_sP})rhJj0u5}1m7i;+aa?tVDpak!Yl_{}a%^Xh2WriorC9i^g^tgvnQe^g z)#`OCZ;R`Le^;+x`mU^g^^fZH^InqF|9pN@Pu`W(KmAZrKlQam89JJKoqm6n%C6ww;s29C-``@j= z`~S{zMoQ#rzW)!s?GL@%5536`y|)j&r4PN6550j8y>Ab_T@SrW54|}Ly(bU76%V}w z554gYz26SK%?`c04!x-ky_XKXg$})Q4!vOxy-yCkJr2Dq4!s!;y$24x^$nF5b72@T z3>XFs1BL;^fMLKeU>GnA7zPXj|0fyP*txr7w*6>ZzHM!*)3UGma4wrGWXCgmn+`Ur z#*=;jukG%)?OKWP|B}-k|69TFzZD$+Tfy9PF#cCoVEnJF!1!NTf$_hx0^@&W1;+o% z3XK1i6&U|3D=_|7R$%GHFkl!k3>XFs z1BL-%;LOJV>LdC2mtg$g6EXe|j@Uyw^E$XQKxiL;kk)@l$3LXep9~Jglfh|%RB$q& zE;#}JVa#z{loIx%)P0$=1|F@W;ZWu5O7zPXjh5^HXVZbn87%&VN1`Gp+fioNb zAA0sT&bbu(|1Yi>{~KOwGmy-$s?t)b?bFyA1`Gp+0mFb{z%XDKFbo(53Gn ze-8uyHGC*}8Q%Y2X~zHmdosnu#4unOFbo(53GHFkl!k3>XFs1J5u6pFZ^6 zGHFkl!k4E*n5;GwQ3l2>5-f14Tq z|L@5Z6BEOLVZbn87%&VN1`Gp+0mFb{z%XDKFbq7y4E*Fn8$Ng?^#6a?8~-Q0@NbT7 zyg~h2Ol^ugcc|~g)eqy(j9~v$h|g4b&rGaNJ(Mi;|NZZAp88$2eR5kr|DQh0Hh;Bw zGPZ_+-vkEy=i5L2CZx%v!7yMLFbo(53Gn*NcG*|8?8#SK?NvC#n=TWsurO-yWJ0h_qk!~-@7u}K7Ml46q#*rde9K6q;>K6PRf z3)s|)O*~+e7Mn!Cra^3y0h>m#Nd;`0#Ky+d2Ty1+ViOD4WW|QlBfg)U*dzir&F)GHFmR>}Y-}sE=37+r;p}W?Zh2$=Sr-xD(rG7j)iI>i_Njhc`Y8qdC?uL!&-Sx9|M^pLK+N6`%7e5@!#tQbh-fJC1OyXCy zY1R;hp^z zR_^uiV9l^rd!c`4-lx@@X1t5i!IxdKkdt6c%08T{>3BBb@bTlvu~>npFxK07rPOm` z#8Wa(qtm9szyAL9_fOrn>7Jp1=_xgJ|F%tIBVY%H5}iebdVyo`T*;bh1zmLqA{KXmQ(+gj6eGyO=DWPG6oSNqxf3`WC?>5*C)zSjwe) zhex9+d_@c?s?=|>MfMYRb5MeR4oNLg*9iXnG!>_(CxK`j9WW3LM&@J|!h!Y&}w1{CLY*+GgmMZt>r)>P* ze(#h8Bz(o7C8@`c&mMOyzdTwGoj@j>u15Y=B-o3?ZRYbTVg@wu@tH|jBwLtZ#mzI8hl2BFpoR*(Gt44+U%ShRq{cNj9l6To#Gi9Bs zQ(d5TmVPx-CXcx;F<7oW{6u~CG-`e-sIj)8Dd$AF=0|p2eK_z4JaQ_JKq%qJE+z^; zXPNUH=T^0;RE=ydKLS#t1hP-A@lXtm4G#4WPY-SDr_B@}l?p3m7Z`b(G8MckJwSod z_O`GWdJCFso^GBEua}zFK)w*&2V)&68Etkq@RVc#hUM++sDWP-{Fnw7H_b z4K&5?IQ^zL?qpQ>ClcJkUDZAYWc~K(H^*_ONritRYwW(!p~(}8dN&`b>f*r+h-x6? zRSl$w0!Vov97l#FqZNz%P`hQVFcpATi8Z71jryel*H0{;5afnP!&Bq6t=M zVv&ElFG?p+zm|Df@*ZoPYP2XwRT3yd-)L*=@QTM+np?~thgnk|V^PfrRPkcF{*Zef0$M0y= ze|LMM*6(f9`~NeoKiZPg7q4v8tKXB*f2EW9o<|c};eXGugg$pyLVqfs)at0E7CCil z?!&9U{T%53zp++GHFkl!k3>XFs1BL;^fMLKeU>K;)z%_rr zF;&3$f7ZPJuT7A#H4GRA3GHFkl!k3>XFs1BL;^z;6Hp3l?on^GHFkl!k4Af@ezg{?=x(4I_ubc6IZGw!gVZbn8 z7%&VN1`Gp+0mFb{z%XDKFbo(5eghb2yzAZHUWNVtzHP?;r<9u+?EhD_H|QzdX*?MQ z3GHFkl!k3>XFs1BL;^fMMWQ$H2;Wzdf}Y@Bjb9jQ@XinP4Ov1`Gp+0mFb{ zz%XDKFbo(53Gn7tBE2Kh31pVEq3-X8ivPX4(XA7%&VN1`Gp+0mFb{z%XDK zFbo(53rPd;bc3vPPz3tzkHQ*Y0ILOF3~)y1pMKYw6+yyWSU zDo?g^!|I!d2S@0|7{h>Jz%XDKFbo(53GHFkl!k3>XG}H4L29t+iUK_3?AR zyzY98|Mz<1|9TAluUh-CL`ug0ma3is7#Jx|P0@?^&^3HaO;2tgm@av-Yk1i{iX{al zAF&!fhDNt3On zCi^#UA03zu#w``;w)Ax@L^;buu=|uO8j*a$5+?P4geSSJ>$jjEaZ_Ci=(B$wy z|G?NNic}F9UScU%!~3S<)KGu8bT-%UHVVS0#)IXiTug4{f0_odkt?@#jvA>rya$~;o_!|alIgzjG(lfV)_ie@U z^xwSN?y|h6lwb2}cp4loj*M;TA090ET2RB+_~h95(B$;}B~J@$cpBOfEbohI_!t}- z8QKzjgz_~!4ecBs86Fs(?jOUVr^(^LGP7MZd~YibOpc*q**rX2_P99G**YGn^+%!~fr+RAm7#Q0Ys@#{?@G~`lXQo8eidsJI9Uez)N`6+>@G~$bl_?(3 za*Qsi;jh#XhkRaI!{^}e)Oc;*m(}n+GQ4TBIC+04)XQu5!wSOfBUnxth~^bFyba6K z67qIsq&LV8`Mj!z&uyF8G)Zpwe#xgXh5^HXVZbo(Yso;}SG4~74`}`Aom%g~|L}ua zU-g96IoSQ+HCq4aby~mY9IaoD;|p-S0>|8IwEmYJT7Lom?|7@$+n=lTEw9#kDbAnV zuJt!wrS?W;$Yf|fb{vX16z}7$8W$Q2Y+WPHBw4UmN?4s6ZPiSrT zX#K5Otv|Y3>jyV#y(O#ln!MJFIsV7-sXy8D(;G1UzrD@Pss@bzt-}BqZ~X5%O#kkK zcmK)X{Ksv7_@5tt$M5~{D}Sb(!7J~c@>cy1VAcN=SN%_qj0BGt?HJgJ-updn5C#nc zh5^HXVZbn87%&VN1`Gp+0mFb{z%XDK_!Tg4IHq6z?(HAD5##^6yzzf7w$Zj`>m)KM z;8Ck0UZra%t=!-0p-tPjyyTAI(G|<-mv?1-Uw`qMzOk=g^!O$IwUWE$sqGHFkl!k3>XFs1BL;^fMLKea4HO3 zx-p?&_eVcU-h}c0JH7FLJI2^8`S;81G7IpOKXhO5pYOjs{_#JvHo+}85U*AbIOmj> z24MdHZ?(Wh-c|yxJZ~~UUH0JGYo7eQKeHMjuO*P2YI(~}Do?Z#rY_n_f&MvzbR~Mz z3rZE5zx}oseAPM+E-yQw#A}^_EAPg_hAmjSpWi$@GBlN6w)65!&%JxwFct()jcuOJ z?--uiUL46!O>Z9@9?Ns<#JhJ4-0iLGy?bgJwij*n4&|tni2dnXcE4}qSFJ8Mi4KGp zo$AD2_Y6b@OC2RHax6zC?g>@RKRf&9yk4)Xq-v8{K zU$y4oy3e=6@fX6(Bv$n^GVYPm+!EvNkBLh!n>goH$~v4^N9M*e&ZhgP?&k7gmSXn+ zIbL)qUW^x=R$SyfD;}z&bHg(covG=fWEGKOTy6yAvYb(y{7R%|WUfEc$P7$QV^uYn zDV>y~Q_oYHmwk3wVZB?3S*7@G&)oFjibO!Z@y@FbR>9AkuFDRU;6EhkN?HF zU$rv0E=3gQ)sZ^mCu?MQ+we3f@{f#x8<`RtUz@XI{^qY*jc{2?XU|ke=8UVq`*##a z5Et)2Ic`)aT8vka7vti@&(#_8f+BO@XE-zW0(s+fJw#{PU zLUlCGIFoi1-RIjsQji;&QZ-limOuP1GKo)?--Dp9>d2gNO}z8oq5B864h`IU(bm8z zg}G5Gap5(aY%ES3r8BOLw?pj>D=>#I+FCvGnAoPdGP*QIsOoI3sP%j--9o;{_x_sk<6lJ8<_USS*xEr=x|P%CzRJW}wO&5KXh3fI2LD`aury<#vh5&=g}8L3hcNU0-T zUgYx1x!|#J`jh|>%~j~Xxuv#Jq_bl(mQf#Xsr3#1u{G7l@1nJHI z@y|%Zl*Xb6f(E3^F#s+fC5wW0M&?3>0s9;|?wL2l?%a*bJpO?=c%pHYE2y>P?m;@K z>+?l90wB|RYL%C<-#F$#+2p83w34z z;q{6eAEuO5y3dV}eqafBus4eHI9Yw6v?3ny^C zS6q=Y&zoG9Vu!0jDXj>M#VRjev|PF8Vo@7P{0BsOAynMp$aN?dK_4lRSI7tL0$~;c z$*&a#spP+JHY&$GbyHW0rloY=_Y?H*+j&O^$Fei89Jl$iQ~?*IO?>3s^U0Y7x)us~ zoOI8s!Zj=eH!CTm*E_h#tGwmJ;Nt<+tM$;TXB&?wmXY$3H82}s3N)^;F8 zowZu!-=gx!A3a}ZQw{aGM50^41%&~>n6<16zEBzLQfh9t!CCzvatsaH;3Z#mA8rT9 zguhs8cB_>ys0U-J)5=<@x;$7fVAPKi-k@v*^iu+jCCC`$V~$&VXybs4R^%m; z_aK7xOx7h!Wm#17d8JT6;tXPMNim=T{%Mdz2Zw^A@&$#6JPJqV6pfXKGeZm%_dG7) zkHo09SMdVo0rBPFKDPm04Z8xv7PBwqhKNf_M(?V?Bb;%_(ya@LP*z^4WwBlcj?;BY zd;%E~&bv~19s$|iDpBCM%J-_(d8Kx{@k0)&0)*fXmSP+rY+d;j0+Wp)29Q!v4vs1d z@4nGGMdCe?@Pmt9ab&n<;~?5PZ&@+Nw?m|rZFzEV?x0{=is2(Na3rM=$N-V41t3Dt z!;bxS82SXIv6Op{?slyqC&vF+KIP=$1x*({(9uz`<#^z5hBV*-LWB??!%taDl}gmX z2TVacTiKN3Ajya}Z43B!=eko4CF4db?;upYn^zAID2(@_x1|d_%f@Dv7^#17){TEl z9n6aa=D}VoK@R}js+$-At3cGWW=P7(<75|#oTKvd$rx@fsKu`=By7Eyo@SkEa$la2 z5O8&NW8tHtKe*QEMX0gty3{A0*r~oO6zo-fN8ZqpTt-o`ja~XJ|FRPPQ)-XOIS+Kd zQpG;+Jctt03JJ|^mv5+3i(|;O0A5M7 z7YPSjv@sEol(15|fSg5lLT9r&2)@j|k9NEv2n%5T(65(;(V$PYUj(!`h|bKFBe7>y%0%t1-Os zi*HO_10TC2d{hA#RCL25Dm(;+8zDHR-cq0^@+l^tr;}IBxRJBfV%N<=D^h?XMvHk3 zt8AWEtywf7c{S(;fpFX=#6hMi^(ed{1K>|fV6esGQgG0SFa#+WOfavcf{Llx{ARs3 z5fe_bs=g5K$f`>fGBvh)*Ik1T{`SkWNVcQY#>1&kKK$xyQU9szZ0; z*l&TxLD;xbM#7eeG^_m-rIcQ2dt$;3TKPU-3^Ed8h(QyTn35QIY0W!4G2sj@2jz?5 zi>?+`dfnxDpqR-TocUtPuc19L;Q~`FhHs48Rq4G^NzDDoo{P)g-7`_mNUN#)r!Ee> zVfG}2%V7CdKS6x3+T4ny>snEV@;NEKvBec2)CyYM)zM)0c^(|{7%pek3hh$wa3f00}%s@)Sc7Xe$) zz+r32^A^DYRfMPkT!)O)SbTv89Kh50+cZ>}W=H1?kEAuJ;x%6fFaj2JS zs7)kv3Wh@WF8sT^OGh~|6;qT#8!uV@Gg;vo<(pN9r7je_1XwTUIl-u8rJNQd+)vha zJijZJ_fLlt@qFN;U#e(w#=Y#4#&^RdxM`V2CBvBA^YVf{Q>sGB;UKU7q zk3|24b8UHNiHu7Hmj})_A=}0v(XT)~flgdfxM^f;;9l81GmlMLCiCazC3H`sUo+H} zc!fy0N$}dh`G^`q@!uj3q@O$-orKehj{eBd=$7fN+wnGX%jnQx9?S+s9+wsvzI~B? z0Dd-JCT?E@#ud*S1ScV~i1wtyI4P$|HL1y=;$T0X29YH^cYNN(iTft;J>Hr;a`;B$OY^0> zJZ2>9ykL9a+)db6=`J@6r~pdIM5@NNPe)PdSGct$E)gj`g69X${hX_O7Lui$gUDKR zwtI2&#d(({Ix}#v)W4$l5LY~}6WoR}IgCf4!Z>khO1ELV+T~S6(k+=~Dt*Z=m1zmL zSrAzQN$zBP^#)!p;lM6I>|h%Gps>7Gv_9 zLCy}p7P;#MOtqVu<6MkK;|p`I%BAr~AkI=h7W#OeQp70wVh(!;q_2uSwpTR1AYZV{ zUcCgH6Ko2cpFVr@Trm-HS|#j7f^!8I2tF#dRSFnkaE>?G~VqL2<-3!EI7S)y}&Xb;}L6_Om7H zUw^~%*IahV%FBcKcYHBIp{bOprDS4a18$ajHZUvaiv;~zn0E$@)WL512}U=p;-}(A z-K}oDYGjG$+ZX4HPhrH!NGt`m3uXm#g43!;D;MS&yX~9;(0ksv6Lv_txFI}Kj*Z1GLoqNgmu%Fj+DLa;w0rTDGB=tSFCiTys zOz4L$OzOEfesF$LU-hpE{bxT+=;GrE{U3jm(64`OLN9qoLjV3>C-kikCGu!utO=Zrt$sTQU9zS7PSHFd)e0<(##QbKIQ-!Kt4F zy17mzE1$fwljZwn73LfFu96c(l}v?`Kd_~Hg_A!Lt>NU49cwuG!@L?!4Bs~uvixBT zohzLD5l;;#f1FUm$sbbGaAJ+*n+jQeH=WKEPJWNJh7+p*-&EY?cU0+I;pBJi{5#Fj zFkl!k3>XFs1BL;^fMLKeU>GnA7zTc24E)o6OFxePefWO_|1ZLSKmJ$a|6Kex;s3|` zEd6c#e-{6b;{P@HAHjbg{x8MOUoI-mDDgK4|G!D#H?UWa9S+@=EU%iC=?>1yFf^JdndiVQtB7gAj9?M(fQM_m zC5mH`GNXFe-mto2LdHuW!=Z_iwhV4m=l~Pfy? zUi}Hjm-};G9>olgCQ2$_N4LpK>8xN*a9XWA5ydMjDeehU%phr^L|y>5j3TB5n*^t% z1oiO7pmE$cAnT)w5QCwK5_Tcn+T|T;R?vMrJ*_T@NS{nyUQ(65%YzAIm^4u`FM?aE zBBljf1UKVV(vX_qjX~qo$y>Q=Cx<4s4~-7oU+WF^afU?`CGldowaLnotYA)X8cU~Y zR|WE*Tw0mR(EKceq=^#A3G$4r2TTh#369D7j6u0G0FIlBx7~Wf>hR30S4w5J9sZ+) zu~=j<-AqP_O@h-{p;4>aafNL_nW-s^0nkJVTMjpT7!rtO{6Kv05;%=F$F<3nB6C?4 znU@BO3`3xalDPtIZK&6nKw_(4)Wcsf+byda%Cp@brwoQBN+jPGHRCyFGKo3CX?1x- zGP#Ok`tpio;y(8+kUB2!pKuu^k1IrScD3O=LtrM9=I*A>EQ6;8Eb0I0MWR)S&L`l5@Zu5~WW*@ObFiL8u zd93Prgquf(MiV9ZO1QNvVpgzOknfW);|q1K6xs*(9rt2b zw8@)9Td-9y>P=#^b3Xb9T*!epiK{kvZxZ{b-OZiyo9W8 zc{SWEwF;P3JYOIf6%#H$YVu>UVbz+^>B;*kz^nY8!*dv4m@nLaquC3$IkL{*)dg#j z^Fh3BpT>WMabiveTCl-O(Fwm_C#w+qe}rgI}SenXM__@3W zZkDLa-26$#UMhi>ndJ%O8S0 ziPc^}ek}ZO{Rf()HVeVFU`{ZK;EZz?-m8})K!U4tnYN)!rVN_OIQW@-E8HygLSR<$ ze4$`u9MDc@{5Y(~VgYw`!WuuDuSEznzBFIDpUrFG)*3a_h-twV!KnU-E3vdnq^86hDGnw|;s&_2DPmSICwRJZ5|;#Ny@~Q*qD0;f zw`N7G7t9F`iJFJhhrHQ04j10%)SAKJ>8P&r&7R*VdC!G=lOm=C8wK62bKbkRbU;Uh zb#&BV>lV*rl&m}8-lmB4f~|s67%5Mx9VH>&iIbKGWBt(Nj^Tl!4cLya*2sW04o#HE zJK@%$i1mW)f>C9rQTkb-iI!SIZ=*z*D51}T+dM_g3bqSI2~9e4v4G7JTG{6a_nTSc z(L@P;KHQoVF)i3AxI+fcdDw=GmzmFv7&)^_p^1`p7u=c@F)i3A$hEqIDi7O`@nrQz z$YNbW6D8|zxHT$bTChPddg4mfbg!)W$g}#Oi4w(UwM`MTf;qwHIV7n`tLBhG^8u_s zXnc|GRk^dqGTbUHs4dtc7}bL2oO3Zv>9ykPBYNe2%NlCQS*g%e#=~#PH^R-5ncb}7 z`Fz2sc!auZ>xU}(!3lwR))LJmSWaNSlH?G#PE4 zjRq+!wqRN?s<6~Kb1-${6_(Io5rrpINPT)L<@$y6KFGDyi-B3_?y>G6M#(MLJ&+@h zEIj+wg8#aFAdt8cw-xOPs}&kwoO@NyN3xd_K5dUxavQ~Gx!UphtjtUyIh3PYJdu?#@N@K~ zaJSShU{>*bu3%IQ+|Sr~sb#&VvZX;k8weU-k}uiM(3iulSrO|6bAm3le&+LjG2WQy z$*1D_;g2SC?xK`_6yyF2wk7p}KT7BuUZ2$8xGAYO|2(08`Y#Fnz&%Ml|DJ??$GIup z_PmtdcPGa2pHAol*QNBepGxY3o0EF*iwXUAuS)4*jQ^kdL_)v$PZIiU{QvI5NqzbH zr2bQk`=9sug#Lk*)H`~TI@XocZ^qt#i!cYkkNbTqx%I-nSV4VyjvGZ8{~!Dhxj=rb z8rwcPU2B}dHjO5V7YA-RZ zQyxr|$k)TINfFb6je^`|V6aB7)Sc{zdX3Hg5KWY4?ep;G*Keo1h=drrUf&CQ|O-YwMvC?+{Hob*A=H_7N_d{ zwSPyHwA~1>jr);7CNU=%Jpmx2@~V|9R|FHt{xVIJ$USgt#&$z&bci`Yx6$z{W>~w% zYjjYj-Y_~iw6j)a?oV(<$$K+GYE#6lU{3IKCmuq1$UXv%FVej#SKh2D(^7fbg7tz? zm1j!2^sKz`)Cb=JZde0b_ChEqwyvA zlKp!7ZE)*U#H?V8;M3>`hI-iS;?YD&eLLJTir6UFB*=O+U!#)I4&QBVSnKmz(G6s$ zj>Z?}UX`b*f6VdVMNi$v9Z?updj~N5H)*XDJEH2&J}QlVB934bCF9$m`OO(uy3d>QFhJ zxJv1MhCT*&OYH+@70=rRqokK76QC{5kiFdGsDQ?o;>Z>EBuI+w`+)6=m=(+ko_3Ea zG?nmxCnHMc`{CZIi1mUkf_(chU8BXSmz8?!ho-0Td7>$|U9Ma}^NN#5`~ckB6frB9 z6Fl7>PN+(M7bC6Z&V* zPU<&&C!w33OzL+&E2)>^|C3iG^{VsnuKq^o^keM*!yjP3fH^5`{Z>N1{p|_enM&yo zf3?!|afcY_?cVueg^ z!9VTqz~WH%cqi60^XxVmtnhfhXR{jii{bMIEWKEP1+0t3pKIF>S!=NJ=yt4!3EQti z2)E)D`fb>9cuj@d?QppPYld!L`%EP|QBD;1uv!>jUDvY3r&8~4tx zgFL!!hRv1u=PKy|42f6^)BgFmx>EM`;wq_0Ff<*o-waMB5yAkD?j$qxZ=&VZxSi|~Ipe60d<^V|W1Odmr~ zYWw9%=i9&$q;E6g@QaAcdW`*V0yB4G{(~tU1PAxY^$zG|l84@3q1@^e{~8x#6LrIY zVZbn87%&VN1`Gp+0mFb{z%XDKI0*w+T{!sB4H*CL_QwBw)6KX2i+{;u@$gK5``-Fj z5swqi2|Tm0dOEWMzls=C&J(zC=>3(Hl5p;fU{=LnWeofr{WRPx^+&+0;`v;`s2G&h zZxMqEl}&0z)A*8n$$p0Z0o>AxSRcTrp|bgAN`Z+I^oMXeOA&K|ZGzD%o1uL$%FKE? zo6J`E%5G3;lRHe%_)&1L%K1trv%;z^m=TO(wXBEhv09m}Rcf1W@dQ@N_jC1+;cltF zmss$;SrJ|Nd7OoeW208FsWeJ!uLgR=^WsbJCHlEJ3->vSm=$aj+=_{pTHlOMINU|~ zdVDi}XtHt#sL=EIRs={BCH4T^<|$%YaIT=QWy3oI#>qO|OR;yfI5M`S|C*7pfqT~v zzeu(mSh2j~V;OJr?u!!qdAKiB#I)c7!6?BkvVF5B*xNF$w69B*Y$}J-M9KaWxOFOG zvtWl{lP!6;qudMR7j!Nk=C zpCa41s!@+TN}(`Oau306p(17l+XSOi%#H7b>#A*3yLYa*;<8o2NBKPz3=<{$FX1*< z5i^2w1i2?WYtIS;{daC}w_&n4IyF9qjaw#}=nZRYr1>%L)+o7u1@{(3Oba#(Qt^}u zt`!Em#WbVvui82^aPQRiZQP}zs)=~7cTbeSZ@_(yB4!2K1fxl2b1WoReF-SESMB>w zBKDgimY7z=PC@tK^|uW2g24U)O%BE4;a%Tc!O)xrp zOV3c%w~4xUu36I?dWN`F15K3dzlB?yBIX2J1*1|ObGX?OQ|;By>uWqd+^T^lO5}Io z)}n}6!DhkeQ5YW|be$=&)Pr{WI+PMLf4?xPN3a*b(Lcl9e7_6*{g)*5gZR(kfA2i( z2k^S2{>WF8dgW`A`VT&s)CK%MerHmz{d7`)`!z}Z0_*{J_?z4VFsXkuggpTMG^zjl zElK^rbW-P+CiGrAr5CJ7=}){lp>KRNp}*Xf($71V(EqS8sdw(f{{K!=|6}$I%by!7 zsB`DLF_Z8A?fZ#bc)jnBcyW#*=(}*AuZUT}Ho@rfP-?#_KjL&3I!B=ooN;Ff8eg(| zRUX-J9FdZdg)NvAj2hX*9r<(=@+C0q5a@+E$3N-`sFdfAWRAeylF5;*;(5DZW^mr0d6gdm=l*E6ATdN|b1zQB&T&!;GYkU!+DjPpRaWGL5 zpMYDZB4!0!1W$h#Sw$g zqNM#B+_Q?97R(5q;?9Xxv~qflCQ90m;FeLuv|y9q4h-m{zoz(He8jb8r<7A{G*QC- z9c~##Oba#%MtwugEin9IY)xUDqNIrub`)++ikKE`6g;IbmsGL%Sqg%Ql64GjO^TQn zY!p1DjYF$su|cJYlJ)=K)})AO!A8MT+BmdI*5@b)CQ8O^xh@T_#Aec9|pQ-qhyFYp}3C)XG6_hvl5bO{fMFqAEGf5T3X?8ecIJ$k? zrlHCHvCaKpl?kr;3L0l1X`-b53~mb*u|cp=kmTm^t1#HWUOsVmy`Mzv^n8MEpZ%$K zyD!@h&3_|CQgcGE?a@rKqcXNhzQE>7c1I}QhYUG%2|9$b`HK;;@U!_zxLfj$vx=A$tQX|E$k7^;qcMjcK^Pex z^;@T&<)QY8lZ`aKH2139;b$_^k|bNOUN9<2?sMuUsnq9pFGECr#S>F0)hAL5i%r0+ z;`v;`D5>siDNky}qw>`XNxo#C%@{&IOA*t8t%6ZcX1&9=MKY+DcWr)3Pgr&zKS>ng z5Pr5IrUlysqoR;@_}xB6VO{^J$ANR5G(O>#G$bSr#Iz!|3A%9@aBnT6Q;Nf?4W|)@ zKl4I}ibE1|&r!s*V7p*c92y*czy&<4+HgulsBgY7rPtxxe_y{PrEhw6N+0=1Lf<=* z)KC5p`}5tE(9QRz^jk6Z&)<{O`~N$kuXre_zpyo_@AxwI1pHD$za0N9_Zjgi{Xy)}H=f$P23RMU7Hkmg*hl-tv&76{VqP$Ll;>%|Wd2&5 zHwb10+XU;o#a^&kuwAfAaH(KNfqv!+E)?t%)EjA^7Hk)sCpcelv7p{fKek{}FfEuB zY!#d%xKMDZVEnLzEZ8X6COFqU&tHcy7YoL^dEO$}DY!t;UQ7FgU|MjlV3(k^k*;yU zI>EVuiv+E4y0!_<6YLVyj>r=15Y)SAlM>7b&Jj%SrG2YlVwUIif=z6k)Y1gCMnn;nC_;{{BdIAZsG#L*kPWh1RIX>yj4(VvB&55 z0>QIl*SZR>5|`PQf{XbN@ekZyw)Pb?5zGUE7jnTbuXYlARD|x14>KvhT67 z03ifRByk92v9b^fAzVROnnJPI1BFNs!cw4dfi6HnDlK$xG@a=z?M$WVJe{ZW%o5Er zOP`r(^80?i_a6KD%2Gn;>-GDG>zCd>_ndRj=bm%V-Ou-XnN7@QW?et+5n;J_A(PqQUhggTWN@NpIs%H?XvxZeXN$va&DDW<)LWX^SqcD z^KHHjlBLYPk_$h^JZYa~@3u!-RHl@bCX*~zR#wsv|5T8yn-*Q*Aym-XaYkB1Euzfc zX!lU8SX5h#7q6s6+p%ad?foQujB9d|{&&#wlW4h>_T$78ypm;<(|W>wl9FVKMnb>6 zad?eTG8HIOHb>NclB(NH8O9P{v3o{lQ*)Y;^E9Q?8tT)jkdg%IlDp=VWTvEc(>ZD@ zBzLfghg*o&iL3oQR+(1)7_Da`#YAbIH<}&!w9RE%YAeD|6Q(uN8Wz>iT6VaBYn|lS z$V{SZ8ZK{vCM?iG?vU1!q`K)>(yCIsT*mS;CUrf~q9r{&lJX@R)J1b^YbY|Q9btHN zi@QkOLaXpcP`9yqE!3MXW8GhPYX0(-U9Vlz(otJXrN7UnJp~&XrV@^TxO$K zv4Dj($>r9g8Vgj@0xPH&U2aeDU?CSZ{c_sa$Eg=~)2?uwx&ZCVm(dzSTNE3<4o&|+ zGtqmJN}#=syAt~JC+fw+9m5ptkv3eSfroRKBljg*cQ|()a$lm04CgMPqaW?T$9V5N zLHldJ{TLr+%4z?$V7FdLyX|QlcZZsdnxukKt$e(t2JNQB`we-p+fcr;ekx@wrQ>il z@&JHMLdWr;a*r&?~N20%uHTOfL*RpFI^nmHBey%dV%A zPnsT&Kjt0CJnVTW^9^6g6RRCc;|CUyjONIPOT`ff~z zl#n}=2nK^vFxKnqP2Zs0;JzWTJ-A)k9=qOmeR`X+&AlygUGO^Ty4Y6V*7UW?weD*Z z*95PTu8CdkyE?r^+2Y=k*c{v}ZH{g7ZAx!cHo7+^0>OY3i1qk-(i@Zw?hT3c!S&Mm z*gD_3^jc-Ddu?J(aE-Jkw%WHky-Hc-UX@rGTq&)Lt?;c#FISekmnW75>83HZ)VDOf zL|Niql2{yEEG>@teg3ph@wt78MZrbVqS!*;!t?@VfqOw>esI1tKQ_-dFFjY8>ziOu%SPR~+ixo0J224_k$V>5g+($kgc?&*nX!D-U8Shue`?Nz*PZ=x$muF_*u zeN)p@lqv2hiOIpq(&X4A-=y?JWukjxVnT3&G$A(LH$L5|bhSEa`) zW8GsDV}kVfCD!5VNVhBP?)HQy=#e}zx6hq!Q`+2ZiPj*E1dO%#TGGu*v%5Lb6r?xb zu|{8GxGhecX6U9NF!@wvQJK%6qDPOkb;sVeg9P3Z?C2M|CTnI5fg3rta1a-StQyhVQu$* zp7y9R+MiF_U&4ih$yCYbI2n6fQE<6rIcc}j#YYG4S&hzRh`|1h>xU@)r-P8T1ns7@ zOa(1teO|YWssC!JWD@O@*x$9C6o&$Bua+p;LB&xq!;xlM!xFV@F4Rfg$Z0;mR4T8)(5}Qtu^92CKp9X0*a0U{2~-2M zKm*VWv;i`G;K5N0n1NCN-=TL@0CvC$R07oizEAI{2O5E9pcRmu1Q{p>%z)H$t#NH- zigFYKW}p-(11bPJ-~=jxYM>UV2O5E9pcRl5f(#S`W}p-(11bPJ-~=jxYM>UV2O5E9 zpcOF1a@Mwpq8ufF1+W6;fDLc}E}#mi0qTGTpb02DN2mbofD@<$s)1Ud9%uqufub~_ z1h4>BzyY{`Dxe0aBN%!@1LB(i={!LOiUBiF3X}mAfE{oGl|VI63)BORfaKmvr2xf% z87KwHfC|74IDtx_8mI;8fkr^`5u60W+EyaI8mI;8fkvPiF!d0MfD*t0Sb=iD2Gjs` zKm*VOv;cCDPz;!XQlJc|0PKJhs06BkTA&_i1eytkwQWVb+)pS5%s?qn22=oczzI|W z)j%y!50nfLEPxd#2W)@?Z~;|74NwO(08Ky(V2TlnfD*t0Sb=haVQp=QcK|M+3aA0< zfCj*HmQVzg02aUslmj-v0l0uFpa!S|8h|E1K1V19%s?qn22=oczzLYrgd(7XU|3rV z;;leAU;`Y03#bBWfI6T7XaXeXb+iINF<=Htfij>1umet@5~v1hfqI}3kllo0zzmcE zWk3aBCm7b&iTFyO8mI;8fkwd8MJNJF01IFR$^jeD05kz6AE5{+0W5$OC1@$J!73}A9ZUM@%opIhb(|c{ z^oXCLj?-xur|Og9{EeLS^noHgeCDRCEfi-b*`b?Y-35SoV3|};X(XnLZKfq$h@z#- z&tENB=&1{?A$X0P6j48?gZ zQ=8APmrB$JDY(kv7Nx=~DY~u|FiRVxx=NswX02s>F(k58BZnI(MUHB~Lr=!6cp#!a zP%5L;s#>5OD5ES@MHI5)aSUC~keCArO+XP+9Y8xu!KT!1#gJMDbO7bZ(t#`iy7=LT zHdIapCDqge5~bHv02Z1p*Vn9yBI?=z3#Hdp0VbNY_H&Qux6kBtvLQzUU_uTXP>gIR z_*sxzHz!5ZGy}zyUgHExkO>!x;*!dR^cJ85=`KJ(rnXx{*EN#Ol%Sq*l2?lEU3uL*&MxD&;~5!y2GV)IuuQ|fKed%a z(dEa6W=%9}Rc|1Na!|omJcm=)pfo|ZvD)J|3fknJbu`aCk8fwyJ`n%LDe~98-~AC)w@Y9IiyxW7P2UOpsQprHf{d+g}>$z3miHXYZ$2Ji(xA zX3Aux<*9$2(uymi*{W*luRx_L8|K^bs&Plp38riSgDLglBmLZuONw6T-S~&m@A$tHN_rEX_fy}_ zyqA49{%-W0__s3ObbT}VjqKOsUk|)(dOPq|=uPj}{DY~ln!cKPJ@R_$wa9DU*8*QL zeP!^~(5tRjJ+Gu*j=b!BIrCELOyrFBOygb)0r2dFZf?@J)ew+G;!ur%g}0P9~oUKjnEU^-4R^TpH&{})UT4Bj8Q-*tcTzVLmX`%?ENKX3Yc{O*hr zzsq~vbm!nP)3L!jLU*|C@P96QTl}`bZKm4>kA{xoK0kb`=hoDb$Pw?6%;D%^|KaSR z_@Tfd)1kqGp@X>p4~ISBRDbM1;DG7C;Qr8l*Z$Gw*c6)bc`l5aQzU;2V&hSpp&eV>`4)2c4jnNzZH)cce zP#|Oq4F*F&XE50t?)CJhZiw9Ay&S{P_I9eAE2Fd7*i(dC9rqxxP8s+40$d*{0cpvqH06vywBzGd(j?Ga@s* zGcwbo)BV%4)8f+t(@fI_yF=Zs?xZ*D^>|ZVkuGmnW@>b5aEfb6a&maGXL4#%WRiDM zW@2=re`0n*d_rJ?X~N+6(0JGQWM{b3)0r9<8Rs3Bxhi^<|ElcR_}IW$)7Zf=N{6>2 z(;jX2w`VI3zr`oX$TovSWc8?N=#rfMQJ-kMBxwAx>tt%_F#s!Uabl^K`U>9>U{!sVWF zPg$xoV@{RCi=s64VMFWuC$<**q`fWb%|FKfcbvzlyP+XKKUGumj@BsUkrH6J1lBV1 zS%j)1B{XZ)%O5iGvrDXmm4xdh(9Eo3;){j7^fOF~HpuJ%2ABeYB;YO_hlGz){C)Vx^ZXHMOesT678+dVFw~f`Z?)eE3<@I!Nhkd zM>A_LRq(a$gJjm;OSVU3x92u-!RkQ13$Td8B*cVx8H?Gu=qjd~ZzQoox=E1~j2B$K zYV9)j1jK71f3D>jU8I(aZ_XwVR99woL*{m^S87 z8uqwnl!1>{1!EGA9;A;9kJ@lBbi*Xngu2>r4lcWzspcEW%WSy6(v})sq>hVk$txn3 z(hAAjaIl-hWXMljuZUtzxcQQrm}Sfw<~}-v;v+AHNvTj^$+fR{$;Ktqx;KYz+^chD zu&sNB&dfpi!>_c3jmjQPxtf$c5@=;QnNZz9>V`=vl}eRriFA9{`8TcUx^1~OZCQ() z+!vKU{I#}JKFJyqYnMPP)5*NFWY31RTgh;7>EhY5r*(IYkc15!rhJmMB(_rmt;|a1 z5i)pyD;dM2&}ZV6jnbB$rT)#!(8xOu?r<+~>)U%<=Lq)#tRjm{G&uTj5W`iYyoOzK^=eo619%}ZBp zK%y#i@o%+^MxhQm4r1S_Cc@fu{&pNZymMFIp(!^ZS*y@*w5&!Q zQK1e>ua-b7)6T>PhWqH#LWT)PY0_G}W%;I6*Uj*DBU#h=J1uKI9URtMCD6*WGkfW@ z+eeLOm{`Xl^{&Smp?CeJ%^R2b*YSRo;#)wQN&&7cC@O@$V6) zDWBMMN~@7TE3=%ri=_IfdmAR~Ky=DmwqbeaWUp>Fy$G8=Ohy%TfVzo3$A$9!#8M91 znE9%tj`Z){bKu4!eJGVTk#zBQ2-74)gs3_;-73wYv?`{9S;_3BgBM&F7$&8dHV|#1 z{=)}%zz%JK+k_mN)IVss^GVI6^ePE-Fe{lj3+*4JHxw(_mwI>XKg<_BC|lEk#U7@7 zI`b&4nm#)Q9k7boOWhze%Dz;h*d&|Odt>O3YP~SBPX9>DW6GyBpVF!&(7~)?_EJCC zJIb-Y1cxH2w{LG~x3N;N&cl>XXaS{FOQ3^U#e@*P;bxc=A+%@jE~5|(^DyNTT1aVi z66j#oGO?B5=-MzTrE2S;H&DMbYW<6rJ)hPhO0Shb2eXEWErsKrVNxt==Odj%du}&M z!72|^J}Doi)k`3~zarK#@wNBSTn$;-sJ!>^zW%=bWbdi(?6mCY)6eW=v;V$X{{2tP z^25)X<*VrT&X3LV#s|&v-@j{?@22tp&9|84ul|);Uiyw%{>AUi^8PQFWi$Preab8^ zC^gH!9A}m%)RoKMm}!xh((i{aQklEV^2N<&Ir?{IdE!p9{Lv<}y!Gd1`7h;CIdr#0 z{#}H81cWW}fA?GDdxJFozo%4Q*L~O9*A@Gut6J4{?V|ht)--yL+CsnQ{g!6Lf6;71 z8DxZL5*es~p$VCPFP0D)N`{g(39*F8U^ZqDONa~>V+OH=$WUs`AR+rI+h$x|AC|O&{ znVP7`kR$OeZ4r^dW-Q^yh736+{LGLcXIosSl_@0bMv0pY863t8w-_=wjTu_$B?TrS zk&|JCAwy0rPFyO(Lxv14RguZt;vGYVoR++3$WUo4fevUqiCW~8AYUp&!jK`Snps1J zD&0DK7W}LQK5K!`THv!5_^bs!Yk|*N;IkI^tOY)6f&af+;M-NQ{AK#xLBH$hH-~=p z^!ra5OZN-=(n1F2x(zUOH4XpkOo_44!YrOTGDTEA>5Dxp^B4{Cen z*IG?k>m|_2bTRR470;avlR}R>=>b=751u;h+;gyfYCCdhQva^yHnyFp)*4E0kU%T5 zlG!UAWif4G@sD4K(Bto;LTl|vvH#FA<`Y{-=?xNSWxAM!>P2lRwA!z~USF~QyoA8a$d1AU!CH68Ds==OGx$1>VhgtsJ2`Q)#sv`O>{LCAxZ%zW~Alh{5a-+O5E6_}}C zf&ZdHG38r9J+B0z1eb-o8CM@hU;o^uH0NDW6b?((3qmvX$v# zszOJ2NgWjI8s!i=a%k7VJv*o21&>hrA1z}(rQMWXD}h#~lX-}STkMi<(Uu+h$D7nD zZCbW$P4AK|8@))-w%s4JO!;(fqV!sNMh+d&$-E4mW$Tyf>vQ1}I(t|LwDKD}C-X9N zHZ9w%f5&z45;}V+y_sJvSeez#e8+#hP;>C{f4zU*GJ1i3ZTC#Qns}&}ul2BV(WnEi z73kt{AH7lQr|o2zwEnPsL(j7HETvbX5vDxlQ`%3dP4vbI?FYJ;z4T`2bECW+QhQ$S zrmdTLp*G?zAqEm*%BO?@YEyWanw9BbsxKURc}X2GD25LIo7eTAM$@`y&76f)t@9OK zLMlvIJ0#G`bTRWup;A>ss&`YbCfd76rwDIVnDSNbAf|dj_lu|j?)@B9tmoKCivZ9U;lwaG#c!{{@rdaUE8}b*bz*LA?0UWk#6n2dU&4Iihpb_ujH zoyXb@8;gz`!NhO#FS6% zSxRe{Kr7S6#89N2d=Z6ZhbB6Clqhx5p~E}(?C-p4_^8`Cep}ae-j#>4O485wTjX8; zY?g~#={@}di|nyk*Rm<&*^_LKQfu!0b z(8_c$)e}Fitwv0IaY*;jt2WRGyro^Yb#--lkwI(IhD&IjrmSuJK}Rdo&Q!IIju4_5 z9`siMt!p-JW~pvu(WDwLA$5kbwn?CsX=kcZeJDpi4NEOwyqu-E$Rm$2X zfmWuIsY;Fh1cJvguG>nZLAePrYEX!^UPA0EECyO7(9TrFM&H@E327)Jq`dkjY`cWi zYb*s?CD6{iwA99pkQ#B{rCxdDKZLx_QlM1=9ZXd!_sS6WUA$}2uDk+TBYKAC64iQx zwLq%`+L)?V?rw}zN;&Vw*Fb5uz5&}Wp>&p&Kr4TV)x}hmLKHhYDQ7+=?*{@Pdw|CcU=v}&M#VT^xdu`8#^)#}U zKK+9A;=V6k9Fs>>y&bCOPj)V5j$uw<;%Z>DF^<@5wBh>p>=h#qWeN^#ePc&%Pn8MKguNv&5ie;afYvy(Z639Y@OJaQ2A z+IwiUdW|z^32n7rGq~h=%sINSI(#$t#-RugyrkYGHyMUgUg#_+vz&_#FxTnAqWO43 zsBHjVqWQ)fw8Vm*FM0-#6g{w?%)#{IMb$oXVPZkmEv(eXyiphKrN>|g z=;}1LLGik!cin-VyLRMJyg13AC{|fCYl0$fm%wq%$;>Nm*2xArAupO0LTgxJ2~!P! z+Gd?nP<0C{^)YYMg+E2JUYJ@?aX+iv#yqGC<4W=->am9FPwK5apnlU$%SRa#-er)Y z7UW6Yf>!B6nw!q7WwtPP&`|}pgoa5er4xcf+Oc<6=pbD!^W!R$e!uV<)P%aa0mpIK z-OMSvaJ~&#_=wqU&=Tt^j+o!0h;{ri*h$P8%zQP&v&HJ6n)T8M%WKH@|F1tX%ZKQ9VT(l`Am9I2y-0Qh-!;n{-ZIO7_oi7sN@M>k z=zsicW_c$4enj{Fy-BnD&rXYclxzSb`i)Ef#Ie0ND6ME8UPtNt_0j{ut2x3$o^r?w zQllMi`ryC@K9k`x7@mP&Vvl<4ijQ8VwDpkF6Y`ux^YF3L!n2gSjC>Ho#ZEshx02>G z|HNuWnZ__+!V;~dWiyn`2~AX#jUDi?I}td@IiorEBPS*5!p)SYMRoBv6jw_HmW|Y> z^%-_vgf&&=S*DG$mycFIPOX45nA21mIc~8v*+`1L`_g(hcCD3);GFn*&EHFjvZC9B{js3Jig@GLR%v{mfhCOO6^gv!J= zb)%huqby#k-g!M7i4jWN1dESg1#CchY`bxRmfR>Qk(0|xC6eDv?iQ@mK&4k%$hB;d z>ZGbILA|SkY6jofQO%W>y^DO0SNm3xdmzolINFvPoVJ15bRD!<30(EE%Wp2ZmhxAb z(-iNac(wF0X%%@Gqd4;2GwkrEf?})6kQ3ec6v?WtkeraMK>S!*fAYl+JQ(*^#iip{ZhaiY%l3hTWJ^ zchEcMqAq~#Ou6bv!lwGbYNC~?Y9W+pYp-i14_05_EDkDNL>LO!N*+UtIMnsCt2$4TsK6lTXqBm)a#pP;GVFwi&vFi;}fIP@(Sw zGWvjLxDQlQJ~~FgNtNootCG5%tAS#1pirgiD5|FN+-h=F#r?=bK}Q>9AwOKhJ-&k? zhF7mF$bAbXe}VcIZHrdta13oP?1VUi3^~jbrwcwKl+uBac0^u$C^OE9R8X-y$GM!1 zqK2KzHPD>JLuIQz(^^oYT8gv6&$!r0s_Ae<#{%KWtdVA2Ehrhs2jTh4gGI{|D{yww zdBx*aa8UHHqb|9NG|?BiAJSTyv0GTru9Pez{oqwn)NnJId~|-Jj~)!2-z-!PMGWuo zHMGIV*Wq&7DRHh>clbJrtf_Zni%{f^ko)T6~*WeEY%cQhc=g$wNeXpMm|ia$9kOU_*l?Eb!bu#gl5WCLnm;O z96oLsvKJL7YRqs^l`$%+)z)07C>Q0)w^r4`p|vVjs3`ZS1*tVKQ3it>Vo|wv-&(0b ztz2>c)o>Tb?#+jfghdo<)3*$@Ruh#+E|P7nq)EFcGOJfot--aDLsx`QX`*=7P$43= zg|r>2b_^TFDJ)orx~8>PmcT zaU`J+Z1A3DJxj+veDwsE`SAA#$Jn@{rmB=t8aZ90s|`MvX|WcHrNa|>{8NvRYTiv_8E`Dy9x;)pqb2y1FW{vSK|2%bS2!Kt4w(0cy@~kxFo#2j`qv8GHkP?>DHx zT1qU(Mf^gf6wUXd6Y_=pd;U!G)=3I6Ea+)q9dgO7`%&I1nkkYFcQ< z&esv7CrRWWQFDXIrQo9T1TWM?`EYU+hqq>$chwVcUZM?5>y8G+83Gq8Qo{?GOo?{h- z_dMV8eAoM7Dj7};zMuSd_}iXur{43tmwGq!j_V!MH&|q55~Nw;?IV@YYc9K2`n?$F(Vh+hejU&hRxsbkqY zBDZ^Q_k1pOTjpr$*2t~VBZG${hmzs!{?xuKdsocd9A&?Xft%vH1G^)Asa>g^nH{Db zsZb>34Y@SWiQyZ1uIswmxiJ**Z}6^9t_`nEt|5PhD?=+>EBwo&%i>GpO9D&axiIMq z`$CIci#!Wc3*z%r^HOsobG>sSv%RxDv(C>*Odpu$pO)>8cL%yn-Gg35^FQdHnw=7# z5||R19GIBxGxcqJC4lZ)d)zUk5B7=|+R$Fok7dwYJLl@51l7*jB z`wUuQHASUT6tO@8$1uk;QK^GG9#-V%|FqBXgIsz%ec)hDwfqJtA+1)ciwmB|oTUq2 zS+y1$w8Uzv)oPahgd$clJDHQ2^xYYHjC(|67XL-H`t}|=Q;DIu*^YaSQ8 zoVi#RzOrg9HE4-76xI4UMJ$oPPUa+L9~lJf8pXN+uj zn1+&hR$Evk=^wgNoc6kWr9ndE7MtnMC}Nugb~2|h^KB;ebvf!ogL`wTv&x_)wAJd& z=8~5%7wN)Rw4pAnE~vGR%iqepS{H`d)B$=s$UBW_3VLT=tibVSZ_j~4>Y!1Bv#m7- zF|nj*#9vUvaS5EroXX7Ch$SqBMm!|mUF&z^wFWUEuD0SzE_x$#gDx!mIB5%uHB>Yw zVvCRT2`waP@5$E{l)6r<1?qK!E{qdbh|B?ujc8RHab4)PB?pe=coMs?zMxo`1&%Rq z(}hLvFuuzzd@9*s&_bOtsT-_b`b!EgV2)vqXXdlF(M}~8b#Nf3)AtypgtWT3y13wZ z%vrjysFt=cuN>hLgEs;OEwPxW)-Neyp#+X$PGAZxkz4yumr-I&&uI19XwVYcYQ4N% z@_goOU07&+l6ol@HyO0VnhGn2G(|Whu#~BWF+ge;n=Vnp@Wi8RXq?UAU2G|c1npS3 zIggBJzTZ&RTP1KDa|$!BjDkVtLPqRe`aOAzK~LzbO*oHB-@sg{3-|H>>4TE72}^0z z7mfQ`y650}cuC7M66M0x1x2^B&|&7yy0F-8#(lb6fd^_Hano~fSKpr7^66f@#-NLK z$0UxCzoYOh3G8HcF`+x!WsW#=;xcEn*VWe=)P%a)wB20x3?|mWI2oH(_qv+0YQ1Hv zK|&OwR%nj&4-|1fb0u>vGoKZmcF@mv2Y8)9Oo*%X*}_HN%)C(-7F*3&pUWL5wXLA) zVOF}A8PSD5`Hjo@p)mm08x%)2YP0l@6!9Q)60@5*+^E(MisdJ#(3pR+0eI`L&2nIY zS^mvGn&n#_r1AaREb@Kj7P;*Xv;5`{&GHKR{qhH9x&K>aD?tCB{0p-@>6>QxgFh!f zf%N+=z4yPJeswd=@+Rlx^TXJpmsXmd)2{tBm8Y%xS^ofbu4gzxmy<&V#Y(o<#xK>f~ucmr4!8i zbYaoya<2m}Jvc9DP!wB49Gd=_B92R7CvyrD#zk;!}W}r%aiGOxkgGr$Iq1FSgcsiclo5li9`0x3$z0iMF+RbMIMp z8PtTjy1nLd*~^%IUHHnjS6@M`J}&=r%tN~Hr`uk;3u+!?o#RZ=&ienCv%PLID2V07 z_QHWMAc39CNla|7Bl#Z$^dA}JLBJk^l2BH+)if@54s(_+{E3HS-&{~;DHpwgxkeWj zUBb9q6~0lq#h_(uy#GrPizKj<*~Nqwn$Iu|J#RqkjrP1@uR%?ys|`4d%U-~orwf15 z2E4e>AR|^&^oW0>i0u;C$(+QzbdSj0d-ofZgtA(p8C>o%=3-q~wKU7U!Y(E|Ggz9D z!|i-m*9Qs;_OQq{<~6$TmGzB&gO;%w|D7UUk-&+}smwk)w2w9-S-Swm$4%fn#W-R& zY!DOTYD-?tMeks4*M)Jf0;@f3VX=mEj^qblOAj5U2M?;TzMJ!C4;~H{RJ(;0?qnX+ zg?p)D7;bIc#VUA6a__ReyY}tce|QtsPSg-9q)8qsD0wf-M41oj!sz=4Xiqa92+iuV z4t~%virC?TVqa!~mzXc;!lIkd`y>5S_$uJy5rdXkRP1g4NfAj2oXGSt^K}!|qN9($ zfpbXIj2m2Q$6F0@LSF4C*K*;zn7t#ySJqLE7F65E3U@FM>%yX28aqm<`eux}Wu8uQ zTS2*dSmJT!30+w9OJgUwtbX~qf|Ad&%qz^(y0GY%#;$USetCOAvA0;@1LnKBu;`a1 zqHC%DFVQdWFldQ|)qXio`hOG=XRc=UFx7sU@0}m@%Y1jx#|&~pUhS7#x$ym(1f

    TRs|1?IiFu(+8q_RkX4=|~|{{Dv&jGU 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

    #*Cl48dW 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⁣*Y+f@O#q+rj*<=^Y(i z^Jkxz^{C?A1*E=1v5ga;li9?~^^qw&sz}df(z~QH=rv^h-K%-Cr*(CaZ{^fLU>=fY zw3d4c2!EFrJzjuLrk4rfHT)HCM3o-+firrir0bl8=~p>fcZ8&1B_j>@7D&VQY0X0Cp&Uew3x_2*KJB44nu zYguT~0(v>j^fvLqy#-YNlk`FYbTXTmxl~cr?YioWj?P6L(?d%-x|VdDx5U&Jt?KUC z)V(sYrF+$+t|i@9ZaK=dEgibwk{p%1LXY@wp?9*b9QNXi{_Y*CPzF>5KVZ?oEDY+= z`(IGl$1VlBV?i5-b7gt71^r+F)!&fnWC1#vZOl=q&R$?taJs}P4kNFJ9__QKNahAMY0Q#K*KYQ$-nwDsmbDu<_%?3xZHsJL8@Xg%w{Lx9yYG^2-_{MABdfb7 z`=*oO<=R!M{c3^BVSt0w!FZ1k;KyP4xqt(M|GmR9WcaT_K`q1$(9_qrb6YD&tg?k$nE>o!jwV{Yq@SPD!P;QvA0JZh0by4cG*1+ulR1HzOSx6F##(c>3hR6D zhaR(ttHk^tl<=o5Qj{ScR0;o+#x4+`lR1HzFQ3y3MAw=2gUr9Mao*trJPaFDZq)$e^*AIwy3Mr{2yfW8Hv4lPFS|JUxL=l?rx;`MuHPWuPl|9=5*ZK&bVWn%9B**rFG-#pO~bvNMi^Kv<(y!<8CEH;W>2TBFhPPZ8i|e8mnd zKr7Co+zv}CWN@2)GVb0tQ-q^PC89Sc)7MTaJ1J46l_%->%FY!@h~PqTjJDsBo&4(* z9p2*g?K6c#Zy!4;r>I?OAx3Q#Y#;6eb43u(98@G|<3-x71Sj?$XQnqYvLObPjJU31!=Y3c+ zOs}N^w6+JDmOhQ*$yXsLE0qF@p_-E3QlKc1#UgsoJy=f*kIh#W+@H~s(~GIcsoG1` zrgyYcDxbEL9wmZe)%MN7=K3V}?zGWR+DElNDLXJ*RB&6Myh4Ka19{iZiVyUP= z`+tOcf$SX@&37EIbe7a0DS9--@irQSyU+q{g%)sHcQ00nnnDYdjx2$_DrJZg=_#~; zZDff|4CRFus4KKU@yKbw?i{5_yMIb(JMb-wG z)kpC5K$`+BLVa1*CP2Avd2bfxjCOyiwpv8m=9(v_SGUi_QPt?S9`o8Iu4ST>_bF5f z6-MJnzd$j!l9@~?b(GkqoP5+WrE)AXrQtsfSZE9_bTr)~ZfgbX2M8{p87Tdb-~~!t zVbSIWyg;#!&mdTuUe!KnvjX5$b@Vc0v{4T|p2%1POQm zt(Q;@*xn;l0!@HCK&S<5JgEV=-g-=FU07-v(&ZcAW{@BchkyN!#NT zTBXNWtYO7WJs#R9j7j5YQjObpj;Lt`Z0!U)-~!4I5bA+aGL)*R2U-E)1KQ_cIYLzr z!P84<2F3#A`v{Kxgess8aJ%M;niinMM{rVGuc_}L$XGWC)~P!u5e6A z7qE?vW!-K{n!6Dg19)h2b$fwoA3}hwo#5-4#q08s$zCddI;k>>yE-^qw6q-PKs8Y8 zyg|~A8guoH&`U9wC1{?pZ`G$3lS*?F2{hYDpgG?>b7Yp)xM?8;2Y!l`Lg@VeP4=x$^WJPzIb1tZ(x67f8>ja&xbxg__={M6K{s-S(D@&;Wupb zoJr($_v?MHMPKvNlP2+31FsIel6WOV&zdA(4!>-BIrUP6o;K-AMN|G%|GqdqZ!+*= z;>FO5gD)gs2)|%^A@zLZc{e?E5`E79T>rE2X9M)yN#dE%GlNejpAOTLC#k0*Pq{zV zw=w%3jNI?Ozi)5+zQ`SYw?uF5O@@+#4+kDf?hWrv-fg?9KN0&>`)vpI^zIJc_~CU2 z;_qF%|C)VQKf1m5irChk%`2jv8^h~EYx}yxD{U)ND zO>dRIyuYl^5p{&kbHQFW0|?MO&7Yew9~g9aN)wZZTLa~(tnRf2XnH`I|Izvm~B1E5YG(WJBDv*H5BsxZbPNtukE9)jNpM}#FFPzswH!nwS zW-k@cJ%JSc0(3HKnYnc7vu`oOs8Z=>8rGqgEm}&u(3QmvRLEBhyM;$SGxV=(LH8B2 zw{)-1$Q*pdB7<2N)D4UiDKkG6pp#k4%$KFN^=qsuOMFE&z2)#-;e0pkE{$xan|9qB ze4DrSbZ=VOy{dba?~?7l4c%AJox62wFWD5?v>kW(HqzY47Tn0&yq#{_txw+qjI3L` zW&4PC`;5$+@AQrOrroQSVp7HSZ?28kEHZjsWNPCqs)wlpbTYlnT(tq`oul>Im@|6` z`HI6~bMfryrn~Z&t)()A4dv#wD@}Ke4!&L>Awfz)vjFKc>O?OyUqZ-;2OD=*LXbV9 zAAKXQV39b7M5Z#!m;q)k!6P<|{%nC{ETUwbCcrZ0$;@2I_?U*#Z{|%*vABqmaRRfP z+0M+Bn8PrPHb0;8R)IuxaUwu^M1V-ofe`-bj+p-8;ycLboN^BrM6YY*`{GN|tZHw|ojd zBcFuN$fw{VZqg${(k5+^CPJI0Y16bskEBg=2yv3;BK?2A0hR=p1PLtJ|G)qL=MR4P z#bSWnH#58QW_RYzdxbJFRj<{5JV|c)C^r`fU>WBk&O*7FlGp0NKbbHuqHsIqViqUk zZ00PK7g)9ACfajT{7X7<&$VI2y0x48uIt@@)2w_g@x@7m-%Y|*0VGdzL?34%;jo!< zXSKwdwQIQ9*!bP>$w|aMK%!;~AmeP}EF_kKeMQK*GL(}hcDTD5QBXrkolq?kQ|$o| zW^6>v;Fok_@D*NKfBYbo>PrGh9`uM!oD-Gp-2!DR&@u1wb*^2%a*J;t<%=7!^ufSp z54u=-*X&_-k(tcOti4RuE~f9gUA~p;*ZP*6eYTH6%aZlWjUfuthNCRzwl>uJqNu)> z5=>>jtg8&Ia;CM;g-`!fCnj6tFgY~QrYIbxdT!UNYl>UF_Kd!fG*Bj&fWsj5MjwF^kz?9mU*WvGWZt-q-kY) zmgIN@ka4;>yU6h)N~e28C@vQLcdgSEu0J>BFMRs70^+p7^^>5P0_f$O!MTTmKlhOt z-^j~zsYQB|Vgg?DQ(5}vPsnfIphfzxhiRVvHml?zpMd4xb4jn=B1>&st3O;3%Ug?vi+YVGpH3wwr_?KkKe;4he z*rY{qtMo@?18^Dr3qG?D{HpVc-_rB{ANFVSgXjMl-M<*gT*MYp$WWTD(w@HFuD zS>W*6W%Mc?zFq(sr-w5eHi+9^jvSHVj8W~;KW^_kH;{i#vXET1a!sCLxA5sV3&_*1 zqvIs$3<30V&g48umn^O%-7CV#3a~*qsGYE3Ju}{!`&I$T+L?QcO9s6HIFqxm;$IaIsGY?3Nz@qv=;fTr*~3Ev?9|B<=p>>MP>b8S=h|z>Z*_lNK%jQ+KI8&H zuK>>EEG&?$#PbA>*X+JsK%#caAVuU-^yL}nb7Ukfcgp^zz~Qx1_BlFyg8(wldQPl; zL3jn-OFL!M=9aEpwrres7y0x%1q5p4`2sHwSi~zb@|#?F{Q&=v&Xn#}+RR^zNpyKN>Wn(K9;Ea1H;%B%=SEe(V-Ng|m*cuxQ*tsYsr9!$rI6F&W?0^+pO_%|e?S^z6Jt2nd5_Khi>HG*{) zyLx-~?eD@c-Kf(xP(YNXo&S!6cm=SEvyl_)mHNiH6}3ldXcbu(iMest{CU(LKt1o> zPs6KpfZU}L`7~WXrl!vzP2_U)Wf|vlWF#$jZTxeA!)w>Z-_zmi1&{*45=-{$dxM;z6U20_TUkgaoO88GC zt6l(U*%i^lSwsm*;CLncw*vCC68cx5UdtJ4`=ZLQL%XfBZEIIAW*B(es}E|0AW}hgI!(gIyP)vw}ysJ4)FdX*ChU95`jM@Q8NXQan9f@ zG#o^|0`&}h;3q3|$=Y?aT5m&_7Wi{LvX~S7qe(=cCZV+g$T({_Cn_r@yYkAKC+j~a zk@YK*(jp1tsj7vIYXYlQE~f{fuC9aoXjTa0FnJ<>Jc-C(ldwtw zWSk1;L?YRU$UHeenMBSINvIV-##zZ(=nNu^m_2(2dFgaTr;p!%QI-xqDofHOR_W=# zr1*S)Y?a<@q-XjclkffptF)E=e`L2xhspoHjoy#{#v(0TX_dZ4cK_RcElWTCFIl>S z;{KT^2H+DE`>*kkReEEiRXYEd6c_Lp7U{Zb^7&8i&$L>lGpel8N0nA-)6Xr^_Yzhq zM9=;i!74p|+9Ihgdj5Aw!o0gT|Htph{{PD_=jFAZtU{GFJfY&`8lfYS`%a+`tO}?F z+(13x1)6|nzz3*63(yJ(0|XI}025#aEPxDH0UN+=aqQTF84fE4DgX!I1YCduR035% zHBbZ80(F2J@BsBd1JDR~fhM3C@B!>Jp$1R^Cak58KrK)QxB(AP4>SOcfEQ>2ngJi6 z0xf{xBZzI0a%+en1?eM(KA?fGg!1U7>_d;eKXj*GuUf0n5na70Lu?(ijg1!5&-L8CIj#e z$>0`}!4o8d^G62Xj|{FK89YC-Y5;y88QeayIsi@|nFoN&N7ewq;Uj~;N7e+u+avP< zD$oLmJp>7WgGXit;NFqJyCZ{hM`i;UU+eu4y;05f0#WWWl*ry_$(MFx+G3=S0;{3$ZHQ)KX_ z$ly$oxd6CQWbmZOssQ*=WN@R%;6;(ai6Vm!MdktEL6O0MB5MTTK9My6aGuEEJCUhC z3(yLPCkgP8$jpERkO{+j#)=d;NM!Jg$lw@}!7n1K0^snF!P6o00#&n0 zn)N{noQpAd3}bNp#o*zKiQNP^-ePc?MHe6eKByQxM^U{K;JJy4PH+MZfN6kG0eArG zX+j+!xq@_(01sdyD_Z6RDuEin4S0YSz}glZsn06H61R4Q*H=zzNM+h#U36T5O zkL1%qALz;=NGAvmpaEbf32s0ItOJB9Km}ZcM|FVv76umDuHUC7N{c(U!OjtSb7Kw&Vu025#a zEPxDH3B&ocA%y{UpbRJnDgX!I1YCduR035%HBbZ80(F2J@BsBd1JDR~fhM3C@BzY6 zf(S@}2`~c|Kqd_5(~1-uzyLc?29yI8fCF#>E=2uOelFas7q2CRS$V1OMc1ImF4zyUY` z7oY%@Kow98)Bv@BhhV$79-Cfl2AZ&`VzWb}r%t+72`0b{SO6KY0ycmFcAyL>2Pyy; z!M0JsW;Hgitih%mn^$?TSr0S-O-S6)jLjBo?iO9NX(rfiuwYXLw0HV+^mBpFWj>01 z6yR3P{twgSK`-z@`u*7Z{`b>~Xu_XJlMlVXiOhTP_k!<z04c&H-c}7ZzRZ{p7MI~weV}|Ybo-m=YKWz zO7s==mDJ1Om(`b(+^b%)KiseMCteD@q`Z_Qzk2G6sTZOz_+LmrAA3IVeCE0MbHV2# z&-%%;UhG)lSmrbF&jiW0UgDY1Gs-i`r^Do3FZERPDgRSx@~{_pGV?_IiQp3=`Pd6R zt~{QMg<~pt*%QdeUg$C9vE-xSM^*B&7k$M4Nc!Q}!vXTM7k?=DkoZvI!4P@cOCAXy zQIDj^+n)b{^!>5>1NUd{i{BT#FLJN{-t;}Odjj`l?vCFbyj#3GaaZUrg*@(sqiQr2 ziAMb7b1!yh;Lgk)@jHU#buV#y=yv7yG)Z0?G3b!V13EiUHk|fW2>dmRc(Zl}3 zY4W`nxG8feekgcIB=38ngUZ2VU${>t|9jB`{sZaWSZ{zl@WsQyaHPlIlinXAAAFg8 z@qNL4;=TlV;Ztr*?hWr%_om1XpZ|vR^|9*%*Jt*`_XPKddlJ`$u2aYtUwF5=J9Vva zZDLnwmqNby!aLQSsU1=B$Cth)c1_@#Oejts`NR-xzm@JJ`Q%f(QddW>_FtVQuY7^4 zGTYJ6~o)d_!=9 zxFJFQ`IPm^b>VgDx>QgICdfaZ(wSTvUaPK6k%vD2n)K?}>cHyEs`#qlDsfffiqI9x z70JuPm#dejRz}HFUwTDsMPNl{d7OOpMaWZMx+B&R=*TRMldnE;X<|ueiLxX~-ul$b zQh{i|A4rqGzCe5C()gvpOT|kQmxL}+E=gV-Ca-;|i=r3#FG^n+Bfou_#qq_##p2=w zdG1p#NS+@)UnSpt(ewOd&mLP8An$$gg~5g5!o-3Q`R_~456@TUr{+cH`RAqmF@M0H zX^Xc7+r+lS+|XQw{P=~>RnJY$iO%tpC%@P^fpaov$IlLuFTccDp|g~;lC#6)%`Y`8 zI?F#ReP)dO`DMnPG*g+GoDrU(l2^ZItG_kf5^D*NU%$8-R7Ex63;7gZ zvN_zWHm91R8coc`pZWsj2Azch=n0L$3o~%C4h{xnzN8_IH&XR!L4;2>&aG`1|~;*8TRfvKz7PI`ex^y*iR-APs2|% zh6gfEg%bn#Y(9S$LznDZ$B}r%$K*p(XP9%rSel$502UX|#@|Tl{ zt0O@z0?0TkIU(){6u@mn&Ph=;mm1m@6vq);*EmD}ans;l!D`cAQB#6pV)Fu>huHb5~xuvPoTCd4(JN?IfZbNa%b4 zWSljeSEH6-|OUR`N*EvgC9pW~^z3>8w0ygA+=lWy6%Uu7c8dzDLAICX+Tap|l&hoLdV@ zgS~3rYf@>SPAKgTF6T%=Y1EVFzepP9tB38uXvP{}^G;qE5**pzQWwi#qfgqyT*#9J zMOkut<=#jXHI@-eFeGQ?d@AbXXgg{brAlXHkpR|l&gCq0QF^FDqAqF7McK7){~j`O z9(!#{I`LX|ve%}c3tPacWi0=F?6qkY%mSp~SGf|JbRx6^XeDf+vTYE+b2wLX7Aj#& zWHuSg7c3zaw0BqE!QOpii)z;8L(5mTsB5{@b(~rb^WTdqszoP4J3zLmOqfZ9JR+Py zbZ|Cs7AmSEYve#DbN>yyx^4>f9oRokv1FZ0Ef3jZ&EgUkaca5Ae;->c*uxaoE);8r zzqDpCTG~=BXI(*QRPg-Qr0v}{p|ox;XJ0{SrD_)%kL0iM%NFKxZYwCQB<*6KP}H4V z$o&OH6{}q$gJn87TJ2}=WK6bk{?$2QGbdAA0wyAJpC&OXOCs_W(-vo{ggTt()R_T3Sb%MnVb_TobUD;=JdKs$)QK2f38HWz6~CI3aXLBSCcKxtTkBpCt6;_ae_-A6)qySk zHoitq_nX{D*a6&fi7b70j$JxEe`C`o17b-KX%hDNEnD_hauMJ^$bEN;YG7{`a2zgn!6g zC$34V=u$dRvj8$qg%dVBy<|?Ud*Q}_^nBNbb#%{4eyC^7%C6&>J;$GS<_DEYWG+MI zg|%EJw&w^SZl8CKV;P0Dm9*|TXL{d-MRS@-jpi#Cch+5PU2Ww0dROm0UkfdiYVqCb zqjgo}Rk?4M@1optldko&a_ACTk-%LElUG-Cz8lD1l^SyH$<)`ijQkyAHPx)Hr3d=> zm$S~m=Im{J_p4_6xRKA;HGCv7+nwuM-FG``G<#}>Ds|PQRolc31Pfkv z(dp4^2^w9Xzq~T#Nvbj^=~}u3_F?QM|HbbP=~-T@r#v~;2IcJJ57+uGFt@HgcNX%* z)J#c?zVFMbSDfJy5refl5n2UkPt`%H6j|6xWCFJ5a87gy4-|C?`~SCG!gNJ$z?JQ% zcQRe}8@;4)9KOH)(yr50pH`jIe`&i7N-Fiz_862?;-y_bB{9WZ+CvQnMf8!W=~n`^!E#&k?gx@y&`dHP##vq4FvwqBn>IVHAUbxLB2 zYP~H6MU>WhTMbJozV!~xFf0U$$f`B=oQlX-MDs>;#L!H`Qcx6|PD-94$`dkphE9mK zm!^nzb4Ap{6%n@Q2;fAD$R!qY$2Z)6-{^?gx zvkXcqRYA=*D5pdPb=H)`6s4ffHYlPr1$B;LDa9x#t@)Pn{F1vNUjyEFF4Pmd^X6O8WLZ+J|BRSZEyJxwtI#_0W81yH$Fv;fzOz$o^k^ zJuj!H)(dwiD|te5gzW#}{~zvg$&08c3Nt9lX+BD@0Tn${tbh%$17&~%s06BkI=}-o0F8jPeXZbR9Aqi%tR`zh zU8y`{lbXgRNu6VMw2e(FADiSFn^ZG4se#;-T3>Q7UeBh1)l{~2%Dsppl%3q7<@qIt zo&Q4a->OeC`L^kkS|ekUl#^qUtmHY=O1_Nwfg8z_D}A_wf2brEuFlGKf*WW8>d14c z(+xBNu+GfYr?wZ2Gj&PLCsvTlS$<6ON!rVGqC>Ef|6-ovII&W2Dgca0`JV6*o%Od} zPFCC&?lPMHwu(MF5hUK(2q5sg6QSOnh~hrHYxZg_M>?XoJ6!;xu{+H|CtZqw6HtIE zp5~%01Rr<008<+QfxexH@a;tKZYQF4I}xtiiAdZ|AJ78K01!OesQ^^~Vp>y$5qtom zOFI!V+KE`vPJ1`mlA~>nlnhaqowWc0COZ)+*@+OzPQ*HPBFM25(T$x5YwScYVkhDN zI}yW|+6SQ=Z~(P{8>k1$2apE10qHcs49I{Bs06BkT0nFK>BoQ%kjSiDms>j}Im-bD zP}xRk0(^k2n_vgZfjYngGyq<}e2UNnSWgoePzBTg&43ED0v^{o`U%;eJF9>izz4Jd z>=dC4r~upqU2f}<-U!r?t-4e6t)~hGoPYvU0Zo7p5ZVY1fOQk9fm%R}5KKS?-~>EC z1KwwAuLKENv%1#q104GonGy+Y44=8tS zpv%TbZ~>J-6Ckz`%76->4)6dCKutTL8L)N|7*Gw=0zRMx5W2}0e)M%)MoG>JzzMi| z2#r7!U_VMI2ONM0XaKxGGhjbOFb@zEpbGE;%>b?4qkIDufXzp!25JGZonQhifD5Pu zs)1U9F1JEArPl+t9)caH1>ArbA((&)zzHY-J4&bmyg)Nx>nGTOYM>Ty1Fe8`f?x)k z0QnTb1yllFpc$|Z5ExKK(B-xk>F%-V^<$G72FPJFA|nL3o@}I#PDc+dd3l|GhFyN{ z;1o@TCwY4|>yxljk33pu4}rycPAt)*91yUEj?N1{_LCyT+8-xY{7`p3eCQQ9jb1i3 zspTloUoh9RR8a@u#Ht-~^;L0t3o`N}w931-w8rpaQLcwVmJsDuD*T3p4{|orEf&24LOz z2-E=0fYd`k%zHW^1VpWORsz)kqRTsL`Uwci?nE?p>hK8_Kn;Kz;aBD8mdCHr(MkM@ z9i7Cl-_c3@Y95`$ukF!E{7N64#IO6&NxT(|PU3B1bP{hNqmy`h8J)yi&*&uHmPRM> zmNhzwx3kenyw#0P;%#tr5^s^ClX&|aoy1$~=p^2DM(NPtTKVW-P12eT zwbTFK0;wsDYJvR*)-6Pj`j4g`i#-;2Ec0mm(cq)vqlrgCk0_5M9}YjPKAd_e`jG#j z^n1Zq(h-M=3NH8Ks{C5g> zoZ{;e(zl$rIYMg@gqsqFLWh(?$%Em8>cLcBw9ns{J`g()IFRX$_Xc~#-b6SQR>H}i zaF5!P+8^ET-=E$W+ZWiExiNlY@J3$|YY?K>`maszitP&Q%Iu8q4DJ+nCU%5&C_9qZ zgs*82WxC_t!EUiT(G}`ax{_CiuU4;4T@}5`e^q*WY5n7?FNG=aA zSC^-jMJHK*(BB?x7uyq;hAveuO&pILNrVR)gsFts4Mz`r0pKQ=!wKQmABt{?I%{$yLYO>Ilf zjn4JYO`jV(H*judPJB*qjyNZAPUsxvoPo1qX9dp6%#P0v&JN9LJ2QPo?2P2hFs&~* z+S=Wsv?SHAs;Vhp)aUnwnqy7f-nK@e;gqM}9dwKCL|wY}L`|f+v&vU_+I7--)X`m` zR3yv8()&;F`4B}ZkyoVLU)0ZYalHwVq4IbjN! z6jM?PORAI-qoSWCfS^Y}V%JH@8!yfiGU(R{(e~2Di+lNa@vVHk7~69MaH8?z zSw)Q(FZdrhUaXBDFUXD`FPQG}s%f-&RB^K_>{J1x^cjy&I>q*BL`7Z{XN;yCic zDTyg+9C?vJ5v7eIpJ!M~G2_TNm2$peA*JZx3k*vsK?g53ETj}2e4$|}#p~dqiwp}v zQOY!xoqZqGoh(3F?%ZE&SPF_#u9K42o#Y7_yhJBN+e_df z4#M9x-PTGgaz;rjVCO+vdwc^tt-CO0y_9!sIuH!=a@~V}O!si9u3EKfp8oEk-JqmW zyN7^5IoEO9AH9KI?iMP0*7C0T%M44wHLvd-a@RaRZ+SwN7!;E2>GWny1#JzNPDza3 zj%hqw!=Vm?BCVlrl+Rai0Q6x3KltrfcJ)~bK{71TOw`+(pwsDj93Aw&utc~1y-D%KH%k=jR8w^S+wQtyHP)<>O!|(&!Cc{$3 z_6-Gf@MeQTO4PwyrX;2)9ekxh5vA$it%jwPpo6y=7E+21-fmb*@j7_uD#Jo18{5bm z#U8rauoM(!g0YP}A%k5yA^Ps*Mc$pf!MhV|&k?|hx|3qYHs($HVnTg)!aviK0#y7w z(&FQfb(A&~u5}lA$D|{VyZEqMSFKt#Pk;9iGAOCk?%^7Pa!TtSb{LjYLie!Kun;s~ z{n$qSFiqZ#+R!e;Qcx6q?~pf4lP~02gF>=Boqlkm;4sbZDT&dq@)&QJX7D7E|`yB{P!%3)^2sRaoKZx=bn4+L<%ey$;Q`3DsUA=)1j>I z=rL9~W4=l|r{uKX(R=QQd`Ndpee~?_K`q=axQ0gr z_UKNocCsf|hi7(~rOUtXm40}UOfml`CICJAe?-szon-U>BYNh)>p@v^zbQ+}!!^?O zEwc10dghPOv;W!j{uO%m@1|$}L9+ROnr#04^z8q2diLKzw*SAOXa3$^w^Xr?))Rze z=`wou{|9>JzqyUp3G~qOzfTkvefvk(i1hq_>h+Q5|E7Uo@DHV~5x?GG4V0>;Z!jq5 z5V`d_NZ!vzz2Jb2{K(>z1_42sC!W9t=l zzTrdO*zM4M!&1;4=rwiTOjVwc!5*Cu?QCi@RiEcd^s8KnVtb(gPNYPiE=q~c`@dI- zX4h70W6IO5R57SrtWw4DYuu_9r(8!`Vpw<5wTobKoq8;R3&!6pq!GGSf4>b zB`UFlQxa2@5<6s2L}^OwCc{#SS7Jkl4GY2Tx&CG|Umxe+Ip1tp3W}mPcgxeqc|rzn z(FxJ(8p&*+qn!+l67-qX*@eO-vGexPsUIsB}y^}Rbt+2uc%BQxX%XgE_> z>Av67i*K{}(|w0b(wACZb>C8k>C0TUOY|_5%O>)M?2J?xa)K1CzPNBo(DFc=Br!`= z7r$A~cTjYz?&8ocmg(2qw;7aFs@}fcpq#8a)!%#;yeGWFpqK;HaCeL`fXLkw(s@Sf z%--D&-l-FzZ@Ax~X1YlL8Rs0%LJb!_wq_RP`h>sxO+-s^p7UvJu?j6qZ6UOKK_=jjNJmrIOlLq{rbqe*&n)Bmj^9R(|>*3XHZhn z*N0Yp9UX`WC)-_9K(ewYG((`}F zFH66r=l?MH3dJo3K*RgjMM#ELSvPX*%W5f^8YF0yY3E8BKNo%Nb2rtZu@ZMiW-7o3OCa zgk|fdN}vj;25Nv>pbo&=M-x`In;L*dzzZ}1qR>eh0kAyMgvIYBtdTTf1-!`yFaqV! zj_op_9H;=WkkW)@@+PdNG-0j02}>$XSTJv@0cwFdzzukSdY}Pl1eySm2FpwmU;@m5 z1&{$7zyLc?29yI>wrRqme99qKZz|;b?0y6-ilOO^T zU;@m53|IjhzyLddm9i%IK`=Q0C*T4Upprm2#7bHd{3MvLoYn+q2_`q-0qTJUzzZ}1 z&43S3ffhjMCP;t@Fas7q2CRS$z-nC+d@-2HfeOF@H~|-+0F?k%^->Pur@@59y(Tzo zFu4H_P!BW!jer+u0>53Q!4D0o4FjH=Ak!H-U2K!FD~+05k$#pa~F860jKBBmr0vZ88HgUW&h8fa3(gev(kd;kts#3|M`H zvNl3v524~H!3&rN2<4{<61lP=l~1Vf5zK9bW??l|R2!iI5IPBVpuUG7^%EFS1vCQ< zCkVEa1j{Lc6JWv`ssNy(jo<^C+X>blLJQ!G5b6LGupC7iU}{@URaS1MH@a3<(sqR^ z(6)qxDqf!sFY42b`m9BL)}ks~fojyJ^(4WCs%!w9sLDowp+0S>Pg5Ie45;iOxQ`N4 zzXW&q~X1pH&W|D)hX;zx-OLmw(1CO-&&pni~gKguKh z#S(!;=0yBN@Pv3G@m}aX<-O#);dj+{Q}0CI@xPOPJN9Gtp=K&!nI3;qm^upHiOce=_)__+;XV&=blN$;ZQwtBsOa8>1Wj8`B$N8v+|L>*MQ#>&5knb)j|2x@0gs z<@kRC%VNs{%Q7ADj$nt_kysj9sw_<|2`^EXq%MnI=D#c*hy?f1;Go%3list&R5P)o)gurRYAz96_j zT#%R_ny<|7pBJ1b&P(`b&NO37BiBdugiHevM!t{jy&lR`*v5DsY zfBQ!E`5*TGGb0)PAvZ>Mzrm4_5=XQin39-cMzn^G7!;A6K+?}q<rP`4{sOhNYk=`We{* zbEQw}gy>uC-%+bQB7lr@4(HTcZJsss&{MiRXnC6cR{OL;Nu{>hXAH_IvDJQNN@9v? zwZ{yKD6Q2#YgkGNt@b&?LP}}1&l{Ffe5)OL!LSe%MQ=utuYmH~<%@=;pePfptjiNJ z_>xYDUIG0*sh(#Aka5o8oVo(ab2Ty4ugim$r|DNfaf6adRX{HrlvAPtdSyytic&zY z8Wd5Q0(#A`loAxs>xPAtqJZ8oETsem^jX6~N>M<^4NECr0S&!rSO|(ztjnCY3`;># zCRkR+^_ZqKOMU-<{QIw_b^iZ;71{LPNNe)x{o}o|w2tike@yoNM`(_}h35FbKy&<^ zG{^sql{RVjm9iv~zyIgS?tjsBvXr7Z{~Kt|-*z6w^*cmy{qB>cZ@nfG^-% z@oZ`M^Z)5j_=lXG(A&Do)QYV=YJQJ;i^BrQIOlLqwa*~eKoFFBFndRr2Q5$2-)FpQ zP*SOV#(M_kl(yFFgkdRY2>LD~Z-G|+$w?R#lI{NV!zu+$;@+Q<82uWC@l2kEJ}@XE z+x<=SsF`119~zc2NuQA?Wbh-M5Phrt2WqcJ1dwsg;hcJ_&3~r;oGuSqo~FOmer!-u zsjc=849Y33)qdWvloDF)7Yqt1vDNhhrFY5En=mkdfORRMk3 zpq$ba(4QKXQi1~dGlN1(R6t*ul9-|t&{qwLC`|$VxnU_KD4@SEETj|#^fkj$idR5G zUpFjdvPaE)74r?lQc#o$9yRlX4F07~h+dceBWcmY0?0V$a86a1k_QtA$~}U8Q@W*?$wQ1NbS~{@>G2&;RW< z=|{U}{MbUz|F6H9%_g4zTYdS@|3fLm)l@=f@K=U~pt0(oA#-EwSqC{NSneABYr|4d z6n$Ti_c)w)<1_SagF>?Xn*JfO;N$S$Oi7G>!g9RF;lc0dL}*vCHuCdNq;PH(K*qU{ zvyj?>zmhpctq>dbSCV(?{#KV4EpOAWe!go^QmN|a?+nT*c?J028x)kiAoYVl1uw|& zO-YQt36FO{4*i2c5!o9pef!OyiOU;08T!6qDbN!72ApRKkSApDA9X_XZEJv9)x!eF zI2UqGy=@JnO zZT*{JDaE&~p&u9)f}06_*O;#+^85K88kT~h=*vj7X;4nK?ZVD7?-eQ7FaFq|m=c!q z|3oK3%a?Ye_5->;9v6PduM%v}6~IDQ$(h2Lkq--9B^v^3mIl@>?OL{R&62J*`s-TS zv25jd# zEn`lOc3$)3{M?|N142mHJLa*^CE!ngmE?*0#Gtrri`U;jj&1RIl{>-a*YBWp{X??! zi$`SXVfy#|B|WdxI{#NLREGWihsg%ON;UwuAGb+v8V7iv=Kfcc4ZsiS+5aAz`}f`? zOCLThORH%9|DS38f774YqzujbKScBYv&ip%lKlQ}c|w*>)7<}kH2448q)mE;*8jJK z$vecAe#JlJuDM@KsnYbf!{go85B^doLaRJY zfBgrwl6Qn35t)GPxttT}uWuEpzx>7NFMrpx=&uoNHHju8&9;F@GQtKqOY`TewqNOL zORK%a}^r>9u+P zr}dhq=-?ERJBQ3ybQJTQzqDs1tvaV)(TP)%MCUC3HOW1kWKdSAiq2$EPN|B{Y*3Ct zMQ1T6u0%yAPf1Ksiq2|KL}`l7W>`w`if)J*7J?BMy+ui(5f{5*DJY8Gc(}lbOPNlH z*0QyG(VtOk|CVr?$OLT9<(x=oXNuI>^NZ8j^Z&=`Y)y&J&nfZw`AWQ8SD#w_PQMbb zn3AN@l(@s7tWuS@)1aJEmAK2G9D_<+F(|G?C0;otF%u~9o?*BDRR%@mlz7v7X6X+v zAwPaJCh%{A^t?~w0X6i0{2Q`#DUAvI%w8isNU{HBTu*iZG!Aej*#rFQeDdpen8po$ zP4)x#(^>)g|JSd`(k-vc(uKdQlD@bu+hy4GrG7aHHm>N!0BxAgp6Q+j#tk$kP3cau9*ZMX(X=wNCL3n`_8 zsWmL6_zq^M&ae;^MQ<^be^&BLhKAgRrJyJkc_*GWwLp-#L(da3=+Oz$_R{*wpOaGk zj_?WZE3rLS04M4z3r1Gb4Ja=tuCH7$J$+@VqcvKGIQ&$jB@FkFTEc={m$@Ln%dFQ` zt5(g^-(@yTNfMpQ{MRJUJ&gusmD*)`4azCC%WN_z$6%M)Y*1W@U8ZkJVkYP^=}O6s zA*lvMl=j@yVpvKE-BPPzA*FOnGYm^9p<9}1SV$?|(iw)O6yGfkooQGIijo_%(=^+t z`=0!D?6V9@K~Zu$4@=2=8qE_jI9n$~`@Pn~{*rX?hr+LjOu+VB&WU>1?-cbkO3N>c z>0$A+X_*n<4v*@ zq;&v4T_{WU(>eh6FJrSGXNL)tvB%+tK6Ygk#)}9_c6u|F|7JWt?!6+tE|Q*?JP&bpv1% zXZ=y~qTeI+gEFU`vz)Vz6M+LrE+;|DI4e2boK2i!CqDwG zh11H(ILkO|IO{m;IU6_|IlY`soQ@tG&B^KFR5&X+t2k>p>$2&QZS;FLr|slbwC&?m zIfVhFh@2+QI!-sI`82+@a5i(QoHpTVO1E>CwPU-Svx3vX>Ev{ADx8&^Rh-qFHJr7a zb)0Ta4`)4R17{Qbo#yYxp=`>}aB-s_c#wUR3ZXbP-sy6;nr>6<(l%zOhmLJV^howErC> zJm$z2xSYPLp)Yt|8nAaz6eX#WYPOL+xqN^MFv^oPNLBm>odK2V|0Tx?#|plmiL&CA z>3ij6`hJCDUhdool-^v9^yB;lJ?Nl=(~)JQH=&F;Mm8gEN~^L%Mh|80*r?;1={t{= zzN;90e38-{Dv&<<_*SIbwBu*t4Rk6g8G&m_4IG2Kb7h{#*1&GtTYQgI$(^>1+H5<8+3N& zIgVp@5;6Ru%Cg{4qs#51eQTUZf0gfsi(fBscvSmeQpVbTC{{ zbS@v{pCrfY^xn$bSGL`F=%>vqbcv1qq&3hQmy+Bb`d>j;MT`m%<0({7Izlj47fq%7 z*mq*3AkzUKq^itjzP^D6G#mm`?2cM-An+0|ZwMGJC$beRFs648*ruOZEl~Kv^ zTTw;-b}id^U(pe6qw|ox3~MN}Yy~CQ9gFC|w>f%n;Oq;>Eq86tsTPHmWmz&2iAKKHBwS-_cFN#VQAVEGOZ7 z7hYR9n4PX{T)V?HPZh5n2=ZHSkQVGOoFIsVx;uD2)ya-A`alxxxvCCDrnA8t%54r@ zkkCPBHg9l+HV>b8?U>1NJ{3H7;^`ea54E*|x3;X>wNvh>aUY|vsMFwI@E%30541ok zghW4cYONE^JHL(c>cS84OB>x>IFIqnkd~$2Wwo-Ml2zg8X2JO?38HgE-_UV#SF3ge z+FypGSLs`-)%u%JYkJWk&_k`)!Vw>6-_s9&e-X>L~?ffx7Q;;CDH-VO?5b%Kp=@sTPLy z8A_{_Sli&Ac~jxFSQ*(UMDB9A)(NXUbi|VP7mi|o`%&5-`73$&e=)Uk?b#M3v^#<|! zw%y%3l^vmOr8|9f?CSXT;C6LeY)fEEcvEnrxG}LIv>{6I3KGFkPzfeG(`#dE<73jH*s$0TxCw=Y~R@@&+0x) zIIDkl`|JUV6X2V5^2}~p7}I}7`xyfi>C!jzTVL6`n~PmfyPLqukmCGU8D6+;{iXje_meT;@Q8C1$Vu(k@5RZx>9u-48Du#Ge z4DqNK;!!cgqq40+I4Xv4R1D#$7{XC8gri~zN5v41iXj{oLpUmia8wN8s2IXg*{-x= z6Y;1R;!!cgqhg3h#So8*As!V&JSv8GRJI)mNTp?U2Le+u1g2sLOvMnGiXku+LtrX~ zz*G!@sTcxNF$AWv?MGZHhPYG=aj6*MQZdA(Vu(w{%mmv_2u#If0D-9(0#h*rreX+8 z#SoZ^Auts~U@BV_k*OFWQ!zxQVu(z|5SfZ0GL@FqC?ZrbM5tnjP{k0TiXlRk?Gc2i zVhB;i5Tc49L={7bDuw`63<0Vb0#q>ssA6US0jd}RR51jovOR|gRSXfT7$Q_LM5tnj zP{k0TiXlQ3Lxd`Z2vrObsu&_vF+`|hh)~54p-Ri?bBI)BdkdkeSUu1HGy-0r31|j< zfC`ANAmxu>``C<43m^klzy>hD4wM1qKn36=*uLz-rUFy~RX{aR1JnX_fSaIY^~?42 z!S>Atq&EUypb2OOe1Pa9NPwAO`>q9>GGGO400Znm8Bh*X01m)Ku>Gro%_?mEuo|1S z*!)o)HtVtZ(*|rd0$!jAXeMa6{izQrDj>Ge4*x|CMXA;RGhhK^z(%kQF>Km_GN2r& z033i5Z~+QX2~-oTE_)5OYk@kz4S0ZhpaEzEyg(Ds4EPASyt?cy^ugwCMfwat>?TNn z2`~c|KnARU4PbyBC_18=D@Wo}gv*)&`_B0$!jAXa;KqXKGR0B0YEl>xz0S{0Q zGysi26T$W`&Dit-D$qjEvidKrND&7J5@06Ser&;}3|Ijhz<@G>?UQnBRsasb3Ag|S zs06BjYM=(FBiKH5W77lF0}VhU;02n1X21uCzV(zRf|k`!O-Qj2tV)H9Z7W~{7+?p= zfO4P$Z~#ug1t>rzPzBTwY~EUI)&Xw71JnZzKqKGG3d`M`tMEO6T2sHPv-9U-NC!XyAyYX?o#ebM#E7h+8)W=8NV}l zr+8=Lj?f*-9m(6nx2v}&Zwue1-j=#GKT=@)=D^LF!|}tx!{Xt@O`)5Vo05k@hmIZ$ z9L)5^`+|L9U*bUMfOsI$8|qbhli_e!4JUiTJ!(&Ce{{cpe|leZpMPKa#@LO48#8<3 zdxLw$y@?wJu8&y%I@T~p=*_Ele@yZ)Lp5a(VhOC z=^e2hfgPD^;@1SP$%NveU`PzLb*H;xU4gF5)$yx?SBqE2uL@ozUX|D$+OBL*ZVPWy zx21S|z|@t|EB#ldx8TV-vpK#wxLMqs*c94ybYoy+Wz0601Y2mDR~r;Z^FY_01b zmUvcTc4)RTJ2@*nOP!TEGkT`~%=8(tGyG?yXU1j*W@cu@X9Q=6GZL+#R;4xB5^hmi zl4@90)s#>0C7MIcN^`O)JWeD)e?z)HRv)O(c;cR*C*zL0gKp8Cs0-C8b;;Urty7?Wxt%Z#4G_z#vC^X&7wJO3YtVyLJCQWloZ3FDyHbMe&wGvmfOkx|C-$V zKkWaT2Y$gH__Jmpg9~-m6Z|`ZW`g!>G9>s=_zjT>*q+NdbrUplKUs_k8h-ZQV}h1- zADFXAgDLkUHfgg_GdbItMY>AUDslQv(9WBZBsyRDuSra}&o?NmR1>rd49Y3h1Z}ZF zIi;DPU1(TJ2_|S485RPYSG@^ZzBOH*JF20J4NE~$^p#Yr4UJPJ~tynx_68wf3(Hzvr47+vf>jAx%A3 zm`j0Ri&4RCWCa{pw|v#g^&3k4`Lt;6O`2yR($T})#kq{4JqkNoxlC7|TK!JH5??YU zNpuqPUy~^Dr3Ph{s>C}C$|+TeFEc17>+4Z(M{K9n=yqY`GD5}X`t;=n1!eV;-jsM! zy|luhxU62%YxIJ8Y2}o}=vDf7dTHo#gCeq4zIuh8zv409%J&MxQqVW)^?0st;?9>w zu7SZ-Iw4xS(^TvbwZ*>{J|!{%+vjmkq+$n)RI$U3TZ>b%BR@B$Vu$tUI6Bq18!JuS z4lj(%zh_>pt6QzEr(fN!nUbW^)a_b>vPxCAod)HUs&0b@<&>;$*BKOKP~EOKD6Uv_ zt7(d{??0rq|A&WU$@!uzy+LdLFQxy#ruF}OX#Ic1*K4HD()$0)X#M{`T|mFPS(eyu zWU2o%vUL6fvUG~p{_p%M`S+u>|8H7qq~){@V4#oU4E%!P0gxYn*C`HQV7)AT?;2S; zKH}10kDvK00^B`(yp{qDWm!SZ=J}?SI>H3PUTvjfa&(!C?yS9(g&uSb}vU7 z=H6LJbMAH60~7De;Jmx#B<+jIcQ!otKAg{q=ir^#2@~-Q^YE;s`S%9wfk}8a@f^Hq zfPR9Bcs9;F{763W1KoUl1=1YAgmdyV_dq|<&Bc3=h6#C^e;^o~kGEnr9Fy`R`9#W8 z=jLg$j*fzfd77&ulr%3dxoD2g1egH}AOlvya6TuVqj%uZadthRpW`PLPGq2x-Lt%2CW`YQq)E~}g3sPEvA}04O zr|5T>;ioxOLg^FymDmll{4}phD0-5gt{wb-WRkxbAANudv;eJuaGD?j5?}(%fCU(D zqTh}$Fx$^cpX{&2ZkX{OuFugE|E#15{~0(MX8qa3lm0gR1T+6^;)#FQAd^lZ3{UsLRQ`Y8I5|D*JWu@3_uWdq0xxA=jK3IsF_JgiAAc_RocLVg+0e7f zv&m!OW9qTgXQH3+eLJ*dryqcO+-QwC6c@|e5ZP6>JH(K z#O#&V!JEaK6Nf{GmBY!K!Z)cmr4B_8`46QJ#)fD8BM1Bk(!H_XKyM}-4+q0y zIMEa8QF@a5!~50!sd4B0LpLZlB(D!&uU?rvI(%rG{KzF7q-WBYMTpTC$@#QDch1;!&}v@g=YPgP05Ynjq1kK24UP;|5#_BGqX0nHn>(?n^+TCqpV4; z4zGsIeRP$7Rr-q96@e=&%IrYuW#ggexZ)Y9lu z|I+lRdH+Np6i@=m_Het}p1M@HG;vAj66KQQ#o>$9i&F(={*?=o=ZDW%&rh8fJNqR41##RcckLGFs`cOe--Zpk!QeSI{N863&oQaV8yMTAP%rh*tP3(&e%8 zKzXJtUKT8i*!}i2i?IO9*y6UJO|&JfA**6d%3)cRQ);^$KK1T9L)c#?W6qvZMBdCyvYWyv%|ciR=3&rNa4sV+YHLd4)f}Vt_w$I*=|ry zcJ!65hWyv$lkis=6qg-+C8d@BiWHpex_U}t^mB#dPIh$}6p__s`dPw!1&}}4MQg$M zi{B#BRcjf-eRvuF0$m_Eja-a62Nlk1c-rjPqrF6tr4>SGMx~;on~Z}@1n^iJagi>UdG|<^dxRl z&ugRE>G^SPWjJu1F-C<-Qj3q6rZvA^I;E&e8qNH!r(OTLIsLO`4wXfYy2Btg8Pgbg zPg0WfPnRR_Ww_p;tVD?s8w|>cj~GD;Grb`v3PR?*FB<_Ak=wE59ui+9?L$e>x@M z?nRPt9KC;&;{JCM2jHI+_y4wQB;iPU{X0}3+(j_}kEIxZU!&N69oYYm;{SJte|t$D zt^e;1s4b1&XS8sCbT5!kV3|ESubF>=?CZV+>+NhQoZZ!Qq{? z!{eQ~&A=7;zz*5-eI-`hStpj<*+uYqXRF}!&Mt=6J6jF6cXkQ<-r1#ad}nLm`OenD z^_{K5+B>^U_JHrg>O1qm1)i;k4?NodCwSHkFL<^QZt(1KtiiJ@WN-K@u?nwdV-vjM z*=D%Kvn}w8XItSI&$eMDo^6L~Ji7|M@vH}n@yu%mUXA5=b`5;w*|l(zXV<|?o?Q<& zd3FQ*VR+HA zN8m=!cEOLH`OUyb;YrUPgDXAT4PScpIGpL(6Y!>IPr{v^Jq3Sy_B0&o*)v$RXV1$1 z^v_}4o;{C+d-ei6>e-8Msb_oOQ_li$s%J03tDe0Kw|e#p{OZ}OyoH=}U&9JMdtC&6 zE`w0b#v7S9^?5AjvoByZpS_7?eD*~X@GUsov$u1AeYwCO{O#G7u$a%jjMaSh4wm!T zSFoPX-Yo!rwGjAT5%6opz^}vko_(Vf_)WOqvu|NtpM4t(`|LYd*=KvJfFbzbv+u$I zpM9?u_%R%ijBc!NNb=hn0U8f&V`HD;)UQ-{8T|{*Kju_76MopIHBA|KjTj zKN1MlZ2TKc0QR2@;D0lL{{snt?FS2h9RLl0eGDEzmW2ZofbsC_X967inV1L6FatC5 zfszH7Wd*VVAo+a~W`h&JazF}TxnKpbJh=HYa~Uunj{eM20kl>E3*hU|3af!dHNaxH z`?C@ou+$DLt0Ro&!%_~W0IQe?tOQqpRe>bHszqQ8XacMjzW>Z70qt49I=KI{3Gn}C z6A=J_9f1e{>_~(FU`K&3z$VF&049Smz>WrGfK5Rx05%oD0N62wz+({(fE|Z;0IVJX z0hpr{*np4#Y#L$$u;URFfSrJ-0PIAB1z;y3E&w|j1Ohc1r+`SnP6d;Iodzlan+^^E zJADH146q2;nTQd;cpT#yfJM&JPEvH}-^S-@IAEnuzS7O+Ji7qIh6fajM27bA#(nvDy}acW5g za4EtGuw|eau;t(wunQ4MfVF{Tz}jslG)&yJ!(gC{+tOM2s+5z(*$N*b!25!g)c3XfO5omy2UI4tJ5O`$~p_+|N z#W=MYJOs7{L4k04M1+l5F4%#Tn7 z>`~AZ*kj-+u-zaku*XH<6Npv7o@~zMV6PVgKL_%HnvFN)a0Z_Ti-COs z@eJ6T;4iQ*BBB9%3n2~I+lXnv`ViEB1rgPNeaQy=vK{zN9q=n4GO%~SWME$fm4Uq{ z0>6gH2JGtyZNR>P*aqyI2yVc>h3E$C+X!#KzJvG%Y%c;Fuuv}Wy9jZ>z6V+Z`#yLL z><1t=upc7S0ec^@4%m+n>_E-NkBe~XCy08$eu}UM>}Q}iu%9FF0sB8hK48B<=mXY| z*as|(;0NrNAUUvK$uSUq4VnY{jScu)JMedPz~4^*egLim`vW2%us?$Bz&?}%A^Zt^ z2li(W9@t+H3W4oIECd!oFa-8jkRI6IyVjg8&Kazle~){s;C0+m9Ft>;U)=>|+ohvaB2^5R6B#1STL_0uvD~fn^|G0?S0e z1STP30?R_k1jZ0Efte6Afn_6V0?Pp#g5`n^!ScX|U}g{^SUwmL%!059%!;@PtN?)% zSRo=Oup)#`V8w`?z)BE2ft4b90xLuKglImji?H zAV@G9A}TODLMpI2#8hAt5LAIpL{tTK1i~t?BN11D9fiOOY!V_Xu*nFmz>Y?21vUl2 z71&g;CD<{bOR!_Xmte<%Fv02(UV%9fUx76szyh0w2n+0ZgjirFAjSea5kVH%Nrl`#@peyyl>gx3VzZ3MgEKaH=S>Wzu^7Cp3l2JA9=&~hU1OU=RBXY zQe*yg)duQ`aT;Ca>hYJegWL|*p2?07juaS5z11p+Q&D)=ZWLFh#f@f2pf5GIa- z{rMopBjBI&KkIxp{EYV*JMk0TPxDXvpK?AGe$xA-o%jjvC-^7)k2@a^?e^@p?ha5S zg2V!GFK={_svOF%p9J zx$ooe^AjH-e2@1Y`#sHfNAB|7fSL z-RhB}4!CZK-0UL`LTHC)hjmBbrv4kfH`*!Ufcpmi28wt`@dmut*@=DNzLvk%e~pv4 z2i~jg6l=gu%maUqvnPC&mv{$3iZ#G*_iuA<>)LAF8rb6664~tA?ARRI^27KL)?$8F$2J42vde{1h$LDc)LS0;!|1zf>Tfn|9xYoUv zU+Z7vTob<3OR@EWm$)zCFY!}kf$+uNi|xcQaIfN5`7d%3!@x^X1%fNxD|iNmWP&kD4IZEscUIuiEoL6SOuO7tQQ0pyC{-? z?ff7`5#Z1BQyhVCtGCtO8l)%!e2agfb77cb2-qoRpSziF_AhWQ2+#MY*rqfm2+kL{9dd>>$p7=OpV% zffHTC81S9oI3aYrhoS`prn!hQ;A`k3wgB(&*E=cppZ7TXaY2gy#~M2QdRY71oMCd4HL=%w86xhyZ-4zr*XI>Y@0SFKeAd>AP zCP2vKp*R2m;sHdmd|3{P0^pIXQXtbsF#voSj*O7#5v>#fz$HX@AMcR;|1VtrzZcE4 z{{K#t|Bv;5+rEDcOa`=Z%A~h`dU#a#wT+2RhsZM9IAzjXzYaF+ir(c(iP3w>#ahwZ ze}ztjsvOnlD~IMGU*K}(IY}JXbHI`2Bt!AeNshJ&k2)urqFs1K32=bPLRu%H6?ApA z$bkde6wslauDnvGFI9i3pRU}Ll%&L_D>oaImFRTk7K3u)o35m~8=bD)YEX_rbFj^z zxCG6?_N2tbV-5~nWl)5&1~$^FxORcR$FP)97LGJR_Iq_g^p?#`cI<5~U$$&GuIGRw zS+-xsYuOq`VfUz(tsynRUB-y@bG1%^szOt5>aIyjQevj=T7$9@HFeh+l#{5byWXH2 zgQo5VgW?i2bvGs@CN5KVlR*)QnYtZ@rNnRQ4%}>5$Y^WiS}xNqhNXwz!PZy%Keo-Y(0rgi_5x@i5sOXS`=XL)5ljsN#W*Z(p8 zuj2;s|L;ml4{`M~cN-LuSU+=*VJQjpGxr)6l1M*upJ6HS_cI4}8Ww`A=$#CPqm|un zSPHU|r*?kIyO#c|rIkIP6Qce~ox&-i4)T4jSne`$T+abV>N5WmZWPC9dDIgJJ4*G$@i?Hlp5wK1JrC*>t13G6J?BG7NlL8eeAu9@M0?Ih z49ZEg=iFsbj=`SOZ%|ykJ!f(Qjd#MLo9W>7?89n)^ZQWEHx9ycr`k&fvJ!%`CH zn4UB&B$1BkDZ^6Y@0boeZCD7hVpjXHXz!=(V~@wVXiIsS##z$wasj9Zd-6()55t6oQ-WQ ztC~pGG4(y@^GQictOtF;psYlD z&=(ELNwf#uV^B_Fk)i{JrJ$Ya*G!`>7IG!k7=xD#3Q-;g^xfvD>%cD?6sJ54=$A`| zT?c+8DKRG1SSjy4nss1{OSPh}8Wf>C3=DR&FNmx$f|Bn_+!W|b&!ZGyz)m4(P;(ST?-$jzJ^F&E# zxLgvx{0~W3dYvTv?OI8=;T=h+-Yp65+)*sFEhPRw@&04+|1WY+{;q}i|9^Q|tAQ4- z*4`|iz*c@uJ=vx7CSor?5qtTG6#(qzCt@!@5qtTGH3018Ct@!@5qtTG{4N4)TZ!G>GtM5aG}u!k?_1;Ibgv0DM0I{1rqvDv0n?5aFL7 z!aYHRcY+A#1QEUoB3u(hcqWK&Nf6!SPOvffe6ugnNMq?*b9d1tNS4M7S1+@GKDFQXs;kK!ihq2!8?*?gS#d z2}C#(i0~y4;YvU?5WWN=TnR)GkO9a9NPsK={02n04T$g>5aBc+!e>B)%YX=90nq}0 zr+`=hfS-U^1Skf;NkD{;fCv`>5xxN;TmwXS28eJB5aAaf!Yx3w0pJuM!Y6=I2zLMx zZU7>@07N(ei0}ar;Q}DS13-iWfC&D-2>QPW_P=NWfb}ne?k|GvFM{STg5@uQ*e`ja~$cUId9=1czP( zg_jh6s?cxt=^V8c`6B>)$m8ZSWspb!8aJT+c|QUG}G)OZQN zdZ)%q0M0u#UIH-Qsqqrn0CqqfU;+W95IlDgGmoSoA}H%3 z80#Vk>mvB-ltNI|MKIMx5Y{vik@MWw4w}Ndjcq2y*HPs=5gBdI_ol8T|yg`v?Tf zTsjBHvk_#}6V!6^DCzYCl>n}pARAE8MIh`VFaZhywSdY!1gwuBb1y+Yz{Jfbl>zeV z32cDc83b8f1a*M?9)ePU9gx|Ja{#e^9;qxhgWjlbpF_uac8-n(oG6s_X|9GoGoa5B z=(7Z>oB$|-KC}7=EKp@7ARnr%0+^sr27QY4&={bgi=eERzz)dYLy!Yi7Rg{CJ=p*Z z`pm5-sO};#_Y%|qGNI4BeFP#@nE}WINPrrE8S2ff$2mY2fB|gCSQRqHHxuLlD!T|o zXf_*A1h4_B_7Ir*2&BCP7C<&f8mj=9>j~@t+YAEMMZiO|7C;%G4j@6t7JzAQBPq8e zhu)~v2nqnjfHFWnT3TxPJV@frs1=Ssw~M=phz;=mGBo zjt9c``-n#$+3DZu+R5(>5R=||U+`Yfz4m)U_q5+*y(f5gGwtQqdzbUB$esQ>U3cMKQzxf&oM7N*GCNf$hrP=UFY)W2F`JxV?8H0$1}%HJbmwM$L#Rg zzO$Xg)bAmtez?ikAfq{qXU= z{0^6ccLeI)_15~}aUNpvhmQ3g>o_)ijE{Kyk*WTvuBrUg z05SQkQ-Vi(js~y$hDqoe8xc&Z0S0!H= zsBjazKUnT5x0i>A;qNF5m-5 zZ*>vVKVWfNtd?NDhq(SBv)Ak}hx2^I_K)QHb6vSSG5*~-)|_CrC)-Y(f3L}53Ns&b z66@ce<;vo-0+O3}|G`X8rad#1;U(sOSoDcbF(UYh`_Bsj-pyP2Am^bGe#z2fB34@e zpAsGaYvccMJ=*zX4R7?oYlde+Mw#W;2-*L-PKY`|q0T2)h?q~VBs6h2u9qamMC%=)Dq{QZvKW|W0qVvgLFeoR{`Q$eZ%1LZK`HP07Bru=+ zmSG`S!qU$tM@^2h_a>TrbP4Ni!%~nH{WP*>YFxvtJkV!Qh%z;k`kj2+@zTrKUg~ZzpN9Xx7F2TpWowZWLu5nlR4mUwz{6H?}?j|8t>MF zszbrR^(k2k9BH4dWR?Zr(P>oGaO%zYSCW#Hm>GZ9psYmA_*V_eNz{zLXHZVUn_+#; zpdiIE=~o6vwM<_(C{D3VdYeA%qTM%=5~DZju`JVpZyFS#EZXT!`fv}#-!d!(y_4RO zYhvSRABexL6QVb=HZrMCadz3r;`js(IGm9^hC8NbZ+rxc`nHC6f|#lnHhS?V5yezX ztoV*jU8?#)muWZr8~j$&){_H+1%%prqv6ca!-LHjp)MCR`r6sMQ~ zqLFL=hJQHuUQ%N8Ug zi3eaKAArx%`u|P;Ef6LW|NkxG|1UjN68=uS|LguuT>qVt@CtGN=hCa6xc`?E_kZG% z#X^ww{adn868`vi@(F0A`>d3NFVMb!i#jCXPqgRXb@VDHAAlEW-@hxn3WY+70m#+! z+`CfSZ3Q&`U;2ttTp0gP=o|3=Z{re*82!V9l>o62g0X8#$=J)4GiHXbn{+~e+@t9v~l+pQtUl^7Go1lMU)z}2h6WD=% z!$J}q=%*eurJ@nC|JOPpdP{vYS?4(% z&?IA(jIh)QkgWUbDdLKHjwVaJu&H&?!uf5@3+B$5c|lu?b6(T>&hCxt*V!huA(C_V z>dV&6bgx;Xed7F$E+J~dMl*SeDbhc2Mx!Tdg(0oc`u{JWuT}K#btzL* zIu?rlz@V%I6#WOC2)&}Gl8VpafF>EMWE@V>sK8T(DEhnwa~gFTKFy}6UQ?_7s7r~O zvawL?hX!ROpx8g@MCcWJ45_r71Da$klM#yTx(W|YkXd1>|rrb8bs> z)64y= zVEn$MBq5$aQbJjeDc%D=h|92J2tNGRQDRt z)QP_vmgeTx4Dl@(bq4Vt2E{3@TmL*Z>RlMs&KZo9*pz;3< z8vp-%8qE)EApd`g1Mmoq|4*XVzqlgd4jTJUMg0FhfqS-Z$M*|q{QummO13cmKVn97 z{C`Z`)@SC~O|31O%Jz{?XQ~cUZ-D-7P?BO4^ag17S-$@ml%p60su0@0p5bTt{%cT< zGR)LZyN%jR|7TE~(oFR>XxL`DKPfT#DL73tC9NtC#2+8fiBR>eHq$$)3?%L?LKBDM z1{sHIripaE@G69~=#%-!x`e0+OMTtvEJ`NT8Lh-5>FfT;oiA@tR-&D+U{Fq?ov&z6 zj!k3x6UBzy3fH zw%#NOMf7@##{FkJB?+(I%Y zC87Q?NqF)OCNwtCT!4qZi_mvoNqD$N5{}I+Cx|Ld>c2DzH8;k--?dr%GWBtR=NfJqLY3rEB=a=-l`>1J=wsx2Oy+R?HhOh(SIRkq4s8@+aV9r~ z{_E%%c|e}mQtH=`K5%T~rqjEk>2*TQ1h{~l&)>ISM zEFaG#Ew|D+MeER#QabwlL#v6Exc&~1&`NhXQkIW$RPL#!a&QV~Qu>jLh4`Zcto*K;Cu3v!{$)s)jVdb#BqHT__kv^DAsSu0AZPo~tWW%lVRl@9JQs(Wg? z`t+92;n6~d+L%we#SGZhk?Q{jYEhfXLV>acOVJYj982rN+u))7Ml36$*U_XwHf5|DDnC|74mt%I~ww znxWYv?jw~tM8`jguGJK2mVM=G)YW~u=Ef*zvs8bLx;9DI%#N;WAgzJ4 z1`eGDK5`1e_vy8VUboQeVtO^w%SNyN%@Bki(d!j@_0nq%y=K#EBE2|z{pqFYkCxE* z|A^O>^n(9?WZ&QA4;{cLFQO_s98{S@>M(pXw#P;Cs=uC=K0N)s+Mpa`M6{Zuq$Nm1 zt2Hdl5E0F0P~1v+jW}*vu01I+YIRa7-!Qb?I)fq-Bce?(EF}RV+C;-bKnIDJh<1cw zDe)804jgG%2(mKL&Q%)U?gK{|mV&HAJu#xSi|dK)K>o2hU#P2%2g%YEWWOY?iI5_V z5;n+~3Qiq1ebiXl$-3OC2^-DIDohz(&8PC-lS2;lIb7R9*=@abQ&*=(($PstiicB2 z!lHf06oazj;nZpSsHq0!B-%$EV^EH0X9IgT?ZPU$xE&LhKmbJQm# zM&CQdatJ%%FepOlHgvXN*igs~hNZwj>3v2t21?`2abTKZA+WX4Y3c zNlL5-oNiE7qCMd02IVB$1D;_}jFxt+PJv=ovZ-!whXlMG4FWSxy z?!EZC3yJ$rvHlAGED6t2jK7)mdY^p#*FHx)fAaOeiemkhlMlcvOC(`F#r*q#_WZkM zwItNg`{ypEIDX{&|K}?t;i`X0g7tTj@bvYP;H1|NzCwEkJ}wEryo(9j$nU?D{Qh5} zxPNmg?%(fd-#_mPx(D(9Unl$xa8xB|F2K4;-9f0%Ark`wfpI1mZR53jYz#m##oj} zn)e^SXUtfZgUS}y+LbitU+)p7x4n9n`GCiPaklwzJ`AvYZt@PZai`O(UiJg(Bx?_! zt;^_PSMhjglFumD4D}yVZRr4G-bQ|2HhN$NFJ18|P&_DX6bK0C;T<(y{%#V@ybgF* zOg`veu$0oG8~ekjJ3bS*tPLP<0~;(!>Ye#d>)rW%hE<6<_2oo z;jR6KI6YMwlJHbHG}=#ltEdwe>G!k-(i#{$4TNr9wV{m0|35$M#{Y_+Un_ZyE2A=p z{8Z6Oe(vkJRrLHacJTp{iCQpvsuP=GQ13U8YxVhQJk2y{6nxolhSB@&88aE%o0w44NNM)?JK@0rAv$ zsNxOk^Pr#O(0@NPkIBs@sP|W%&Y-jO>_Yd!r=a1U(^Rdg-w!Pnj2qNAUx(Z5gPOac zbs{|*p^joy9i?l)^ur`#seW{QH1!q(5lr>vnYbN3^euk4*$p)>@wMMi!)%9|<5aiC zv7Zf5Q$A2u%9-@+NGGlEpiK?TMX0(OucbV6_C!tbXr-H;O-apICw-T+2GSZBtbyzQ z9sG6$jsN>UbK`&2`l|iKv_bvJv@zrl41LzrKdY%}O0K5 zJbhhPJ}Z6`1LHhx9}~+yd=};_^rfAu)_&;cGt`_6*nZ_qdVVAE`3+T4uvfUJE4B>-k=4byp13iPyxuQCnyA1n(?unpc)`_5#$2O z08%eOF@Y|%(q5bg*Z_I`1m%EC+S4z;2#{eTumEZRxibiA0XgjiC4h`Bf&xGdz|@0t zy9jCl<$DPV`Uxs$%;GYA=4`Vd7i=AUq~csmzmQ?q64DnyvMr^&0EAuwksz9G^`}LB zbiNo+wdXv}q*N3e9p>|U2?T%y$O15c36KrQ1(*R=Kp~(QPy#3glmmo)1Q`GckOj!> zoyD29%gHZmKARNNLr?@L?>n0_?Uui(vdyNG%>-otao@RImOYwjMj!GsdKYk}Z28(6 zRLR_Wf;>POpd28eN{WC2zyv_{UV>6UIe_0sAOP|JW^yW0L6fe zUV==38ITXC08|1p_7Y?Q3IK(GIzT?Ew*^oMr~;U5R7JA^<$x^I_9B4LPLKhp24wXR zFhC)o2q5et5CPeM96$k}5KslE21t7dvH%5uLO?Bm>m$emm;u#*+ys00Yj1R}r;$OlvcssNeo z1QMVMkljU)11JHM0y26DG66*ZaW8=dPz|UBsOO2sQ!{U6adNr6##xOfdI$>}VDurs2JJa#*BrVlpa@U_;P((PK;2$~f_{9Ydy#RU zOPBOD!Kh6&PmphwwTtdj(swRrYLGvd(;>ALf*ODwAixG#Z0B&Mt@1S)^^}$d^V9N& zeEN`I2(Tbkg@9^+4Uj?hhf+XLB7+T<2QUGUTTf5~s6{fwK7uR&>nE@P3IUaX8UXE% zL)ro40}23D^0|Fk0A!g@7tREr4$($N=O3YyiHUpty^m5?}*}y9gveHXsjB1SkdA7sX($y#Pg$u|WObR9 zF1ZvWg)%=KjyK4H7&+j5&sIL}4DPUqf^xaHQjdGa)DBnX+3t$}Sq70BzPhbVq z0QeaMW~yXa+oKP`#i(($fUM@Tae9X=*xE(;DgjghOq8vx9cJapB2P9IfD%9@zy=VI zvU{#RYE@~;M73BT-n+4*whCHqUEfHx4>J@0%z@|^!U*K_=HfoI*%`krw<6M5SIwCid9>A+L&r>sx8 zpR_(1e8TfY@Nv)M_QylJy}KQ|!;e`X>-X>36@FyT!|sQz4+kIeJY;_;^q}`a$AjSq zd=EGuh}`eL-*rEKe_*G3r*&uWKF@vj`$G46?{(Z8zQ=cu^Pb4v{<~dw^LGdCa^GdW zD|n~pPWzpqJG^%|?g;yQKBq6z>+f~-^1XrE-M3qB58mdv&3;?xR`0EjTf?{bZgJic zx!HfS>t_Duzz+8g>yF?}o}279g>LlT=(sU_gYO3C4Uy~p*SoIguMb@3zRr4G@LJEc z_G?4ec&~9>6TaGawe#wT*Y9jG=tYprYDYpiSRmxeC!UgEeU zyxOd>1$`h%ELm zb}i-?2hMk&Z#_SFp65LKd7(w#MUF+`R$r^LHPYg5akcO*frajc)`dZr$7Oegn!U}A z=I{dF0_TFreE)pce13jlo_n5kUU05wu6=IkT<^J#bHnHO&T*a-nd6`1n#0ct%y!SV z&JLdKIop1AXqI=DV^+Ay*W_%9H2ND|jeKKZrhBG!X7DV}S@yF+POsD94A1b*aL$OF z=|9tTCVyt&4EGtxdOcbfCG$f^EQU8nM=22OFGVm&2zvgc&` z$)S_HCpk_EpXfW$d1B-Q{|T-W_!9!hyN|aXADrfyW}g;n@HRLa!VaIq>4?<(>s|GH zec(9van|G9$6Akd9ut}BpX!?GpW>RrPYE2&A03$No@|{QoaC8gpARF*w0GAz0_Bn_-XG{5F@3w*_k5wbt5TO{m&i?Whh{`Kp{% zkxGB1tCFt_RJbdw6~S^(xxGA8<}GuSg-d;<&eBLpU$LjyUK}d&7CDN-g}y>(VWhxc z;40t?0#>)xY7JUE7P}>s@6C7QhiM4zG)MCMd9FM@FOcibwdVF``?8(c5tHBKGV!JW zb2BRoW_hygSs}?QIizr=FVmSB$?#{mGWd*u=oYPFQ1A$LA;f!m2hVZd4{q3BMeG09 zMC1Q|cKH9J&6n!GKYkED;P_7^KVbAck1c;dm9NYYL&s@8!PxT&RIRHk2eE4UrNyaquGLzas(vU{wJ33pgqouP>k+&5q&X9s_3iZGK@FTZ`P$}c+W+tV z==wkQ|C`wJSNZ$s_DxQM8zXF>V9IMa{Z>7rZa{RFL2)bPXItF{COyM$Kr}NcG5URb zVs1dxXi$W*0ntdi_GtG8YBDUvO_35u*tJI^2!sox)Fc2bfO+aG3*L0O6J4|9$|ITt0ki|4rp*Rx@lrU zZ)>$%-DvmVT3}cTvZ6P!nyqfMLYfTcmQgD)aX3Cz#^G#j18p(Tz_qnCHqDwdzo~6zb938*^O_dUUEpkN zYiV`PZ*(qfY@4-c{!Fs8jyC7Qv**rfX&r2HTXhLi6PS9NyC^A1iP_xq49ZH>=ALg* zPNFt`uB54-I;A$kLxO{Q1kJhB1C@u?gz6$ZE= zwgGnQ5~LX$3Ey2L32QnfA&cJqwEy3i^60FCcxdl>39smL5WTZlapKAY?7 zqm@u%tD{Ps=tCRNuZP@ez0b#H43%u49%Wi>T1J49HoIe z5o>j_`>yM#QPf$<*nvnc$*%p{T|Bo z<3!6Kne}C(C6e6A-C!F$xI|i_dpQm*ALWeFBadut$A4QJ*x?}A(#DRHs;<;_IrRC* zSRBoq&09THSpdk@2{w(^?&o{6{%SNKVrr|1USB9R8z=l#Ls@TQ_xeBI8jd zUTj#Hp?T%i2F0yRj6`usQextoSH9Gsh{WcV*BF)(|Ge^nwT6XY)SahoMjY1@UEFO& zMboakt}`qJSuyLRL>G5ko$FU=gnWFNPKf#|b&YZZHG7GBl+eWC_#_#Jn<77s!+(5h zlnreybCxs>UZCvKrAAHNX!GOBOfs(~UU}~^QJPI$TVrR(nwGB44xEiPVvj*N%1p9; zc04L4#+ui9gK`u@2u6BS|{65D7{oMH#{UCOYmfXkB-qwh*$uCHBTP=sO!hhc`u#zVvNI&h_7DI+jL zU_7)!HW?NIJE-q9hO>j44NE~*^n{RM?BEui5Vdxyc5t_B2fruVK^&jN0aIZIr^T>? zTXm^XQ(Tqg-{FPDT1)=I+PY3=_uTKk_eT@v1*wf{x`m4x5_L=ratK@tjfNWwF;_Fwe@ z6JB2|39gHYH*mfrT)#>ZCeZr-o3#EvkJkVDe;^6#e-izLkH zkc3|^Brd@UNvLd)gjYP0&=jFH|Gkp1n%4fgUP-v6^k)y)X#M}iak>6KFsH0UG*;)^ zRS&^r_yJfk_+-}qN6VEmcib9XY1Q%rjIaOeHK)iJSbgZ^u9Uq|*OQO1jjN;G>88+s zT~tT0R+7+gyNIv7F3LJkcHvq%|;JG*Ecs%8%@{{=e!AN{X=lU)lFB`Ga$z&R=lO z{JHQUjCu>gGrO&A^}02y*LB+37It=TT)z&Bk+!zBnG0JRn`X|Xqt)v+$i7x>6DG8& zD_xV?qU+SWAlGuX;didXWWVowfDvdbxprRJ z-MN09t#0O&DRs6jw(icgU2ELkown)S)Na?2SG}#R^$eTZq^T9R&6(fQG;3~kXH!V`J^g4Wp!7o1N?SudN9;S9!xZg=hVJPD#^VgxkW8L@nr+*m%1Xy&>o#%QA zQDvX*P->;z5vtj6B%K9^Hu>^cBHCfzp|d8cbxD1Pd1q3R66-MUGAJw24)bn!U6J9Q#dEvOwPq6xS-fshu{35jY#I9!K`1-b3f z1-Vfka2+Xnz$MG05N+rkR2c08@BO;WshLfE`+XoONr|=J2Mx+fwEaG0P>!+o`*2dy z5^TSZ7!;OZ``wk4n0VUn0lz^Ji7_@FH7sRR#zwEo4fyymoe;e#${@odag$|JgyVV+ zIGib>XLoqw4hhYZQ=26`K|FyO#1r`W>5_2yHc2r3ToNAmkbL`Zk%X^)LlTxhD+xV6 z$rGwim4w$e(OUnHCE=&PmxK*BQXGKyB;lbaC1Js@8ifyO-T%7vl2G|TCobbM#fHB_ZmDyKCmi{D;1yTMy`pD=E~P9 zzmBzrd0xy_%w$&Zm6_I7omcOGCo{gkoK~mXttd!!8mh4pBm-!;1rL% zI(qolrIFYPs$SCdDm4)@My^+*+qo{i=-Jyo1L8&1AnYKIk9@C|YEThOs#M^QX##QFSwN z-BhkpbUx5`$73_oHWnPxbq7aBc(RK%V$*X=2N*r0)%18GcA)$YhiBH*)o^uOHFzAV ze{vpb&qnmVnSW6?0H8ev5dtu|I zQw%_xJX52c=TjpXj<43Q?}d)$j+E^Y<_Xkih>@PJ#%I~9;}|suBR>VHb8@k){a8Kw z#BRT} z$>$8C3jK`6NGXjyRvE0%q4Qko*k$Ah1M$pz9hz0J?lFsNpr2_~eET=hN?@Wa8~vRy z3!nHb*=RLrJkQ%UL>VFa`uoXp4dQJJu||W3XT3{yW-eU^Q_XjYw+_Z*aX-ClXnG5p zT3f82B};5~3ALXc>AB_8Z<|M+A^r5%^0AuN)z^Ie3ckMXCOgCXX|V8zZZ>(edL4Uq zIc>|=5gSF_|15R3JoR(m2;ug)eu$pY?t8vSC1B|VbU zYU-2Y+l=*yE?s}%b)?RU#j-hv$GUKAE_PzvjL~|-@mW_=Gct))@?-VPAG>eR_CSaF zsei0WHg(S;qwzkBJ(I*L^~0mRANptE@n1($`@EXwjf~e-(sa7g8u)Z-VDfJwPaR3) ze^+$>Kg=Wz_W##Elc;06_`LpO&o*K&CnxcDyJ^(7n*6;t%DiOd83b#g`lpf9t&C$_ zjnO7#AkO+48lfVJeFvQzn$r$W*&=L>{EJw58OxMnjG!MC51$5g)nG7_c;G2zV9YV{ zN_?y*l(Acz)INji^MvwX%u&e2+BK@JW=i+Q-FjwPUqay>)D%-gGndW<$$Te`Ty*Twh|J z7_k?41Gond7B*lM!kMydp)$Q)v`6_$Enwd(RO=i=L^PTeHndrKq=YO*OT;2!l!ez zmd;gL1F6+O$+v&;TB_AsEnEsY3^{D9~eC+shvMi` zUBgVzC&Y@>H`0hh)#XUFaNsHKaG!5bb33%=#2V8aZgWjzIsc$)E?rMLDaz>BMzBcL zxCi68v7N6NkF`S0vzoTyW}ydvkN#HeMPk_k{b*hte-9n=>aSF-r*@S>U&5c{{D!KB zRJUxs9@H6!Lp%SW=5DaXPyIMIR-GAIH`KcDS(*<~OW<&-U!%{LsJR;JdX=6(N$n^z zeYf$dfyrN4d0RUI=11xL4)bg}63i8J#%JD1M_qKiK<9C0g832poSoH}C(^5&=LMla{=-}JP=CPl zT<$Jni__0>no`j8e)B26_`T6Amn4^Eo1A5-i?Uo5 zZXa6LDg$rGpNMmrrZ zGL{6oQz`Coo7hjBvG^=Gl5MuQ1GM9Rwuj8<(61t8ydXjyxAxmT@^dDE$+7`s2hI%edmqJ#)CM z3VKTR(fJ+p-(}t^f16DgXW8lb)^2uDrtvd+kfxVOKDQH>$$h{8AgL9$W!xzi`mJ?0 z{iZ>F=pOkOHvFQDY9vW>(c}A0^OGbGkM-Fk$wz1C=wP2jO-T78StaeQ+)0%r%k%_Y zYnOk!(>#^ZNYCT+eKuvVwhEcXy@r0DL*LtT`WA3m7(gJWyD_9VD2r~9OW&I0VFIPA zfz;Hcy9SAYs4lw85%m2|N;_1UO@j;48GXVC!KArwGzWO2ALdZ*voLz0@r!u}T@Gb! zrJtWjw;^$QCCkF-H-*`h&Dr#CqIbGl&agyZ6i=01SKbvnd^RN)bLiNow6nS)fm{3<1JX4`?_w!ewS$HX)iu6bkP92t8sRWS<&f|Jx!cMpSGeP z)CVQ`8+-pEE^9UhfpYn}4@Q(YPz?a-#3iP@A ztX~Yi8F|D1hT}E=E3Q}EFY_<^Uy8gCeAfLe|E%jt`|jXl?#BX;1Rr!i$Un&67rE1S zr{hlV?Y>(aw}fsE-4MLSeGPw&_bU5U!R@}yj?JM>^&6e*!yd1PU*})zTx(tJS?P7# z-OlCVW!`1{1;N%(v!^*UH!#OFC(z_O%W;D5T$(b{_uITu`mUe-k*z*s0?7zU-Nc(@!oio3w zZPudsGu!Ihup=tIif%riR^379G10EH zCaz80=~|<`Ck@KkAiFD2IcfiT@;UtL_GZ^ednzeu32t8cv_WAjAqY+|y1yRmqkLO@`zSYz(LT!RzRC^CzRC^SeU)F(Wme66>P^#& zNl8k~H0?1cD^b%FFet~EX?iIsX$hL9mkkO_&@{c0l$f|o)2jwWBxagkGb|;3({$i< z!$QCo${uW+da^kDD|@at;JfJK%I6GAK~{2fQZ!apBjn>ZbVAf$saEzlvaAx|k-&;vZOVIwk zZCDtbcB!gr|9UJO{@YsIYnsPPX*xlKfm4%{FBue}m|Oibn$|`+G*Z57SPE>E-V$nTlvc<)hK0b~>J6bbD;i69;46lu zAS=1LGSOtEfultb#is9nS0_aMm1=I!qZ;es789B{96Mwj&fMam_Tl&*YNr`{sD0?I z9O2{(CE>ekC1LGyNywu2-P0xE^sSQc?f*)G`=^rdw?9b2%{wHa_Un@H>eG^N>?S6B zZLuVDTr3F(&XwiPnUq{z}g|6Q%3GaQ+EOfL;!u}PKaDRg& zOj|Dr?}j8{aaa=e^+>|CeUebIOA@$UJok&mCq8p@W;^$zFRGfO_x5wRKeo@8PgKw% z9oGM8(k43FlZQ!kc}A^npNlKYrLrii1QgJGahV-ZMU&QLS$za005i?WmQ@2PXg0cR zLNkGxW)#cvdI_okx!fYIEQ4lk%L)OO9)i+c1mYfo?0$lBK>of3Tt23-i=DsE_Yqxo;JQ3DFGiEf2O2;(oEYHMY zo=~2P!vrE;D$)T>BiXrmTo%nZ3HTt?&*Snl02Amm!>m~Jn~JXUxXee)4SD5x6?rzg zeROt`&{KL<)3CW zNdok#;f-J>PSGTEsUFcUvvw`uPB--}=S~;v&&NC=re?d$M-0jqiI#su*PG}nlYE7G zrCKL=`lb?B(jQ%zx#t|*PR{$m9B0$XQoH3`E{~?6qgoJc=W?Yv^>d&v5=>>kQ=Y7( zS$bK7I`eDUH(Ptj?wA)1j?SUWC04#~xl+F$!DKjn3FZy0HqnvH&{6a)YdTujGWL*y z)oanJG23gR+0~ttKA(L1t#aA20U``Go7hneD1FTeIGHI4q&NozfgglS0q);yZLaJENE20Da(M&c=^rns3q#%#{CJ7)TGY_qv?CH;)9LIVH8$rcONNYe8w~{&fwVhCo^s zrJ^Y5)e5xGr*h@jr8eaY(yRH@vegbwW%`gS0NbzPLg zSXwS@9`c2f!wk~TK-RPAlcv(y`{`GM)O9eM0%>MIuho=_Xg2xg^SIg~Kq=`_tr~-_ zHq$3f)krsF>R8eZnc7aeA*-h5ux!X&|6`Fyt&h6>R)27pb(iB2??b)^0}t5m_uUt` z*L`o`p3vRyyS%iL?YhJ73-*R@_uS^YHGB(yi*HBZrqGR%8=Tj>uJc?QyvA|0)9daD zT*Yq>Y;$k3ZVPVpY_)FqWs%Pp7>zw9>oMu`;~Ex5Bw1;`X~;Zr&Yeceh*HgKeHRdt2y2?}d&F z!^?fkoy#N3{L5U+_+^2m?xohH!6lw0_9dYUycakw2ru?6b}o*b??2ylK7W4TJokCl z^MZ>!i|mU+t=?8oOWy*|0)B3Ij&F{0PGq)!wrjStF*4IX(>0Ty892**mi4Tl(|$U4 zs^?_;$)S^iCwfkBPqRA0$NG--ALBZPpK6`rnQT2Oc%PJ+i0BtxA}Db`_4pdi z`!BKR_(o&Q4EB3N>JVX3nJY%xJL!zFXT>a;LNKtC#Uyz>9J{u!rU->?^m5B*rql6I zAJa4BSVGGA$p`mFcanrva#W#_JS{P?hd7AqNWxlrSE3>u3SYWpOEDS$>rZou9u8#} zs}?5`+3k}kKQ+yReGw70Yozw2_sbpLlR4S;FgU)M-by61o0Cy(56)3DcNr}t!JciB z?Ntj|n+~#ju!BSG-(YR4S{tf+<&0|kMkf1?;Ad)eZ^vyk z6A&xP&S!JJK-G~t*VGW5CsF2Dpfk*yd^Yw882{s_v5&;|NtE~C5wRM%R6oiZt^Ix) z<|D?cHIDs!g_`mKyP=%XkBDPg-tph=QagX4>MGSXH&vyqZ+ZI9Xo;~)H$C4mh7Y#s zTcU3>88b_+btwV9Rb*P_J2VC{@ zH0AqgT8G@P>Krvx$BooGq`jAvq{JN3zGhHXq7G?aHz>!LL)tfzl9r%D+BXdfTbWp_ zfNv!wM(>Cg(?jgr21O+1koz6OQs7pl_e0aTRcSrM_8Jy~i6Olk+Hf9XA;VIT6}=yt zCM#MuwC@@gf~@G>(6m{Z2Fn`tE&iTiDacCRU>n_|$%;nE$KTfpQGca6yDcFHH;KDS zc6P&YJqH}l*)4wGV)(jg^7;c^GSp<-{PMe6p@&3@&6f?0vn|_>KYrR?Kys7SP0Cm z-ll8Kt=6db84d1i zQhSbTsGqotyH@Twa6F9z4%c%`;imL_UUrk7h2UT_o15DfoY%B)E}~Mjv^wWEIu|y! z&5y^JQyRcWk1Mjh!89TDm$r=ui!) zMTae&9UIqoYEKLfM}Qx0=#Jizj94PlvrQ(TZ6Kc-Oh&zVWuiy z^Ca*)gL0HUQy;=?_)uxTHz-HxGxfb#>`-YG@HYA^_km$)qjzJG?UHcKpCzI4Hc5E- zR!KPfTaxhe=Op2s2dqNdQc3vtC6aL067u<{_pe<*KL4x9PyZB2*mn|Cp4R zc)HyEAL>NtE#mcL|E}O}kS!vPPvn5ZS;S+xV|#YRZxLsn-PGFB))t>plrPrVMYS#J z3}O6s?@zkytLjL--TSjaNs2Af+r6lbQ1h>`MSn3UC(-BkeFo)hAkT_56jo-?U(cuk zbRq`DDJ@QK`i6bT{cBQUsAXvXdSXqF?Ejlig!&8h8RRCq%d6ZDLKBDMX)+Gi;_wXe z(|B7P;+DqO+;F9?tr>g()111OalqC z8a*~zX*EUlAH%|6^YkO_QElFT4T@82p1%7Z*5>^$DKYw))L1s}zxcp3*B$$WnpulZI2$j0-u zge%8|`Bv?D0}jZZ4+>68L15%RwF;@KO}#zmlaiE}Jr@khO4Oc<2IVAb&od0lF=o#* zlafX)P5aj~ianPM3o~TTvkZz$(4MoT#Hfuisz>cJtgS_TW-%EQ5!0UM-kvEueTF2Q zMRNk*+b;Y*3z$xG0Y5%j64ujPfJk!z z_t0FxB$^B8qq%^^^!kwE|6TpKB+TAjDEwxcBy8Ux3Hg7MgeR|-gfr>&1HUBva9_T# zpG1CR-j09gPNARCYa$OYs9%z%7=6;J>u1QY>^0VRM^ zKpCJM!1ode01=P@$OK4$EC2(T06BnMKpwyh$Ol*eRzLxu5Ksgt29yHI0Of!RKqa6G zPz|U7)B{&Z0aE90rCMBfE7>xCz6zzV?b7-Auy7*GNz1(X5G0TqBsKoy`GPy?t1*Z|mGL*!_S3laNVh$0{Z zkO`0gSpWtw0kQ!(1V|x{^8jXm1z-gf015#`fMP%ipcGIBC^zD07NdQ6k2d>1rz`Z0Y!jfKnb7>P!6a7R00t4T&xEC zKXZ2i-$r@n4}1=3G_S7F=(KFv);KsMkQh%62)Boj0|;Ox;XYy!u0Q|_!VSTK+*}^+ z0D(*hHwhMJfgV=xW7|eOw%y%!H`=zl?Y7&Ew%32#lKnqF$x0L@PONeEvl~8qEsrHX zGh@xXdf)eX-?t64gCyVv2p$MP1Wq6U7mxu1Zr}l4-~)c30F|IU4B~MJgh2#EK@2p3 zIA{hf0IQ*ht)Lxnn+YBWKm-op1TG*02Hd~{yub$(5CAF&f)EH3w1*Kqj)EA7gJ#eI z5}*~dfp(At{171m2XF!jxPS~8a03tU0v}L70H`1cLLdwxAPQmx?O_uh$3ZhlfL723 z+5tCA@IU|}Z~!NefD6dL4LraLe83MB5CAF&f)EIU2#A6hh=XQ=_OJzy6QC8efp(At z{7ymuB5(jFkbn#ra03tU0w3@L1q6T!f*=ecAPQoj3B*A&XaNa=_OKO?+dw-=0)7`E z01-HV6G*@XWWazMcz_r909NXuqMA@a5QIP&L_ib-yXVqAcoKbcDbyel*$I;K=(Y|* z-GnquC_9N};HNq5#TFp%BBY&X(7w_F3-rqfwV#L$5=r16BHY77s7&B2I!@rC1tI8m zMkM+P-yqQn9JDF~9SI=>7SJ}}qeUX<_DHmIXVdASl_KcwMR2`@8#MP5!e)Yj5NHQ2 zLxem`ICl^VVB9(M=K#KLA_>}i2p27gA$9;|fQSJNI0vx}h}~z?Df42DAkjs~K4-v( z6@=&%5TWw<^ta-CI&eOtIG<6R$_XHh^XVEU0yvc|K*6a@0EY7^<9v$UIAb8#Pc#h@ z8c>D^4^CycOn}Z)63958-fp6`pYRV7ZNQ21>Dxt!IF%0I1QKWiewxH#Mr&hgBfl~CO!^u1nf%k4 zr?saGPxU>eK9zs6_euWA!6%F-N{?HQryl1Y&pnoYOnoeGW=zd23}y#)nit-D)OfV? zi1kS75&n_f!|8|Bhw~3*9@1#-^X!BAgT)Qz24h2My|q5Io?o9^mtLo?%dgF>)z%i) zWY_3ximT1l#_G~4YgK9$zbZ#-rK=C*@6X(?-CxM|Wz}qcATyv16z&>orOEHcj$K%Z#Qo@ZZF+t-IltI zzb$ub`d0PU{EEy9ZAIah>@E5&#hcBWjhjmuE0fCbnOuLmU+vG|l(~t!DR*P~M)k)0 z4VfFX8w$&_%k|~O>&@$p>r2;J*QKuGugfhWyic3x>-Xjg_7eS);fwpnI4ixrxVXq%WGpHzv=*io@(XjRbV^Na?oIXby}5JK z=c?!C&&iylol`hFd$xXdae=wOSWr64IxBS+e^&0y^qK0J`7<(SXlE4WXXoqli}TER z#=O$pfw}tJ;v931F{gC8b$aS_{`B1J^lWu@{#cD~l@GZIKbhFx=k7wdqywH?w(wmAgGiJm}Q7f8?^3hx*9Z@6sa3-vU3!!XC z4;6!E&0z;7mepa~>~3CB*t51N6zi)aF3AjNempgBqK z-GmInpab}6t-#K9AnhPRAPLZj(1~V(PBa8`qJrOvihC!j;hm^YccM<*i7GAa0f9)M`iLgbK0x3@ekVT0cjCi&Cq8tK=^W!@b|*e9cj6Oo zCqA%t;I@AKEr1^+ zJRkxz;N46#18IoxgD6M>c?S^&8u0BTqCK<#-v(OvYa{(%SuZJ0pLksN(1yyQP6_(f z>!XDe%WFTi(|4W?<%b>n{GfI4T#lC0o93tG{b&iLQ5QVice%qPtxAUlu%^*f^$J$T zD_=`kgbr(d3G`#n1X>Pjil0JOUr9gU=?Aou-n6>SA~sK>bph|$=h+-K(-H33NWZ~> zZMc>@_iRN(CvEm%vrt*0kd`f~?23dRY%Q;DM(YFaeGOiu_4aa7c_BQ3&f2~U2{zLr zgq6S}_lS|(gw)r|%?yA9@X)nAvlXz-L=dzBc^KbMI<4m-v%?#7EJrhk+GtmMy6YWYf z(MmMalUzhE187#6i8hg$&ORal(DpDBEeSKxDliju-Mqf+iph5)mNnz$1_ZzMVuIIJxs^Uw|V? z1V9_`_7LsB(?>*sqn`+ZHoyk3Z8Omh;&l1YUx8@B<%0#=u-xR{CGR?Dv$}U-x5N-F zAUdDk=Cs@-Jr{)st`S;NliW(LMPY*F-a4@eC*E_F_Z_~BJgO|>NmZiSwa?0zVPIe$ z7pC7+xmufO6*PQTxs=27v%O27#fR(HIxGKzFs)U#cTKuPa?g@xP4t7k3!sTq2Xf)U z*igP8u_o*m3Pd|hmw-$^Y!Biv_Z}Wj3+>e2L&3EYqUTJCf*5enU8DLEdisX)eWS9j zC(aj^0dcSO&n~aSibHQE!l_*kp8PHsVjwboSxAo z($&x<(3`#sE%aSzZ|`yj7IIx^5br{hcNdznyU;}4g$Cy?v>bP#^|uS{tzBq6?Q$m< zab0M7>yifuG>UbJn+dd9b)j9V3$0CEXhrHmn@|@wOrUwD3k@P&Xx`{T14UOnxtJbx z6G6cD5DciG1&Fbyq8p2Z$JG2hKr4 z0dXL1CIX-hxQB=!Xa>R#!V8*!xRX#p8{K-;3G~>1a^W(G;XR z1B>a&pdC272^A!POn)yu0Gff&OZY(xaP|=i;O-})z%fXKfw+SRfL0LOiEZ3@wBtZX z5`K^Xo*p~`QXdfliGIR0Ktw?sa10WD&;*3dgaTRt8zNK?2mB7g17bkfNd!Qg{ygdy zx;97o8&{Y6Lyy@EN8ciD2A5pS&1k3NnBk%0m=Wnaj~;ENWr;PqqN^*C2C4amHdI!Y zWwhpS<(9zcDO2e3-$J)Z+E%&e&;qI>Pi>}+xVLV=odKmkUHv@$*thQ{nWBX%i~6SM z6}0?q`I#NG{;F>Reg4_IDZH6B;f`EhyOx6DK8X9z2Kt{?Nv+(4Xd8B_pMKMPL@)og zW_sytxo>WD-|nF^w2@v*((~!F3H=T%U`?M2XfLZ@8+s8x@RiaRtuK~7pZ{Fyv)U*6 zN7)ZD?`!WD-pjtHzgK+Md{@oohcZLjP~q+D+xpwZ?dEo4duf}sEwzo`mU}Dxmikuy z&CHwH|A7{h>{I$v#V5@tjVDWwS&yY2;~&eJX;Y=O^D=|lVByj1qxz%8N6bfzM@kP{ z52qgHAI?3Len@>N|6t}p?ZLu^>;`>9alN_TSYKLatxK)r*X7ox*Q#stYcgxJHHFpL z)%xnws`P;MK~+?%)U}1B#VabU69Z#tohV*xUTj=ky2!dHbrFA2 z?!xqi>V^3WG8bqU6wc3{ub*E$&pgjKue8`&oLbB;&MitWQWxbHW)^A-3#n{MPZfL3 zUZb~ku61teT>jkLIq7rMbMj|r&eqN@EXXd<7ZlGj&oa&`ooSt!I+H&$cSiaQ^^E-d z%zSNrVP1BgKCd{}oNLT2&9UaB=J0d!2H%r8g+DoeV(NtAtkiMond&rM&vskK1gZd)Y1IWxueoYsYm4}XC`Zt3zM>w^hw1d%_EH?OB1b$sfql=TxYsd z?Hm|q+dxmW6tNvPY@SPuVgCyhdczW4`4W0XRtV8E8 zb=TNNKI57HH;2wu$I?w78B4d%ypsO9b6Y*vhkq=cGOkFCjin3NjMeB^I@M;JM#s_x zZN{-TmM%1|XmkPA{yWrIy0GnFw#L#$Y=&!aEM0V5VGc5uj!x~!`2U#A5Chc zWIIX&WmVjEkVeX?X4_H5URLdHu^j}5Qa>G8ZLwQB=~=>d6da0Ddwp`;Xp^3`)&;4) zsybr*F}l)saF3UZT|A!7!GjgMe;jMEJ7dhnE}nUKirs@x{!=YP_e?NS-LPkbdUeB| zVz#v^5HLU+s75DvGO))GghPJt!6V$qvdUf%{cbT+X=R#p$MdF zuJ+%dr$jo!X1GcbSU(%dsMCXVjw?+4EF=e<9%Q1;5S1dZzLc%K+3Gl@BbV%vwxi%? zTR#a&O&zB;$RyiAP;S)EK~j4tH8rW-lWj-Aq10CjYYwG0$WgX~;85!8gtdoKE&|JM z_R@`#@X+OwFp<9IFO!5zZlJOMCrN^Nk0f;bRTAF&wInQfP!fK=K@#rxrX={^kc5ve zj0lS_l!V`2BMIv-kc0{J_4DV`*#D~~;SVz<;gMSzZrS^9Bun_ z;GEZgBB(j%wI2wk*bahoUjKoh_MFeau~ZJ_)2Ve)D#yIHBK{=Zi$36Wll4`%n3js0lLD zW{}FPj`fB8A!j%{)@HcMN0|D8f7FjK$BipYeaU~ok1(@rhNygmIas-`*Zg^ow;kmW z<$g_&Pfw@|QeQeeQ!X7gmP-dbp3cF;P&!OoGS*45E6@C&DILle9%_TQHt_Wj#YJtc z@Wi@PS3Q-7zjQchT#*_p9Zt3xtI^Wo6q|7xEgep^8OL7f&|@=NW2J*(J4yqk!)dmI zprETS9cl}@+Iq)q+fi^R^@T!BL022(belmc1zmlSaL9sgj?HkDg08-J7`33AJFYPG z^}+)cbf3JV#~0x47rar2`(H$idM{hw0q(f&Us?-JzT64#vWH3(i=yc+9Pe zwXZlVrN#NR%PW+pHr{7TgKdwsMaTTQ^IAR6hrj4JV_cEOSaek177cv;#&>9r{_Ql+ z-@_4ME42ZfOl<()`HLhhqxAs9>#6Qe>jBK7^#H#4D@nLwy(Ij39o6-}E(u4xCJDd# zASA4!Hh?y21Nem602Wglz%PC;2?MkaKr^ie@Yc_$Er8kpenRvA^?y+kBx(ov)=)^e zirN4;Y6IAod-K{E&OYwOFW2nw@M7-Qh2HW8q`1x*C_hwB$M9cy4#xk=a}#hLvfJhP z7zZq$!BMi4d?pXiLaLd(0AqpWvylWPpMx}6`CJM1x?oC%3mIJGhKrFVFQ4ay=lkFV zet4k*FG7y3e6b2I3BpT5@Uk$xJOY)POY3^b58aGS{odH4|W{p5#{n<+oyfRAFtu{&&YYQ&s*vQn=+WVEnQ? zi~-DYJ_f&t0nGB3FoL;y7+=OnX89{E@T(Z2A%6`cn&q!!NVEJ6WK+uDMCPmfEgt@j z0KYB5?>OLhop1++Hp>MU{GJTI&)^T-@P{7ww_f-oAN;W&{+$BS6r68Jm950{3%_#1vF`R@Y! ztqA|a0e3lJNrM0Bg1?jD?-~4q8~)J)|Kx@L&j`!RxARxpHG4qyzm ztRm-C4kAfe4k3GA4r3g(9Kk?pIf{|gatuSMR}wwgiW1sII$TX*#aje;N(_#R2w|H9ZpHY zsT%C!1B*HN7y)*RkaCI1X-M0Zr%P~#3zml=$j34~KF$qidEoJ0c!Cd}h>=9{NeVnU z08dfjsmTA8dqU6%!_y*gc9g6h#_1U1AkS%nbK`JcGn|i+N%9#9cxEd+s|_wdKCygu z5}t$fS@~RykC1x>m=fVa2VCTYizRp-hB(RR%kTmQFLc9;Jn&)+u8=SB!At${G6h~9 zfJ;=^7li2$yaHpT~3z4`Wpfn^rf$HF3DM8Ln%A>l1JT28qcJw!w$m;loJkmLEY< zzWk^F2SsQ);A0q1COQw`EQX%R&-vl=3fzQLarp(L z`pYi{;pPyu!f;Cjz7!>^hp`m{*W{O*;45+XDiY1**Dz2(emw!-XoYXK!MEDswj|t+ z@ow_l9dL;6C3DD6m){ZLyAJrC6TUCO4_xp=8GeSrkKFKM44IQZ@xssg;OCIyE`J_F z6yz^p?2bIF!h8^ZF$BL9CaZ_>E@xO{C1r-@=dw`EOd` zx7*-%+TnMTaEAs99q@Y-;P<&c@&`Qpp#c9@ggw2sspNat5HJLRS#VA;`ke9f2Nv$RL~)f|JAWs0chd3a7;2)Fwy+V8~<2pZP=dC3G~m`3pT? zD1JWsd5tpf)1Tu%XMNWAZ1I!qCqo~nJ}!M^ex!d?_)O+A>SuBvramlvV1A%~PnWPaz? zU7x=$P4f>}%Zz2kYqK=_K>nKaHT*Re%{@@ODtnc7RsPEKm4i$5rG+apSEyIy(y4T* z&!nvW!jjAqbxDq994K98UZ!7Gp!o*WOLLc`E-6tyzkYGyqRd4qW%H*lEM1ViAb)=P zeExik^7xC3vx~LGdCKDF7g-C9g+sKS%yLL z31oY;p8Tn4noXellmg8ppq`vNDRolmMDs+Q<`Kx8pq`LBK1H(#n6va*h2t_bhd}Pw z)Ula|c-6MtAX;EX^E{?@D*^UDi~CMgwH0XjAeu zYXE<=b(C>bk>(80Cg&%mC-IXk8V69En4PFi?CmTaVIH9$QJ}d3)CswcR7Z(s3edGe zGLuwko`6()sm*NDX_kOYtJ<1Nq-c%+vqf(yG-qgrfLweh%?_Y7AG4xHv>3@o zG@2P89p=MU$e?)vvOz7FSJNu5S^*vMK`Uq{Xb&|!=5`P~kbn+Eh$wI*F+&s(x(NlKc}R5k5ix*f6EOhLIw7LTK}0(Oy*UU} z=|$AXMbw|^uS}qBDx!`_vn3Iz`{A#Q$EZuu+>eAWuo(MFpavk~gFEd5fzQXZ4+K7* ziulYa;=?1&B1GV`8~x1)d^i&EIYz`M7ZD#>M0{4Ey(aL;*pH2MP!P6$C*Dgh2#EK@2p3IA{hf zAOTuI8)yefzzq^S5P%3AzzHPa0y1C(?V%fwJ-`cmzz-A<04fNA5D0?^h=L{%2Q450 zT0t9V2T7oT4!{i&JP?2g9KZ=A-~uv1d&uzE4LraLe83MB5CAH`2zC)e)WtA}01Q?a zF<4z}0&&m`S^$Rji>;syw1XtzcMt-QfD6cg0XOgxw1<8?RzV0vKorD490N3KgeO3=xe0xkplv5H0SLo1 z$y%hFO3^5YfhG_KN#NW;e+dO=OD&%=ns#l@zyuz%uL(c|4&VeXAcOEA9bFtp=fE*J zL30o7L)#FcA#z|R5dtbgwFAC~2;wFc?F6_-QE%Zff2Y!x% z20;`gKoST6LIEKV16(iR05ahFhzN*-1ds*^ZV1~z0<;4+4#xw$zz0Gg23kNnm;jvp zgbchu0d5*CEh-=YLZAu6K?_b)Yx!(}c8~-b=l~PI5rFR_1Rw$jZ~_UqfD9P$00jg= z2!ufdL_rKRfjF4J(L065Ur7WGAORO(zzw{>2jZXwBtX+3{Yev`4LCLvGVlWhs2~U; zAP!nU0<@yoYX>~aJ^{FZT>chsmS{I-v7Fw#ljd4%!VHUUnka;BvGn%y;^K;T)5Q?& zC*p%dXo&D)`o!h{T^mA@@B*181QNr$hz?vYktC7mA$&L$D&X<{6@UmFfD?(K_tR8Q z&cBy=PkXQMZkB4w#dpkijCV>oi|WdJE;p1OQit+XTh`t#Y|n1jw-49N|7W~edc%4n z^#)J1=Jf08>-pC*uW3|o&c3R@T71QP#h{wA^>XTE{^i`(G}WE+FJ)fRUMg(KZqc_C zEz>fr(q?OOYBRq%_hR}*mFm!$7qk}&o3fj9szsa68_$=Xvz|*)Jv#Sn`dRha{KgE` zqzlhvpV6NwK5bH6y7ZLwRO%`Isoaz4C)FqOPh_6Zs79TATz|aynE9ANb!y8@nY@`B zOjE5o|7hk>?a{&`S*lkTA2uIOK3sSx`;h)nk!se)gQX4DhSUb0>elJ?>iYb;4Arj- zYqM+hwZ%0i)v!yet<|a3{Oa7Qo`y!YtM}&b$=sveQ@A^Ow|;k#>f6R$r8})VQ+M)r z4&Grino}z7`K#ewy56C-<->&GioN^pXt~73pe%M zq~4UjF+;WQ!VTFQ^c#xHO{#yFuD7mFUC&>iqZ+t+U4B_+nYOGzb#VRK;x*ba_PrFCWMO8&~+()3bwX`brh+7*R#Hm#?NR2w(?N=vLIsUsZee<%x-g&0q_|X$>gQ^2{@l#D+PMX)q3h=q&o<9C&Mqym z7Ni#N3vy?r&r;9IpP4yRJF{>`_6+@u;(T+yF~2m=nwOflbDt6Rxzp39tEcB@XQ;kj zI4ygcep=Bmsm5OFv3gQHd{2(*?CPocQ!=M$RBz9ote-r5QsyM>q{4|=s<{_WFi$W} zC>?K6-JL%^H!D3$ot3BByLMdR*zB?Tu|=xC8#7BYtQn~pJk{XS)79ylr=_Ox({fac zSM_{%rd#VSP(5Bhrr2e68C|8R*3{Hgerj$?dWuSQ`OMMU(S@V3N9k0XHzymDOOpmh z8P}gbB6EaBwfgJ?eL}Ir>@cWaZ)quw*K)};)$H@_nRczc(AL+cw&kgAueBBu*@T`b zQtjSoDK%Tosb-$)_vyGA&o^bLj$epnV|uI@HK~@rcg%lJxD>KNsSqE^1=B&5YWf*f zQwxD?K&QICsTfMhZ_%t7yg%nl`&3`voAGMif+y?IJw>YXC#lXqzWM*=f0MucSjzwZ z&KE0Hf8_sb-IekGBl-Vl+Dw~hGz;!5n{gV=f?HrSj=e0nvu#GZjl*$K22t(50XGfD zadS)dvPDmz+ATsPM}P#kMY+_XI@aZARwF7!wSotsq@xX@;tM$3zfY{seF!JXB!R{46cJNU&m165LU>x+s*-cm2I8Lq)$w3m)6OnpId zz+38NHbXQvjP`QdQE*GGFB@vcLFzRZ&l1}~kZE3@FI_thvNj34&vukUlnymPK26sJ zsa^=x(!rv4?B8))%B2GypUA<{N(UrNyZA#)WpvKm^Uj$~gK74b4r87DsP+}(EhF}n z7ZWBdxdmlL`9ldtcYtRMa|Wa+pfHCBdPX){)%Wyn=F<1|`^Tx~N> z!)3@dHUm{^0d)P<{u}Uf_;24gFrF|{(qC&kn60Ugme~wfDX{8Gl2ON!TsN*T^}}%X zEwF0OF1PCx8ppqq^7MC89{x`$Pk$5T=|4nc_UV85Zz%8oP2~MYh3{V^2{$aGZS-}^ zwUTh^EJ^tB?KD2%Pn5&|v?M&UMiRQ||1W<<5-xt3exD;OyuU~i&Rr@AznLZpt8bQs z=zmJWt0hS|#gv2{J0;=T0eUU{f4lMz-#yOR$2EVoX4eAeaZ}%^ef4LktZ@XQC03(pjQUSXyJ*C7 zfd_a2vfUXvsTp$JSpcX2iS7(}?ko(D<<6o2IqnQS+AI!`+0I%3^4b~F+8MIi_wFaQ zBmq*}8M?t465AQ_+8NT?8M4|LlG+(^+8I*X88X@#651K^*%{K=8G6qdlGzz@*%?yV z88X=!64@E@*csB;8M4?JlGqt?*cnpT8B*67dfpil*BSEG8PeAG?kBcz!vqhIy3Ry^ z#C7Hb5MRIC0Ey}>0+6Q8VgQK%3_0qo z8MFXorZXg_GvuZ3-A`;u0wfMFekUOSWTrC*KwdgSS~^2o0h0j(NJ(eNNM~Mve01gq z$VO*KMrX)HXF-5$1QrHJLuXNdBy`pU;-DF{03@C>o7L3F8d;;tc8H4B6sL0mv0+NEK&6 zfP52%JaHBQNDpVo4rfRXXUGj_NDbe!pU4nrNDybp4`)aZXIwYI10=365jcPoNWcYT zzFsv-wZk54Cyxv8Q%;E-wgTQ4C&rX1xWU0$n|DO z^=8QQX2{iHNbqLJ?`BBvX2|YlNbcUdpV)#FZ-xwSh6Hbh1RtgWWOp;Zmk@vm9KZ=A z-~uvW0C_>o1H8Zo{6GN#pn@O>fiQ>wBycn26tO0N?Cm}Ki6m}@9B!5X$lzvepdBQE z20Fk5!1WPGPGU&hX2{!S4uGs}hNNwVoNb1bZHA0(hJh_<$cMAOMhd#eyJ2?AgySwnRV_AO)Kt1DnMG@~;`v zuNkthSu1D*$lqezAi)Cxh`<4yKmslx0|wl{1H8Zo{6GN#pn@O>5qtL&TOuF|VxS4c zK{IFp3D64KKs!hR4RAXM9tc1L4&Ve5Z~+-G;07Mx1wP;h3J3s|*t4HOYzcudh=3@F zfhG_K&7cJ&Kr3hi?H~#GorC~H-~dh_0T++~18(2}Uf=_Mpnw2SiM{)YEg^tpJ1TpL zD2Rb3fF)0;>?K-20EH$9V2M+E0LW1sIl!U|1=INx%hUz|JQY09t9zn*zrd%f@)H_mke2gaErz>RZ_z=3u8y5d@Mt+BSW##)nF z!>`G$POnxe13$A$TUB@<`+!b4_~!k_{iUpxO;HwpZXi9N4&?94P#%6^CATtnZ~ESY zCZN*#7Ta8;wE36f%6$7`7zBZtCQ-SjG^&5*fm^T4NyxiRMTy<`KPG*iar*L}q zbe;0|&DqB6(rMOdDazo_8EHc`@;w>K;V+!Z)vX7ZJxM>QNO}CmiKP>)6H+Jel*yky zUOhfPD>F-@T>k8F`f{GZ_@@(UBHxl}(J0G5+pISi<7V85mzu1mR1@Enqg;PA zmXBtlTC@=1#yRi*0A>9bnaK=Rk}b;n=V<_R+NHYkl=-ho1!vZ&JByV2Z#YV#C8k84 zvj5Y9D&+YLua)!vFWn`tokjisY-IdD`u~$dzc1f^Mp}8Ux7i+2X&pmn`|nvmKvPDmz;1I{IG!e(Zg(i_W-s&Y0&SnYLu)>64b6e$~?Di~6rxN{!(A z%_p+ohX0`k^ZvRMS3Qx3YA~-fE%Vj$T=_b{==3sf&w*j<$QwFiGft&xxxTr4Bu@1t z)x^2kW}HfkuUI*bssjqmrKwa~d=C)qmT^U+n@jD#L$xojupJET%k@34hwKo&)n>R# z`!Zc)wf_c2ZC}1^Tw&@Hb@pvv9(nKGZZkyXmR;XcUVER@af~BT?ywyN_qpcLlU*{{-DXqbDAWE>vPDtoY7 z_OHi!%bs4n2OpvXb)^4v&(r_+ZrM~slrw4e%tk-C=ACy>-I=VO*~5Jgzt?7*M(^P( zZN{;855I3*(Hgvm57-W7>mHu98Lq*5`2FJwGp2j^12#i6b`M`=J4yrh@YS}1G;$AL zV>`;&@8P@G+75E48bs}E=<94p!J!WiZ{sR&xly;Uxb@OT;rM=Oqw z;*J`4qg))#USKSovt)K}?~-%RpR;hmxyI>B&Nyem8RyJdQccgP&UQQcGe^oHJn`V! zIMt7+d(v$7+b~j%NG{o1pP)yzrOAf66Hz@ehbm2O=C0yaaP>6;4^>7z)#ONI{8Z2D z0lyY$-oGDj3JAB*8UQ|81K_nwX`cS&lJHZS`|oy|`!9SVrR!cv+8 z@Gms~-{bWE8Lx(gpVQobD{1b(IDLKhDoN<2IRJmPLK5zxIRJe>kc1a${=egB{=e_i z{C`iGAwf^k{C_m}-_@A^pS}jQFZ0Jc`?zgit=YX^S|I(gO8-Cl=||c%)tk!w_2{aX z?;cNIJ-X-R^#|{tN7uY;9=vZJ-SYCref#CB`?_(|{&{rG%P)=AH_zJX$2EQO=#H1S zHQpazo>%UpgZ9N&clD!D`{c{>$bEHBe>}r1a;%|#cyz(bKNxQxe05KMfNpsCXQTDQ zvv&G%rT-mW@A7X(?R!VJyZpPx``yvyF8}vI``oMh`rrHZy;J)??c3fycXYSAg1*Dk z;a;BBt+nCK_K{r;wxZLW9jLRN4`4nXfn*|Z04I=u3&?;0H}C*2@DuWh3LXZ43W6X6 z!XN^oAO@O19JCPf`~)7h64hOu--a#iAPElM!R|`ZFFDU<=Q{e; z&;cd@u8%-Jx%@+Plvj84hvVrmM_;-8bM%wT|AIbp`IqPtmw!EmK5=x1%fILPX{UG~ z01-HVM96<};h{`a_x3LgTin0{yub(iKmh>|BwQg^2#>=c0-_)Wnm`;hgBFkgt)LBX zgR~0~o@}TSd}LQc5f5JJ1wP;h0YdIn@h}KNAPgcP3SyuM#6dG?0SV9w+CV$d2>Doh zo!`|xJ=VK}e#vYf$^1Y80ic2)2!Sw&fGCK8I3f2o<6#R(fL723+QF!u-sta^FFSOH zcXd}UJ3z-bC7V%*a)&qiy5;4KcXp$nTfSpF9o^{Tme-(@ySl4X(V{-;AUIGbH~P2b zM@Q}8ZpV+GO5)XAlHh>=MBo5UAORPUft!%Gc<|5*e83MB5CAF&64hPZ62g`+h=3?) zBIKbs9yWs(kN~Zq4YY$K&;Z{<2tWi5-~=v09+vTt0XOgfFYp0BP(T2vAP7Q4bx()G z*b)Iz&_u|EI35m^KbnUMp#mQCd}h~&=7$E&vuAy34XVX)m2qbNQjn zkVbRuW#87{E^ars8{13UtZl}&(pwhIxW~WM{bunE^9|#T((4w@xW~V4y_R~7-!CUX zqgnT|TlKBQm&}*+mx?s+p0TB5Sysv#*sN_X(9C=Ki^Uhr7mOE5o2*T#P5h?Z^XcdL z=W{gsp88z=+03)rvjv)ePv2Oqn>Ap^li4TrCyO)(pYcTLar1HG@zP@!&BDh&mNV0) zYUXJkK5f4l1B{1D4_W28_>wdeUv`7Op}5{$Z>%q^v(}~7@$0O$DVmQjwyR&dd_744yBF)Zc++MoPx^2g;*;}<+3oEiKD)R)?X9HOMMt||9 z>`gk&(P!Rh+*rE7x*imH{a|09?nTw1?rG?hQ)Ixq?E|pHHGIdw8mv-zb@QcudAm_AWGF;DaPX(tqp&mONIU!)oRj9JCw z%;SvXO2=9>r{4h0=vSO!&M;<_rdu?pA3r^Jh%A8YRGsGbGp86+N=I8q@2Hs#pg75# zWK1d@X&sq5l0PyxF+EY8nD0z?s-4x@05TJ_35AYqhu%@7S^f;Im<;Th2_Q?e{1scx zR-?6)u*&oNSuLp+z9rY3rkVco@l0Hc7ihLWeV>^C`f0YmLO2`N!^KcGq|^q8JucgC%`^EB_D#tL#)*5#rr zOEdo!B~vn_lGAb;H20t7NI7^%PE6D6e|aGzXhMO{j`aUu`LE}F{RHa&Kj|ywn+#VT z|KIb+@;4*hJP(emd8EE0^WbAgAF>&%(%@d-nK^o=>BBbTR2tmto4^m%Y5K^xqSg0f z9%4|=qc(#z*aAK{t}tV10sqvj3sHH8?oDynPR)_4xwlEi;jvzJvdr&;yd1{%$&pL_@o`0J>{5TiW~@dp^(Sq{v3IFI zHLhq4Ug}TV4A$VK{>-?-jOkL}SQn!HQqR%l{S^03`BKN@X&fBwQb%9JCu8i3sIJR; z$i4_X@qeZ-qT1EHXKD7@&WUI1&P?@89sY~|xp75m?BajkW~@dp{!KRH*t_^&7+16g zFa8&825a!*-#o4`W4ZWuTQ);9*3-Skc9gOAbbtC%U6A_w*n8#s*!$)C7#`~!9PK`a zk1QXL?ITO|Hg>3wEQj$fR{xRZptrHDbtk5Jq7MIU?B#JqYV0=lip^M!-o{?F8OPpj z?6q-4Yw$Mqy3Jq>-p1Y-SD1s`#;8kni&Z%>huN@&6C}yCk$c zED3MZ*#9|iNy3!pRN-s1_FtOT{@Z=LBs_hmBpgLK0H6IOt@B6y|G)ei_5Hsp30J@GPzUH}!{-@P(gC!Ud}&;n!c1gzQU_aOeF2AxiTAyq%%kf`TOcV5cN3r?LOs zFs%pZpL_p_&K_>rS1Y%wa{hmBCI7#?WeKG?Aa!M|Nuh5wdKUIXY2Y@ytu9FYZT3UD zslLX2hGZNbPb)jxZ5AIFzdgo}i_=EZ-Vgb45l=i!9~TdKqpjX~4>-x#_PTRbJ$Hxy z&inSbA~kmB9kLm#(K~O>W*mEW-gm|ot-(9*yEcP0c;|g@TwxA!=cS8&< z**>rxW$bsh-5=Tx(nzZ0XKY8op&VqeRc*TaM|DB!Z_*#rjrk+)lk!a(k97`?c9X_u z;h&D}vvBnueW=gEhxZn}Xy3U@$9L2IxbECl&*kC2X@4@VNR8dJKWj5qqc`o(*^FcF zrv3SGMQiY;{RP{>kWNq6SM9%nLk@`=wi&KcM%3TDM;#KCA6J0x0zJ8VJ{!34gguhbV|Kb0Vge2Af-=X^dnNp?p!)x;uZD#0pGR{9 zQvSb8U$Hq)MxK31q<=fxb4Ax+!WJsg|9?R9=3Q z%a_YeJl3hb@8I>T-;S+*RV_LXRlhpCCFi*7R|hRie^_@it0(vHm!*F@u1JlQr9ZM6 ztI@Lb$2Q|MSeA}7_x#oS{NFx=lowlRkQ0j}O16R0q7i|Z@q12a5qm_UEY&!}L#a}JSDqja`4yC4$ z{q$#bL8`B+mVaNN((Z2VtL5?!kEe5Rw7TQb+|dJ@Mk)UmEjG?M-B@_~z5|$NFI-Fm zn-|TQeI5;WK7CH_!a1{z#d9W&%$8mqhdh}Q`$lFxN{+0UfkFzwWf}jv4rSNJ&NGfh!l&r@yHSQGX-(I^8zX z+&9WM5>t9?}vryvdJOE0}>>!MI=rLxL3y@>L=L!*&&n*i|rCSHV2h3Z|%5Fgvw^ajgo* zs45tqs<1%C3I+qx--^JXJ_Y0X6pYYQFgQ=axI6_z@sth_?;~9O1OpKe1Ka>1 z059-^0FVcXAV`2V;Mz=s{r0_*7;REQAOd2b1MowH2wI7{S2=g=w@KN5le+(=#QvMw z_TMD!-0#=R`)_jZzbUf+rr7?Q;`?v%56|ITTmAQx?=Bjx9PO&yXoT*wIiCYyIceFy zvitGcrJpKO8@=rb8XW)9=6R6)mt-L+ZGq>`zN?cEp zo|fpTd0J(A$NroAz56{&9NM$V^lRnc@7RBnbN@}!{+nF;Z<6=l#P;9h-hY#4|4rWg zH~IG8) z;slKD35p-YKr?Xl5yCJb0WWCYNhCp{{~US*90P<0_<=G^M1a^sm$MUifEW0I0^-Rt zIkutvM{J{qRKyc9;Jaz}CEx}saP*H{CiHjqS6=1Wf0LK~sICbkw>6=E9ts)43xq%~ z$6hSQbJIgQ{X_t$n~4Mn1@NI}2f^Xvjo3#8x&jga^Rp;e$)tRH+Tx$!ul%|u+N59t z0|nFXE8#vAHT^^Yc#`uuwzV8r?3qt-fe!?*w<|}E#@$Ez=m$X%=`O!LO~1SR$`*Pm zeXb!Apq+lFlISIbA;Jk_$&pu7?xn5tt>UELqO^g)AQ1%#5a8$)QP2V0{X_tSdgpPh zQY>`z(-R#C=LXtN`bp(DVhAtv5;E|ER=k?;9Vtn+_)UN1x#9gcDfDtGohng0-Sj#I zgg`sJahzLyZN5bLxRZDvg?Hi|1p;{EsK8OZqW3=6x&Nk?>iuKyvl9Dn3epAZ-0FAx zr<7wxas4KM2HFwWx0zyg?0M;)=S~<}z_ChM;~S>;vswNP5qe0Uzv*oo0c{}OOSFOx z@IP?!565ZUb1M3V)#3aXGGEZXQ22cI^ZMtrpDTQJ^CziK_)l^lr$1Id);`+x;qV88 z@Ati@zL$SD^RD)8Vb8h=+R(1;!`m|3v~7jAvTx~cW#81xvmz8b>ZSA+bxYpLSk~s$W`1+-MgGOy3+Wfs7xJ4jo3u^4p0l1yJ;y(n zdp7;7`fPq9!WjIKazVm{jmCQ{-Ml6+Czm0vk&SI7B`q1j18sr*80?Xetm9TdY!s1zc#a0 zTU%I@U8Aolt~OU2t4ph_RjF0{s@wzV2h<1h_h;_c?k{AsSv^}EFb9l*(tXx_sr&f* zax2p-)s^{sGxuuu7VgR3qu*1!+q~PjyL6XzSL!bQuH2pJJ2Q9m+#a}X=ZexT!#59R z`ue+X;%?lreDn4F*Yzw5T)Xq?p{oY2>|L6?VprerlEKUSXeI*f(p?u@7w0ZYU!-1? zr1^xl+=79#de2Ork)E&4&(Blm8FK@3cFrC; zZNTX5NuIjvT&sFGskMj7G`dqk($BJ$W2dASEuKvWu|G< z3VK%8^=b=U@o4jC?UwaJA^ z*-84O;*sW&#*w9o*2L6AeqwH)k^k8V`h;SK*|HQjBLgIW4Pl-j#7_u7Z@6bgAex4>ALQ&U4(0TekR4q5l8xjnw~Z`~UZh za-KJ5@uDT8HFs7UIj z%{Yy=ZI*1tsWku9w{4D^8Tg;$3Pa6wwf_bVl&JCP@9IKSUs3Hx_!j+^wcOv3jKkyU zWk+lNLqEc{LpJ}7Tw3K(d!t=gm1TpgmsbOq*1`J`s@>o^O|Xp>>i6ka_HsjdqSNN}SMXSFA4>5bmpKS+2Cq{i@)*bN0}^gHgh9R(e`^{K}- z9lJF_KK<{yAoVxo@6dbdY3{q_8!{eG=itF^$e$bQ4Y@pY=W%{caM(9Us1qf4ju-@qYm(30(7 zwr}-Z9B@?Z_v9vwu2lhiFO)J z(MVb2wH*bAQlF|+Q`Su5sOxj2@84G!r1Ce~JI7doE{|8a?~#nd0JCY3~1dH%P+IPm+Xt?~w%mUnRl%2T7RzYnrQn1LgnI|9|=h<^R7f z37M~}f|qgtUb#jRW>XHpPi~{We98gfCbz7X!k* zH1SqBU4PhHVG4 zRX#>+hHJ2VjE*Zzwa6Q}xgNNDjM)s)SozpwJ4yrPW88L-M#{%#+ffc#KJG1qTWklx zq10#c)>bQPQh9eLY)8SNDAhu{@^!R);nun!)mK&9`F=oG`iI;P%SAmNPv_vliu%#! zBiJurcm@WW{vR(!tHtV!O0ha)pJKJG?%Y++<>4<@+s75Dv0^o8GghO;s%A4zqs3~6 z%{cao)d{wv*~&LQ!e+QiNmt)8IBHW}=eWYuw+J4vscxdp5RHwDIns6%+*9it1Z%2K zHBEK9C)o~y;-S7hu(o)ZhTHQna9C^(ccj*L0Vb`Ts&eRZ?;P-;uMqisjQq12bB zHGh@bAX97y!J*U_r?rPNqvo$N)pisdN}yW&R=(C2+A}yxT^gyMchv={zN%Vi|A>m{ zr@0@O3vE1}&cTBf+GA`B)|dRxbk5Dk=pQ|K?~W0wf_?I z^+Ou>pQ7>qzol{iYwwbTraw!<8^5Bt`_@z4oyPs&_;pEeye0`>r*Z#F&!_SIS5dw{ zjr*TQU%$Or60V`~{|*}ezlp~Gcl}Nh^52t$MgL6m0aD%n0s23dr#1)F|97~#-%Lyz zJEO`qbIh21ZV|q0PE<9$YU4z zAp+~@iC9KYbOH&ufD9NwzPsoFNO~820L$o!SVd1%K@fyM7(@V8&l8a$FE#K3^`Z>0c%F#0^F%N30Y6Yc0H^?2_+khk z6<>@1pcS+MESV=J0hY`Y1t0tK^9yZ~!NefD6cg0Sq`0 zJpiK)L?6J=15p83B~Qd6d145JK?FoW3^W0ZQxKa01}lhI9FN|C7_%U@0SsIalYpoD zgoxGgM68Y{I)D>kbv)4pWWazMV7!Cq1y~(VR6qczAP7Pr3?d*3VxS4cK?_KLR?tS! z9=78#vMxoeiYM|w03yI33(*O%DxQc%@k9pP0C}3C7x;i5U_^!(02r1b2EqSl?>*p~ zxUxO|Dbh%zKI&Gp#)ecvERzsIniYDtXz8&PLIQ+O1|mQs5Ct$59?t=o0*_LNN$_~g zfyWyFBOn4MzzkpxJRVcv@pixgNPrV?0SHLpJpiV_<1qss-v9)FAb=V0_%MLL6}}O` z40wDKz_t@OfCqGdo(|5E;XJ0YA_H z1b`qA0>VH9Km-ksiSKxX(eO<`Gk}Tjcuai9^8n_%Lm6UO01SW;5CMeV@MZwrO<+9D_{d0fCM-J7vKgwfEVxqh*#npfB+B#LO>Wm_!8d;$N+PIzych=13Ewt z2!H`F0wQ1nECfoS70Wij4mbb_Z~`vC4R`=A-~$?f01yO1Kp2PsjX)G&2M8R1P%F|# z1Waki8vtj^OiF_})HxF+OYjT;(OL9#00Pgz%h>!2N=jZnK!o(LR|!F4h41f`cB4Z(BjBO{FfnXPbN6DH1HxLCveFU+eARHh# z024zc765E51R0375sX~~7A5Nd{6G^Rpo|@WcwjmeuGdU|=&li*fCumchMpND0Pyw^ z?EM4@a05Od2!w$~Kn9utet;kVM!*DE02|-{T!0T~075_`AOqt7-9bW`GkV^Rzg>DO z`&QyD_O0BT$v34p^KYcykl!fe(z#f!*q7;x_my7HzMgoUeLc57xnJ6!uklqczLI$* z`by#D^vkiAhw@jK_Z6O3`>eCi<@Qwl*5z!WH{BcSE$+_jj_)o#n|(I%Ecbm68W*WKhBab zJ7)6BKAL!xeKhw-@)7Bgd?uBVGlibd+NZrUEv56_scyNuaC`dp*zLuwnXU1yrQ5Q@ z%;*>W)Qo<|a<#NNzbds#URAg@eQoU8;x(CT;@6Z`W>+Rw z4jeVJU+${pRnk@YWGX2q3!UlCSZA>#(-H3|UHR$R{R)?*FN zzdXZVVjep$H#a#~nwy`Knj_CC%udga%`VQ$%!Op03g`>tL3tvK2LFQ~NtVgHwV%H#ic%!Yq3*#*YnP<*NOlp(kMrp;ouC7(pE9(o}})*+MnuByybp1?5T7bpQ%|2 zx+m54f=W-T@gty zHjv>A2esyjshXvXU^u7|a_AhDkm}P}?V|oMJ+V(RKOu??mM1AZ4qeo(Fg*p(|? z)PvQ(vQFN}c=$2J$nfgmD7*2wsgvB@Xe+;NHA-f>W+}*uy4J7JWUVzqW@r>r)@15B ze?(0-Q=_=DCR5k{Lu#^FV-lmb93M-Q9h$8Yp|1Y_g{u6gn4c-tKbFs7z@e)DNzA0~ zg=`0nC-~{nbwA}+6zhmDo;82YlBJ)C8W_Hsueu9W!w4rtCr+Gr@;T8F+?U~tgA~@rqx8`n)y=BjyyLHr=8j2HefnsgMp^ahqxl-;)T@sc zXq2N(A1%}iq*+y64M{r_o_z}-)_{}9>!-=(qt5;XSTFNy+pE7|^C^!oz&|DUJW|9R$b@BTh` zA+`UzzEMsb+W(D5kN>|&WBHWthPokD)eI|FY~HZ)s8Xu5+uAjY)6}F&XcSjxlWOsp z#HiKlu@uqaB^pK4*Q8piSxOyEs%0u6)fcDQq$<)|w~zS+QDm?@Md467wS{TvzIL=a zwRKRZ4&|>~)nIiFcu}u9?N|y=p=uE5i0XClRT@>Y29K^^xvJAOw6a~Ux{KAjdi<5` zMPrgwpR&DJqpW(B?IjxJ)T?YS)hMT|{?r3`983LGD)!4X3M#iS)Oxn6M~)sd8x=)G z+~pd@)#)#M#hApXn}Elx*ss(mqCS7&4$V?fv8y#yjc002U)kYK%|g&%RyX@e97;!_-M6NG9W_k%-~X?sj#8gPtEm;L z8(F=v$6rldJtj%@si~D3W!0;uuF)u`UNv>CMmcq>sZ|;Um76>Cir4;(G@8O{&B8QA zi>}cquB;Q)%4*17x9i3vM%`g~Or5w^qlmIjRBNkRMN+G-uGcIDibSoh)H<>Hp!_ez z0X$CQ0JNS@@&32b9Dp<*z<>Ny;O^Naa1ojh;GO$vzQ0c>mj7k)-QN-7-k^Sf`P2{a zn~SJ#fW`rc&^Q3^(l`LKX&iu`JuYxJ(ii}C`hAYZ062TEz-_!L#M!7H;KiiC&4|&w zfi(92`h(>EkKeght(Zpb|DJD_Q={1b+m4$5Z=L2sfX-I;q1G04D`Zwa*Vb#6f}&Q3 z-_#U!jgUiKDk0T7P;FQK8@;}dFux;;43?)T97<=ST{+5Vl9rCvjwN$0ouRFxcH`<> zR(4Q#X1!C!e7a}!=*HVoU85;g*;LDFBsEx87&Me*?N4`QQk3e{H`rIX(Hk_%DJu-M z5*&K+m5mzZlUxka-O)XKvt zz}A|_`c}+%J??__iE*8 zt$ob#ZEjPQRkiGncP+hDqnvtc>Dx8R(N;@$k4ajcwRBpuFio}e9U8^eSxetJCNZO` zrSH-xqP|-CZp~8asHN}GETo=VdYfh`qpzh8->X^3NX>xS(DnN?OF>qKX$I5?Ika6R zM6GZRl6pCV`Lm*MuuKES4Wn>QVNU73Ur{*I=ErF&$Z75E9gCLFSUi7Gd^$}KIe*T= z85$>!>{z{S?do+jSLEWAn>KG)SD81G>{8QbOq*XjbL7#3sn_W5`&Buu=6ob|v4L4h z&bI20dNVa?%}h;dY9u`{CQ0hgdMn*ZYgJPF`n9W9+*~8;L5;G?%1QlcuWmxLRRm~>;`C?~R;M=0j7iLBwArCYR3ggdd}M^lzfje(odHFKF@-~Y z-JZ;x+U`Cn(kQIXS8d0b#Ej}yds-zz{i^*Jy=2pwzbUU8mRlKcs8#4s}t+bN?MTIeiL)BAtd=j9Vs;M=e zSEZwxuH#>8>>HD$`f80AG|H;C)_75)9BsA6OJkB&XRYzFMqzc<8n28=%&2OOS2c>L zuhw`?vy?h&jr}Si>RRJ4)fY<{mWoAWu-vL}s9FPGH?NHH>!!Y0QI5~oP4#Q1>Hu5& zwez~FB&sEIyy~s?!5)CVF-aPt-uk@|J@98{}r2l zHACOVFbB$y6Wagd`b)}6x!37ay)QY9Wm0eb`i4e1+UnOg$0V)J`t>c1!s@JF-yV~g zQPr>SXcSRj{rawEDWk7n4}VUxkb3&+-_tAwSsBKqs1@&Qxwqob`zj&jcl$`66HoW{ zV;TwxssfBD97mwKTxHkny%wjQ4i+$@P}iPG(<%`L+YWI?3da!&^qlj{S ztM)A!%7f)gnx&wUQahIn;lc7{%|cM$s%yg9thD0ksC3+ZMY9xSMeV&REng9mV65zyI%P-2Z#1?H{GT zA5q(X`4)luH){LeN^O7F{bcK>w*PrA3taO{68AB+{V%4r|DVa<|3UKiKZX4LzexW6 zOUd8=H{Tbyn|~#668ZZ-PyYVrkiY+%cN)2cO9bw>SJ8O?5}t(m5^$gRyC-J zUd3-Spr|mWa3~F0M~ejt6v8T*{edbS)pQ+yef7gJNvcm@{j)|{_3Eo1X_TW)U;TJY z((2S#KhZ2qQ;X%N8pYMwV)>Ubi5XRkE04*gOkM6Eg;q%ahkmV+RZVbJGfI@PQyEZH7*se^_FRms+x4mJO<%I~h{VIcQAw<(;Iqix zZ&k9?xpOKv4-^?Nq;RO*9sA}jUo>ZWP4@mxC9;}?&mw!jQ^`_i&qY~kU_eo!Um>!$ zlDWQmaP=?xx#+i}W5$B^rI*kUant56X`eCeNY)PhegttI5_BWuRm5Srl>s3RQGBYO zZuCR!Qu-l=8H;Y_vW3$qkmj=)iFEiebB+pM{DUg%)uI^buGa7A{Kqj#s_(<)f$_b2BjXs@|g@cR6TMUb6WQ^qpnA$&6=@v$&jN+ekP-u z995D0MV0qzSscfTgo^V&$o~K5Z`!$@^91hX+o*m1cZ%u%gTVcg+WuSU*YOFB?MLnZ zSKhO8=aSF=fv=Iz{}cmP`l`U)exiYM(cj+52JW2Y0{4CL`|l#Ze-r(Ep2h&Yfc*b| zI*IK3Sfi{C}tZocavN_y3~2!2OZN{#)5?xVU4ot{o444MmhC< zZ7{C#BU&|kj`l8T``Tc~Bu)JWju0QkX%>c08+tiwe?~T-^BTpKD>3yq$B>nnZcJjT zx4DwFV_R$V8by@5qtqQmwH+U|qcaGarJ&*qlS(c1dis4ALjQ62yKSsat3`s!zsMp^aN&t{Es z>aCwG8s%uKpRHq(R%iWe(=1F={cP7LuFm?|F(xsis-Go|BI>K3otmYLzJ5OJ(kx^o z6Lc%8`pO5QTeB2oMctEMqiSk|9P+4ys8x+jisc2SNl`UeZe_sXRLwU=scPzTaQc5o z)l^l_pu>}*da7ko*I(VoPHs2(0h~>K0N=Y@;MP$rfSLRO_EIdsng1(rU;8n|2K>c%#QEYB>TWD<{t;=D;xAJ z^OzYa!*pA~ma*-i-&Wg8HksIE+iTlm+m7ul%Q-pxr(Y+_GP(nc81oL>3%0E`xw4P8 zinKN402%MTh{VUV;mV0AfE@0d@eZfD32@tOv0KSR4r^`WAv62m<;}f*W8D z5F9`d&>h4o5CR0pV#){L1%w`g0|*1c0fGl$2M9*M2}A%(bO~J)Ft-o_fY3>hfJVU7 zP4EJ`UV;U10};U3NALh_KfwVs0{Q`h9S8!(g9INSI+ijaKfpx^n692uKrprtFd2M^ zYa?L7_7J9I4`HhH5T;P4J43*{<{?Z<9>OHzA<^BxpFc4C^{pf94~(#1H!%G5T_fz*wajGRY)4 zCT}-%QBp;St0dIr7(Bhp7NE45=yx`qD$?HorO0HPjYFOE1yCj}QU=2s&-19ylWqGb z(K3B-bU}Jm7D<6flGIrD8Tu|&p2`J+Pn%}jmZKyUX-fUTDx0Un?MhyYE1IXaIC*Z~*d142L)2(}X%0hXS(fF3X% zn8S#B=q7J3KeCiwFKzO92Ietld<|}=eOgXO=%<<0og%^IlC4x0WZLJEo1`W-Z_l93-^bTv)D(6HqfCqX&S};Mv{<%t-w*rX`HIhX7RwG!chR`?T&86F$vB^}1 zRIb%(K`CFkpQ@djL#QNX<3*>;*?TCb)f%h0tG326&@K-@FoQ7!=z2Ln|dh zq+~QJ>1ymza*2(yvcW;e*p%nMMN6&_5CNiqVSpe4W}v3s^#8%d=ywW*bRkwK9>^Ss zA1Hl0@$LAxq;D2KiG4l)wZd2OU&?$j{>9`MGWp`?a~~x?l0M3RnE2q}=X&0Wzf*cU z`*z}O_U+tT$+x7p@^6;jVBg5)lDX9D>HV?&#n(NF z{B&VQ;;Dm=_dMF$)AwM{_O5LQ@9gT9Z|~j`+fuwWb8Gz8(k-c*$n^{wk$+qb4~Ro^vzSNC1j*V%Vv-{pOm_Fde!yl-jW;=cC2g?;n;=Jw6*o7p$L z@4~*ezVrLe?VH*+rEhZI8GWsNEqxRFCiI=scT(R8$rGd#^5awE2a}f#pX5qu7rzq<(x^U`M=67N)5$J*-h&oqg$%F^Q?Zj1`r0 zY+GleMiKS(rAIYOsiQAl)-0r+zVs%|QbymGez;k)5M)K|6kltBo`k2NVip*uSqidZ zKl)RqyT&X~BjnI{m5}OLRSWbuG6KBIj3|k396#27Ul8Rswa*~Qhi$WB#pA_)v70JlvA%(Jw>A&ZCdqI z&C)daD^JiUuB_qqkI4H-MM7{zyABxl+oX=%b6%UQ`ul`S;)-jiYjcRKGGRo2I}^l z(bc5T-i>9qLZ8C0LRlf#gS~o%W`%Zz9)->Q*y|erBMJjOi)fjnKHV8zfeLCd;zY7h0& zgNz4cI++T{;!0;nKD{a0H-`}hZ3!~1*@XiH1HkoNq?mJXYTMDm3vhrAb}3Wk9{FmoT)u4_U7~W^1YFGo==%u*V5ExCZUXFp1BgIOBf#`r zL^}Wn&~W7Pfy#|z$;FGTKeCbwfmZBRzzgUO5+oo17?^f?%YZOoa1bQG3j_gO3&9Hb z0j7;00&YMC^z8&I-~&Pc+et73K0xRqcmbxDU;%u9zMo(Rf&f22umTN$;UK{WaE=7M z`#=N0lhc>I0cZjYEd&=J16K0NaXg}ZvqJWva zE~tbF`aXgc@Boc~;Q+w}L;(xADA?V2(s(>%dU~2+gH!H8h_+B&S$=>`cr?kMK-uHK z2?0EsQNT~Rp?&2y$xA+3bQ3OT#C_$f;8+tbZdO1K3z_sFxF4{i6A~^zK zWGPk-;vhl?2!H_)0TW;btbh%$v|$Ob0}|i_T!07g0)8L>L;)FS2G~vl2j~C+FaRRp z?Ne-l@K#CIFfDdrdp`xf{&`XQ<2-eG`A|IsM zty&Q`(TbhH1$aOJ9Lfa%FEE}Csg$A}>*h`>y)CwK)o!5`yBq1+YM8EwbM}!qH{b>Q zKmZ5<5uh314iI#J4R8QXzzsA4UP?{1T5mwg^lbzq;Gxw@b>YJv9X1L;m?{KgC3SW@ zIn}D&Nh@{_;J`EF1l$0J3mAbg;EWRdfDhM;qPVKcz{AjEM4kppPDOgA>}J4#D$3GF zrI4|eYgaq1*qi8!(m)P2%F!%+Qrf*hgR<01r!)ZJb~10an0qkX|A^ zC2dd*d62rMK00r2rG7IWpabQ$g^XB!pO`KZqyubpVx^=aIF0X`%jj&JwLwXhKx50J z0SRycUcd(gfe_FL$iS!8KA-zI`LXnI{-e}K@<)Xa(;vn@EPjyrApSw={p|aR_u2Pz z?(^sf9atitiPONu>MdNcn<>WzFZmCN=e`qHn*UN7#??2qp+y(Yg_cs2cM z?A78cnOE{Jr(Vv!lz54KDfeRW1?h$SzSKT>U*Y-m^RefPdoz3EdrQw{pDXN<_T;mv ztej2t%Dsi%>D~EfQ_srJ7M@8z6MLq(E3+%UtF$w_GqIE1nR`0&GF5pP1#L}P3)%J#^gq6V}3(wgS?@TN~dC}Vppas-c?$k zU7uLbuFtJYu9Mc~ukX7dd4qIAesgNGyt%L`y(zY-xG}RazOl3+yCJcG-H=NqQ&KA5 zmFkka3hUGBW9y6SGV9{&O4nzvPh8JlpIe(;E3M66m%2{AuCOM(Cbp)yIyy0j|0 zDzS=PmAf{1t#obvn$$J&HHDSwm9dq@t20-}uTHIKyQ-ATCKE|End?k;N}c(RREOMA zxH5fZ?8@{N?U$!7i(OW{G;?YE($Xc_OA?o`m*g%kUevd|ds%E*acO30eo4>b&P1lY zxG1wIzNoZNS~xJjZ(edFGhIeljA z%;FibGm4Wklj4&~t=ZO6EE`M2*jTP5*&?;%PcKc(PE1T>C+1E|o+h1^pOBg$Pbi$4 zKDBU4@5yZ^51iC}QuL($6FX02PV7CQ?Sz5x-Q%O<`^R;TW5)G1w>1wmbvH$u`sGfU zk$a~AYy;MAYt-6r>9jDG zUUQpyz|?Jun)<~~immT8wiyQu-G->4U+AR%pI&{Nen8i)i|YFMPM+a=xi)Tq?PjBF zKhw!D%&)$*>7sem{{Q%Uv{L=)x|rE`V4kw(YniQl>5@y_UUKCrdwlJ%HPc6RxrWk3 zXEVO?r+bKw^$+flY0Z}zToqbKBjR-O;-igf-yUn|M^(ny{~ z`tfvB)$zz(vw^N!u0b2%e`KQSnhqsjBH9i=B=T^g>Y z2a|sxU4T9cqO0yv)kJndS4N?c}_4bdl2sJzb$oxkk+um6Td3rS{!)SvX@V zep<&&RS2SRD~}e|$jl*^v155%@zFVqrR+dO7gXOjGdb~EMlawX*=IMsx+94*v?M2%skm{FLf za)DbLtPxtnLpfV{g2&SXruaM3mJBU#rGI!>6{p5Zk(DETlp?GaqEZGyG!E$mD{rIL zLe&pgDKHD&0eai^kzARsSaE~KEv+6_xf~Ux1IH>Ah4Pl|fP6{~+>GJ0H=h30+((?R z{0uJOc1U!M`EI}iSaHd!%c@DqF5V@@)3@>_b|Gm;CFjTmmE47T=o;koTDj+VdPtCs zuI!}LwJPtfQc^X!B6rd94;|^ICxkvvm9VHI&rO)N`b~6C{XT$iBUk_*Fb)XPbK}?d z5<>Lc_ziTU{p0Al@tf&x`;BzB{T@J|TkdxOI=b(E2?*13<2TR~;BR242|M`Qu=L#c z4Y;O=%UN+HpK>MTA~;o4&gxpu=v(P230R|)OH^6PtyLV(l>+e75t7ontN4&BTOG7j z#FJHf1{DRBgPnHSkDO56=%S5=pcS?2r_XR6>kKc>h*(3%Ji~LWGXgDhkrz6Lp1&=X zFL^g@bkH@*m5ZUBzJbg26-SFlc32@zRRZOdTWAk71Rfpbc2gF0)GZ>Ey^v|m)prrK z0MTAkUWFj7n&?S>fl`6Gdaz2b?AP^Q#6(b0R@T{pixOBQbC`4pbcGXYuE2z>(R&DAdv|f|?0Ij<4 z{v&d*l@uYqBtCr=FE0MlU{Y;#mUoz>dTIYDHAywmy6@9hb<*ahn#26GZXP)?9+cgY z#8~Jo+c1f7tE3od-TvvsIB0XACNb`oMfA*2Eu<6(Rk%up*IZMXC^ZQ^PmwMv9O@7) zKXZdMFzpGn)3b=Llmz`!hzRa$>;`vX0go_T zq_GdFt5NZT$KfEpeGcPNf4_+WTtlVvB?We9n(ixQZ za)8%hh)Fq*etJP@zev|c_*XeLMn3xKR0_k|g4&;>OCR}ACE)=&9}i18B7vojNtd0D z6iv8T`E^oG7bzX0Ov$1H%SB8ln`on%+BP+t^f<1W9*ElG1Z+g)L+wT*HYP|LRRSVv zZkz$Tx>U#8kSyg1s1a8#gk$ciO;z>GuAj@r!q4P?E&Me7lf;kNALV|S{9*bB()ZKf zNgv34tMrZRC;6|ZzRrF%^QHKgO8v#pmp*1cPJftwKk;7TbA@*bZ{^;M<>GzP>$%sG zuSpbXAiWZQN#2*-o8Ob_O+Q=QRiyr(>=W6?V~@oijb-9Jg$D}{B=1jdPu`o_#@;R6 zCEb}#=el#Z=Wa`H$=sT`MZP(9Q|!jr=J=-MMtMWJE4%(6`d8MbuFI}YtV&-KTbW)V zU&VIjI+7hyNB+vxmGYH^E7DhFFHc;~UY@%wd6{%s{?gQ?@}-4K(wD?8DPEkpIDT>I zqU=S9i`a{D%ahBc<+-KO;#_-bzC6D$FFh|lD?Pn%VfVSQbBpJo@1is{J2f$tohqMQ zn3A4S?Y$^X&Q4BDW+&&)Or9y7nLi_ShI~e0QhHKsQn5ADnu=vw;w`1qlM|B@QYXtN z%O}N8$c`&DvrTd|9g)J>07Vygb1v3Vuw|_obKG1Ki^h^6Eo5|AKF>+y+xJP~@Oks8 z{lD`E)y6;lZCTFzKE6cR(9lCc&)v$R>+}Gv7+Zp1ECjZO!ATMDj7IRxC^%UL&teV` zr?BAJ95|H+&%x)Z@mw@+jOPj9`H0OnUSI^G2 zyv_}-^?=uV!F4`jH5=>w*wobkrVv|h+zaB~E_p%J_>3f{yr%NXO$9C!;4 z-l_w)=)v0%gKpev0B<*f-6EJafp?g}J1yW{R`6~cc#j?2<^b=N!26uwb{BZR8+-uK z>&6GY;6pxQH5(86v8ks4%mlzkg5aYFXE#0;1|N@rPc(v0M!~0;C~*f1KFxtUd2p8w zd{yVV*;NugL^ID^Hy-54Sc~4zUTm7LP)&vWheNG3w+fLzUBe< zdx_O-yzaxMK0lai0N)6JZwA4)Lg3qB@SO95J8}S1U{E!Df(t#iA z!Osg|zX8k}!7qs57fs-o%;1+T;8zfbZ~Uqa{F)v7CkOa-3H-zfe!~TR(+z&hL#$@w z+g@xs-~$VO@H-9QcLU(}g5dW<;1AHUH2x6%62^aS1b>78f8&p3@Fz{+Pnk~Qzp&uH za^TN+a6ktZ_2AD1@E2&J8h?on4&$%T@HGA!-4@2*n8Dv-XaM8CS;61gz~9@!KRCcY zO5ndciPdcUhYOnyy1|kM{F4{_vk&}FKlqmh@UH>zzk=X@hrs^{gMVYYi2qCDsxrpE z^WY&Jco?G$82=#<4Q^`H(F$t>IT7Sdpw0~HEudfp4K~nd2So>Hl0dT)v|wlgqty-C zJj6;q++?n%O%5L@`9Ws`=n8=DAm|B!-Z1EkfPRc*U~Gtj0j8T6WWf*zhIufe0~_^V zQ~+fI*klBoMR1%69B&3suz)98!INy@$#(D*2Y9LkPH=*!xxk5TVl^A5d$6g+3&wn4 zs~?=y0G<&5&kTZ-L*Q9qa7qL`yAhlk1<#Seb73Yop2vdcbKnI$*ro&HdhkLFreK_A z0H+(l86r3n)^+17GdSA<&ar}XZQwjRI3EKo7#B$3LMO4BjYTeOYKLv!nDBs$z2Fib zxYQ3WYXFyHEC%C6LGa=bcu5$%Gy-1M2wo2JzVQkfypri9cCcV42PS#&Djm2&4_+;R zD-GZ^M(|n@Tx9}Ro53{}@H#8F)&^d02iG}>)oiSnu&K)lrd;3#H@MLQZt{Ygec%m# z@Wux4rT}-WmqCM8Mk`!L3p7b{Xt$0@Kal9c&-*P7b__2k+K__rRsWxJ>}> zHGuaS!R;b=zX^N*!%7$*w15x6`=OeRhi%x@V+S)1@DT}o)CoT30v~sSPrzTo_@ozn z$_MW7gHJbrI|JY@j6Pv}CImhk26somUbtBpvr%x53_jNc?qv@UpXb1RJothRd{Ga+ zB!Dl&JHz;j5qwnyUo(OG&BSUpUbkRV9|o^5=4{{_cJNIH_?85|?F8R}pNH{XH~2XZ z_?{Ph-v@r+2S028Kf+KK#*c&G=R;tB7|ch&FEoN*gu{sOOEUQ7Ch#ll0P(9F_%$B< zCmr~8J@|rN-6H6Lf0vPL7DS%~^jpCO8yHZ&`91W<<7Ik3 z-}d?9$LWt{@&ibI#D0|hFiu_o=@0tI1EBO?=DpZ^h0movCw(sWZsOh2JDGQ4?-brn zQEYhjt@vBTH`8y*&e&I*IV`%UQ1C6F86BU)e?CF#9k?o zKY;XdjywWNFJ@khQRH}vyaICj68lQeXUHd@us5|=+M9bW@my(7W>0@MnPs!t-gs}3 zd;(h zzpy<;egV1r2FNEszBj)uxsBbHy(fN8@$U59^4|G#uRx4zypCQH`*;;Qs2c~zcl`RujXYvR`w$&xRx%wL_nx@SdfMd7N{Rnk>CvgMaLGo7){ z0$K8mU6NfKUtCP25>g`9o@g(TjX$=iurNhd{@jAZg3|oV{1~-@Q}cS~#^)C2 zr02+U^0Sk(+1c4y@ma;0>6!A({EXxbc1Cu3e0p(OdYVkO|Kx@2h1qyKUTjOZ$!+-y zk{7TSw47f!FLjO(OhGq zu|%T*#3F@oDlE}h0Etj3mNrNKRbIpyW0F)~?LSkata@wzSsLZk zTl>$}C`ViEKS!gq`fC5Vnx)iH`_I!X1d2>u``0S6+92rpnx!Bs>Po*xk<|)WpixL! zk*TZv5f#}&jpE9ROkMpCsmKxeI&HGj^MrT-_!7@0V6;>qVkhnx^?$;uU*H>_ML{VQSJiuW{MFIoF-fXV9WBu)t6p`qRHK}F z)zLDIaT7_yyKK8P;X zEDnRT)aoXCho0*_EO2K%D{%kxM}bQ|C~*JtfWSTY4S{QZRp4&?dVq6N{Qqkd|9?Kk z|NrP>f!nxB;B55w#cKs_>Td+@JNHm5Km8v5GK~%JyujW3mc+R!{(nEk|IefN|6fx4 z|7ME+cPtjTmy-f_E{y^3J&ONdOTP?_0kHm&U%kIj-^R36?Ekgxe=3*3;z+KIZ`!nB z^;MfUt(?Ab6H2U79G7S;jyhXTmySt{T8$n{;T*n9qlo%iPM2$zQb)__3YC!R6JBjO z#ptPjk(opk87xm#IGpahZj`#Sbu_xOs;ruuJ2sA}u&M{wudh0mVrY=+{7@63|93R0 zI%Pv^)+<$avU+Eazh>WKCajn)Y zW%P>c@EXlRMjA4#woQJWW+}+ZFhhpb2syM?C8YW)RCVx~^m;r({>sq7SUyYPP&)W@ z=Jf8-jkDF#(b}ov+L*UB^sckNF%MfuXdj&j5P z7}C1NBuzbk^$3-6O0zIj%4*G4RX9VoCN^jkSFV)R`fbSWtBqq4qte(6UpJtnxzcWg^9sxYlYmPSqLg+wF;{p{II6JJba^ODaeYt=d#ip zi>#24WtAG?&`l~K)fcZ?DNmt$yN5Yjsg$vN76T4fDUW_0!%tPp-*`ymuDw#=*mVN8 zi^c(*OydB4m*)OkyG7s*(cFJMKM}a5-_uxr+i5;O`aSDCiTe(<{nt_-fPwyIsSn`% zvjpykH22@CzY5&{(%gR!&>Voxj|cc`uz>f|92bB|MzA##4St++;2N+jKCI} zN3e_9{{t+u`Q#JlFVfTee?P1i1^w+`#x$}^l?{9+JkCuz`orr10WbiV!;KdK6JQ1` zfEBO-c0dALfCumc4L|@00wEv_U`{x`5s(3Z6;00e;$5C$Ru(?ehZ4&VVDpa%p1^VIQ1Km<&H8L$9W zzy>$~32*`~zzui+%x1^?06%~@3?A_pJi;${L|^a-zTgpi!6Wp7N6ZC}kP99W7d!$k zc*I-q2)E!7ZNVehf=8?ck5CI9krq4xEqFv&@CdNr5nsV0yn;t`1&`ng9%kBA8#0TVppCFlu6zyyzY2_E4RJfbCd1WWLUmEaL1!6Qb3M~DQE z&}yOq9R^9KZuQKo1Cj0Wbn4zzkRbD_{fcfCG>K zCxKGv!m=Ci0A9ckGynl02!wzz5CIy2C?ErD8-W9OKnLgn17HM1zyz293t$CofE{oE z65s?}1WKVB%O1cB_<;r>00e;$5C$SZBM=2-pb20)2^_!!IzSHyfB`T9B47f{fCaDu zcEABhfD>>LkU}hb059MJ{6GT`075_*V7mw$zymr!4+ww(FajcA0xW19$-+;3rTD16U3MAs`GyfJPt+Fx>NT3vkup9;=KqC+ZWPt4r>TAkO8Kbzych=13Ewt2!H`F0wQ1nEPxfT z0d~LvNPrV?0dBwpcmW^a2LeD42mxUNr7(i!Mj#5vKoigmuzds$-~k;V00zJah=2)z zhdplrY=9kb021H?T!0(!D%)sSml@sW5RGs{H;LdG0HU)f4S=hKAoLUL1B3uzV`ft} z03(eA!wUm*D1|im0`CN*E`qOz5Cv>~1XDl3rNA+dG7A`@1ak`^)J3rN5W;|NfM7XD z;AomNJ`7lCt}|XobDi;xG^ruawh)2<(@rn}fi40^)49JJZ)i=rw--mMR|Hrl+Az}cB}0V2xNi1OrHP-1|yi{S4e$bh|% zU`A286*#DzqJRe=?_355iPx0Z*!*TMd&pwoRh~nV}@04idy%hP_7t)<+DV^_5 zb<5oa^0Kdvz*o90dt2f*_O{%XB>CFsZ%y4Q-&(jOP2Tp!n=>~@Z!X-FzA1K7k^JrB zH1QBeKwUyv8h~FvPSesrOBk%jnb@A&;YqDz+nY$u+g>*%p{PE?> z3zuPpz5YwPhK)JTFH0?xmlen}Ken{EB(o&Gq_jA@II);roJ%ChJHMB_^V#;?qU0iJ zQJ(zs<%NX>=>@R`Me@*(&o9l(&P&W==jG-m=Sp+)b5i7|UznYqjj{PMVWmYgP$w|?qE`NBdx9gmT}ex@znR=Oa2L4rK?bLS_|m(I_V z*S>sS;oQ!1rE~M=q|TAaZ$CXXHnn(m=Il6m?q{bYrm$0TXC=vZKR-D&S)N=tvpkAl z=8X6mrAb-x-)AS~TH9LHBl)Gsi@z{2Jux=1cv^=1_)8PA6A}~H2|4oQmrl)}k~&2` zr9i&?v6G7@WoT5t!inhWB`GT<$kRXPNIE1(-ku^~|AH-T zi`k0S40-#PELls!!ji{-(kz+trj$u0pZ~NNqp1FjF-~6pSwq6W8gfFC{QmR$lwQ^s zbZPSZFY*~a&X>3>`Tnz9j!m)>n`ctg!k={D+aI*++nBCO`(LsDN6Y^I%NEZdf2sDx zGp5Ct&LH!v;u2BqkgT=aepa2v)lTF|1MJCSeED5u^|_omzvoKAa$XhjvtFsgN_A!Z}ZpGT4?qhZ$cWV?;Ung=}vy?hIk?+tf zq@GUXJ2gugxf6NNtaO)VA;^l_`L(t`d=egsit*}h%~FsR_3TMC{oyr24&9>?Qhg+= z{o&`(V|pWVE>UE#JW1hD{o$uFr*=Ox(gc1BXD(YfjUp^sv>7PJG=tw!3S^rq@71yx zNr7x&Rx+CywH4A#CI~ZAle(H)dGDAcan+kr{@ZP(n`^B~YG1#0^@^KoWZkDxR=ut@ z+cnCm*R|$;jdIFrQEh-6$+r4{W@*q=YWw4e=FSH-iYsd>wF(*1-1*R$#HekN$I?`X z9#)B{KC{(|( z(Nj8T>8N_6N0rrT){lR^kr|Vu`s$5GG|H;C-gs1_oOq7mM1abP_Gtr^lPJiwLY5}`^GRs-;=7csFuy~fA^jm zlcZ6-dw=~F+3RT@!0vB4xbS%b_YT?p7n1+~ukRPQTRtJ5{Z|BT{QEZU3ug=5WfTMO zhyND1t-lpGFU|kAf1AKv_*H@X=Y0bA(=Xe(8)*(eiRJ)&m3;qa(j0)rB?5OV#Q^vz z1|UZ<02fjW!1oIRcP;t<|AT!0pM?K^m&lxYaL>F1+5g}AarLpHzXQve(>5$oHbfX$ z8_N5{Mp_Z0023v!00+QIDe3?{AOHry2#A0QFat1EidMh|z*H$Z010pcE&zr~(F1q^ zAK(XItrP=55P-E(gtc-ooe^wl1fqZpux$hm-~k<=2L!+X7y%J50cHTEOVJA00GKXC z2Ot4Xzy-Jg58wrSfFEc8V7(NBK!`Ay&M>yXiYda1DZ+{=%0LsqbP`yA19(6O=m7yR z07gIrOn@1%05D~WHoy)z010pcF2D_V059MJ{6GU?Fr5Kx2?8M?48XK0!n7&Ev?;>0 zDZ;cV!n7&Ev?;>0DZ;cV!n7%x0oXT1*f&MkH$~VtmGRI-*f&MkH$~VtMc6k**f&Mk zH$~VtMc6mR1^^~b5hhL%CeFch!qh3k)G5N$DZ5Fu02n<*7(K-R5F`wyGlVT+AObW3Q9uTm9s-P@B8;FS zjG!WnpdyT*B8;FSjG!WnpdyT*q6vT{RD>l|ge6pjB~*kZRD>l|ge6pjB~*kZRCEI{ zhl((ViZF+YFo%jThYqF_W>FDlQ4wZQ5k^rFMo|$)Q85a@GAc5?1Qy@`9?$`LKmZJY z5fA|rU2QYykyD(V54OGTJVMVL!Pm`g>NOGTJVMVL!PD*&6R2%D)0o2dw!sR)~?2%D)0 zo9SRWJ=g*Rs^|m!Km!l}fXZ0F6Ktkbx$k85jq!2MHX& z13Ewt2!H`F0wQ1n%z%Y3m`*FU*Z@1=03^T(xBxfc0la_@@BSM)AP9tjFc1M6fhZsYn1WYiY212|19(6O z=m7yR07gPJp(YVqFm11B1}uOTumN_!0Z4!oZ~<<>19$-+;0GEAMl(jw7lS|u2m=wI z5r_gZ&;&FCOc#L#IDiLqgla;~dTbE@17HM1zyz29%pW0QdI`}6V0H{qnLR_o5~jWo zF*%0l1~9LMh?y@$AAq?x#0DS$1c49`1|mQs5CxbX0t;{ePZ&(64qNnq02lxxAOa@9 z3|IgwU<2%c1CRhG-~!x$2k;V%79SSNmWG5At+*cQ4!ONl42pq0A@B7 znZ6?lwXn1zVun+yt_eCo4+ww(z}!Hh2$%pffazyMOadcfz829AH~}?ss(Cc56~74-~k<=2L!+X7y%J50cOAgSb@qnw}t6>w~fZs z%f6F%hkYmacJgiM?fhG*x8%19G_GDBjjAWTfjRc%T!F^bi}e*>&%7Rgy|h2OKe3

    Tk6gBCVJW4-0tLVNtuDK_nE{q>@&Gt$z2kSwU^o{?<_o> zemX{@?PYdg2EOc52^w!N_hj-(>B;;PDH?IF@Ob+1*yBYSbq{_5(MJo9q#ubrQlwG$ z;+axUwkOfU(ztuchoy(}4<#Rx9?H|mdoqpQo_-+qK#|7Yi{D?`p530<&eG_6$@_Zl zjo(|^mfe=1@%M7~B=3>#$={u#5%>ysrSFQ}RlGApWAK&k$lj5-gS{h1qwtkI1f=f# z?I{|EudtQbn!7D|n{-=#OKOX(VWz(BVSEGR^#vN2FSf3DedhZ3^`*7hwTZRt+T3-? z>m(YRFSSNqQ&`Qc&aFzWl4xwc)V1=pg==V}c^aKBvogN2banRX#MSK8xfRJ3(uzEd z(I;P3NT!pqWRXVci+7efvK@(zZklbcNTc+{uPFUL?7atI8|D4~e?#NsA?YkzlI5jy z5=bBfD~muFQuZRTG9dwMkqsGEb{Ihd0!dgFdlRuY5l}`8t<};NI-^dysMSGfDQ(o! z-6X%y`;pF;&z5bS^Zoz6|Noy${L*vJo%DX5=k9r)yJvkaDrPNubzA_qI6>?6$%~Q; z!wZ##sbDnd3#OZ6%>i1oFTNnSfM1Z9AEH(JlIMrdSI$q(i_*G%>AA7Ffw`GE@j1ac zk=ef4=~=N^fmxZE@tMJy{LI9R&zZrvzyQzeFGu zkON77nAY%1oyTd$14MhRho3kzbf$b}a#DDbLTmX&&+wg*o*0`Lpw;~16M_>WJ*@f# z$MRznw4$HvOE!g@l%^D|>E}B=Jtj6LFeYlZ#%A?tqJDTz^` zQ8KOT7apnT7z+?-@HM1qg}*?3rY>F=tmA2ozfi4Qo2&`fD74C7)Z_D{t7FxH>Wn+? z4!U_at;p|^T}fxysW?+)?=L}X{mGR{N7$h_QncEiuOcnS<;TwC*1-CCnkSY);b3e~Kw(j2eB$ zG_Cy?Fl5BI7!-M0{Vzo8{wMh`udwz1_RVyBZK2W69eO|ej*tHTMy|*DfA{HZ2`RQ^ z@P3^-#kLGSpi@U*kHUjPQqwjN4lrBmA>Cr=zMxja{B7VVv=8f)%eJvf`C>H3sbCxH zBSVs*hvNLL?~e9^Iwi6l?fp%0%AZIT*R3)@?{uEX(ML5RYUI_Pm}zvG@8PBsEganA z82f83etWRZ#bf_3bm^*NgnZdCLOylB&xxmxY0^ebs}tXR{P>WR2GxArHB#USom#~f z&`;{rDYk%qN~ey#0{ZD8sTEm3KcibrR{{O3PPrlr=;wwcGpGXkd7To)70@r}RvCN& zee6ZuA_EN{%AZdAl5Uj&h7aY596h8F(bhFHseXBio5kuHxW{o|e|62b2V2*S`(Ies zsC7@D<5d%yv{KXV#MeD94@s%Gy5|+0TE*5qujfir`N%-WCG&i66 z|Lf>4LH++TssF#`8x_K97n+3T^(NtCn)APx=KeQMqWS$hO~Sl?n1o;c$Rvb6Gzk`3 z12DeVBut=n0KfUTNqFfivM`6n0Q}}slMo$i5|Zv#-psW)*qa1V2FpN`O+J0&oDeKpkLc zCKv%3r~vAKdH_oZ*sz3vMgpq<*suzK4Kx02nDKAJbbcGA^V={(--a3bHcYj*VXD0i z)8%cLE^ov1b{nR*+b~7lhAHYcOg*<@>bVWm$ZeQLZo|xQ8)k;vOxzOs8c+o|fm)yr zFnS3lKn5xZn$R}D-`m^2+~4a|Yi}=aZ!e{{S6OSX-$M7kCM4*;*La~fU*lzL>*ZzY z?d9n0RoUCCp|_W}w->t9HGwGY?S(FL%~|L`*LZn*dnvuW&`qxSqPe#hy2dqUp`%>m zg>G<-7dpi?Ug+!Ac%kQ8NGjL4F)^Kk9RvCZY5PpJdc10u~IwwZv+g9}g_%;wBbTF0`$csu5jv1{fO z@xu;;rVgkFc<5mAv&{+A0+k41JFYk(2309K#^Z~-2m9`FJ@-4-?zAOTfC4Iual7N87}0S8b8 z7+MMCfUT2I4b%c&fN!QmEC*bzgjzrW#5RHilmh}1+Xz?yD^LNrfLg!{3s!dZo(Z6Gy(=c!2(zTrHxQ>2)lp-Z~>)<;Rnb-1yBW410Fy)LMR1nKm}mM zy-|XDtqiaNcAyHV0qOt+;8Cg>ffAq`a00b}!%uJlwLl}lH4_>rFVO=R!GOGD0V;qR zAn#H0Gv{Y1@c*Y2Xnul!BJp^LY#0t^e1-CG>Y?aEKC)&Qdob`|=7IPFL9%CiDM>aCl>@2$ z(fz*t>3uO>BP|N8#h|Xkz+d6p9oi-DO74_*CU>N^AKccqRoR-_65Zn4k|rC6fpDfR z-WF`*+Y*~YwAMm@V=1ERed~LVrSPrhRvo_dV5qIt-(tU{^P)p5LM!AI$>rez)=kKe zEyE*uYbAu6mFCof^!(WT^!c&#lk?i=w$7mvaMs}&2dB49^G~%;>GU5uFLG}4Io`96 zoYiq=`=r)0nkI4+4v#xHw$0~nvY+00+M&^rQ=3omjyiI3$4TuYT8B3c;~Ecp4>q*b z`|Iqrot{J05qGo8>pW7~;b^Dz0PJ$o9=0p?6j}ZA+0yg^9w)~z!5_VHt1)GdOjXcrnTG*kFX zx>XPrO>L|i2rh>pJDKt?`tf^S8o7b>1D4jCMp&U(+Fvy{A(m+ZwNJ@Xs$(^J}_q=vG0QsvQuN zxB5c9$TxM1pnA|Qd7K}WyiVF<-_osusA!j~$csw8$hUQiAS&9`D)OT;4tHK|O^om8 zRzXy>^=V#I@g2``INEm z;pVeS8}4x&*k7eR$gyC)mj9Wl!&(!nLzqhZJx$uEX?5Z&WNU`A0f+^i|3~)~QyU3Dx&?t03!B2F>5ptgkho{S%!cIt^(5RHt0_`9fPO7aR)w zvmwc7tK~kQFMh65BKv&NU!}~de!6ylruF`BroR6X)c5}y_5BAgroR0Rv`#B|lwPHX>9Ci{OsYBmXNttO$AKDk327x;ps zaS8SRcm6!@rfR)_bKSm(c~twU8!f_|j+BRXEHywaPzTfl4FEc_wbR#y)+L2RUtB4e7_2zHadVwfK>L*1^fQ5d=U43;_DVX@VZX3`l?lC;`d{=1OBZ z+*ZH_*Z~=+0MJoRv-1d5fD>>5Zoos395ry(0(C$=As5z42fEM;&s8@@==%*OqTYGx zn4&J7*8d#!8k{qs(7bdts1wl9PE!c!+;apX%^@Th03(1-cbYp$kN^u%N|0uj!C4Mi z0ULnMcbYdyr~n*56+sF*;dB9Rpc+6YJWUxS)B<%t_gr*^cBPBCgWbt`F;6?i%}2*n zbm=mEbI~ns$a(M!yK3MZc>cMXs=J2aeEtxE3y6RLFcG91&2UP91tQr zFU9_+W!NtVtOPZzpLWj+ufj1W-~!x0HQ)hifWgiIm+55b-xc_Z1E>Tr>)TvaiK*U_ z6EnP}YE0yo8Z9;kadVn*su0AV_~R!f67`fQ6uj_}?Y)DFw=aMjAk1c1|p7qVG-hfWca# z1!GPuPQcbosKJqib>QN99QOhW&GeOFpK3|!8W zhjg(Bwiv;X8C)q5EhTWSDFfG8!OJSZO;upn1#Yb-T0B4vPz%%n4S*L=fJR^#AT$#U zfC-R*5}*ty2dsdbPL{USgIDn6Aw@*+S|c%+y3Xs(@VdbQ?kfck*umRmqNM_G0F{6f za0Asq6+ybw1>ViK5#t8%aS4376nxGJzE%sq#kUia0+A|9a=zmLzh4FZ&(kpNy|09#Gqr4qQxLbQ~^xwZ^WE1Z|v;FRIqSOI4xA$JG4 z+N$8=!ojU>I6ZLgsDZN%&fWEJ@_uq&C4zg5V8jewYXPq>1#c(^_u0S$GI+BCytN8! zcY(Ka&BS{J@O}gMpb31KJ)658mhLBq_wyZZhTi1gjK2|hBmH{xb>;QsYav=UAWl{W z(yvC@ssZ6wlvk23huOLTM-IiAeF3Z)kbW`tqVL5NSr?FBNIV~WKJ#3R)(c2I8-7-P zHbJWeWS)*a?Rz@)RQM_7spOO4C*>!TPaJtX{&?W=^kY$4DIiG}1^7qfv`#>p>(o6_WEn!hV? zXOPwgh*7_F>h>^M5J>duwZ_^2{H^g@4wLNwnfj}PH}N+m4ulTK2a@~4`<4BvebIfs zed!xxHwJFZ+z`JZcmsb!VsDTv2gGPyfYf#2>lCsZ5TaE9;?Y1f9f?H(k<2ymYl7GC z*Ch6Y_Q-pZSBI}wu1;MQy~=l0`pRgY)qv=3Wp`p%w%7Vd&SF4(dvH6yJ+Upgjo+5o z8rsTlO>7Bmk+&qmp|BiIcG(M%HzzlRHz}Kv8$%oUjqweKFAuZT077IbAih4ZKC>>q zF1RkUHoi8vmR}oR6I{cuiIbfGes#QSH2}WLPCzKs&Q=0YZ3F~pEr4j3g@ELW@Cs!` zYI$_IZ+ZH{*oA=$GZ(}!2wuQnkXRO4CNE1a4KF>oB)EiM5?>r#%rA~F3TmtaB%8Cn z-q8g<>iLe&_p!e3!1shpXb6rJSju?j%j1Z6^Me6(v7fb`hd*g&5)0g_|FW0Wze)1s&OPD_uD zjSh^?oEks%u*M!hU}Wax_{qVOGbhDQ3ZBHDlo$~jA&*E75BFgYz^A0Wc5kvF+@Lh1 zG`0YIwdtBzO`s;@iF<+`-jk>fRm;^$ci1hvldiB!aiyG5r_b4%vjb3g1%R|IW((Ld z);NtP<*kYGP`O;5EDPuQ{tuP}OZbw6C1jB;NhvHTQqmkYE9R6bYV!5y{Vz2CKP=it zFE#qP(LZD52#5avdhQ?DLIsQ*`-ScXkpcP-^14EfexMP_hKA$Rmg;6|_PU1)5-l9u z;}}msOZC|Qp@pcmE!AwFCMBbtZY=c{_uq2eqx<-mnzT{V>cqEHcMeIZxR&a)POV~F zs(+y*njx@()N3pTp{VMsFC4&=TX-H(2(kS!Ims`S$f4C=eV4>oF95*g9pKl@KH8W<GTphpEy^O|=P|Jq(TgenWRajel)JK2RTrBnCo%s6blOZV;S0DXJr&h7` z(Vund6k8u1(W#@aKFa7++rc4T+L_EHG=iptYw5as^NQHN=oHFEiwceWt!s%RX4+qO_8;Ot(?YoRZdeEE^e7Uf6?@*8mnw-RZygPi(+eo z>{xJhQKiw|0qUu)tTd=#b)8*&Eu{@t;aclonyaW@)e}`~wRNo*@NXSTzT=|sb+QG( zZ>$v_yvQU>r11dXpKKB~Txk-H{@WznN`E8nHwmx*-Xtv8ZxVh-HUO@Cm)87$+9a&{ zkw@TZ48Z*~2H;d01MoGn0nob2B>acw|KCM608ak3N%+#WCSe)wGbGLX4J^I4fQE@fte{{qj4|B!Vr2o~aQ*2FoRHsh1 zZqu3)>8EZxrc)^U`k<{u2dr$4>y#^UOfXlOy_?i`sKI8utcdlK;y$SbZ4lGn};-&7g z;_J=n7ZiM%`mE|C16SQudf}?mq`8plg*{PKC*2si=Q;C`l!~jSB%NBtR#UW4KHJpt zZ?LIXY&BJ)Q>W-^s#K>?_7zN9O%1T5ZJBN{U8`1=>y+!evMSi5W*w4@dMD)y)V`Or zwds_|)`{BMDt{V7esyKnt%8a~+XPvlPLy?vpia~_K;}m!uev%`p<4w}(N1B>i%Ooz zQHMq(cL}@txmu_Oyq#-hbt2r8IIvKihrxEPVH9SFF^e zjha>iRWsQFnOBoC`x&v&+qi{mnYMc6hDB|wSHd?}$yDjo$ri}kN+zeHK1}54ICbh| z%SkaC50#ODOqaTbq*kOwZ?|qSl*-yyq5Fl8-V|$_x|@y!qfMd1V7mUe4p0-+we7$AUsLGac8aY1A6b@MDP6;`h1Mm z|MS!Oe?JMEgv)6CKR#v>?xS`8d|3a_E^_}hH%`64=;y+}$Oek7|9|+eY$umpYILSb zwj$BKzvY*{`4vg6ZWWZi>Wz_0S#?qjCb8#>)ae#MMbclLm{-OhtJkeEK%JN;ar8;!5d}x>brO zrAO%&DW;S@MYqb}OX*{$>J}O3&1D>JiQKgxty=|A>F3QQPvq!n8WHuDRC~eJ&}}-N zThA&SxP2U0sKOb=jfxy#70%RofrXke8nfrm!?=wZOXg3d(Rocpy|T2d-?U-_W|J5Q@gr&hLZ(!Puoe(CY))XCOO+S+2Em!7dhQq#VN4A2xcPN!Ir zmBsiW$xxol-}sNYcY^5yg^`#I3U*u+>UFOTF#Mn)ERc();}nOv3Hd_kYTDCgID} z_kVY?Lh#W#0NgKR+A`~Q(o*-kc>9z92sN@|SM!eS#O z#5Asr6&7&&IIvJ*fr|hB!BzalEg_??;#c1r)p3vc4+7_EBCaOHi7%ec8`H7lql}4afWV{!M`;gov9H~ zBd-=yTPQ*9=RgZ%6Jw!bYVglAD5ap4d#0JC35FW16JKb|9+FaVg~lA6TE!L`b9L(I zD>UW}Nv+62<9wZBMHU(~6`E~oi}+ygzpTul3XKIiC5kIFnsuubQD_7;BH6U-o_4s6 z5@a#AlNB0p`#7*rp@CgX%BmJUg+$YN`mPO&13tqX=ELwPcP>-$;fLY)%D6!_I<`W$ zNHHzs7wJ|(RQeg)li!bdu|`C_j_PCEZo0N_bD)K>iLp=#Jov{p6u{8RJ+@t<35FW1 z6IlMKF=L;Z9>QOkF_s1`nf;-G8;U+{|}F3 z*Z(jlo8Szxc!EruRcZI|YNLvvQ?lv*6I2 z)kBie4npa362Tgs650AeecsOH@<^d^E^BqGpitEgLCG6sm_N>Coo*4-589GDKPq`e z_p$Z5RS*^Ju*|%uzF_@K5Z=cIXx=QGWH1)QT+1_vjYW^(=plPPrnVe0ON!UT-{_QmW|2bO! ze>#o-@1%GCE9l+dHOV9#qIdtPKQ;+Jq<8;~^zP4p%_Q7I@BVx4l!a<~_kV@n{pZv8 z|Bq<=|6UsZU%$m9yhP*wr=(264?3yMAVTl|9VX%L3;(ooh0)J7rL$!p-v5VnWZ(bE zr-i0ZpgbMqd&hOfCrD1DnD>tBb*msMgM05dwpX_ZqN1&T@?W9y22~!rLAMH`GB|@q zM{m@KWUq90C&#r^zm4bivRV%Au^d>amOF(zC34dMuTbjRTK`WE-Q1^%sT%VWUy<$~ zl2UOM=>eTu#a5&@>D19zk={HcwIVChTXc#Q`A&4}kYp&+95)9etVm!6B&?nYka*DOP0Wet1YSlnL{< zKI_qAkLZ*ru5Iz4ZWTP=Yx|V)x=8YRdyd96B5LH-M}k`^K_1{h3!{&*P&rk^BY|e< z~ zCux1ay^?S$js1UT8?Ez4_nKd6Jg0ttOe?TdY}RD0$hZ^ z0|FoduwW;`fSqUtB)|fc0Hr_~P!3oD8(;@y00!(t*sl|-04LxA+(0z|`*kAB*NJsN zJqJR3TVY5zz%{tKyR0AHM27t{v5jN{Y*sK#90NAV(VX{u-0Ra#J z17HM9fEkbg3s3^URGkP*b)prp0d_zJDgXyi2~+`2zy-ikod`>HA`I1uFjObj0rfxw z-~|+*5f}!*K%FQ6FiWy*%+raD0DqVOvveZN z(upujC&Db92(xq|%+iUlN+-f9od~ORBCOJhuu3PwDxGKp?0^hZ0I*6Y!YG{xqjVyS z(ur=M8t?!$0F2U!bp#4wJ=_g|0>CPr$afM1Km=foPBa20zzj%$1t>5ZlD_Q05J6?!qA%tJ8u+17B8JT2xDfH{sfpZ6Jf%P zQk?(;W|X8bu2llNWFpLxiLgp0!YG*tn`9zPl8LZLMr9!Z_Q>|Jv85IEpSRxZ)fsAq{0rtm4m>&~ieN2SyF%hQ6L|7gZVR%f0-7yhn z$3$2iqY%REm@jERY`B__g@mMRX4HIEAOoYiW5f;NJ%MxHOj4~=g0!n}~zzW!b3ZN2j0&c(q)B^QDMbivY zF0E~yL4j%~RCNO0nUpyIM-#!+L9lfaJb;y(MX>^;BLq|DYzk7-9Q+tTZX>wb30}Z@ zh)~i&a4^{C($xdZUP5UTp|*`s-cG0k44s6sBLu-d4=G0|_Yw?Ega+<>O2Z~X4Zt-M zN&rtAK{!aT01lu5s5wNCIta$Y1RG%C=F^P@ls6H)K!cxPZX+}Twg|xmD1fmYet_6? zJ|$V1fj+3TpH1#^g(J5B4+l$6YaP}L?opFFajo^ z9cYfMQ3MRdEIh&8o8aN^g&mUPyti{Zou3=ox}j=A%d-g zAOn?v3#b9=fCfMTh5=$H!30P^2~Y-D0XyITTtGEY3p4-6?hV~5-Ylj-sHO}eIRxq za3HfkzCXC1-=EkQ+9&Tz-Wa}7xiNJ^^akGz>AkVN0kYy3zdm?9e|_S*&~-A|@e5z8 zT$_qUqrPZIBpgv9scWLw_^wIsiR}sO$y^=3I(RjIb>gbfRq|EIE5mt~{9?PkyHmTO zyL`LSJ7YToJ2N?Jeu?d&?eg~Iw(vG(TWV``t8Z(1OKeMEOC}r-2g7_g(Pht%+nm@G z+9Z=bzwkz7V`@WmgKtCn^4R5p%QKh7FAI`Yzr^~`dU<_vU3i_cF10qg*0(mjCblN9 zCbJrL{W@30Rs~jNR>oHbS9aU=3x||Ysx{i`YfZPPw*7*a@RuYm4s}`gORb2m@U7@r z9$v02PhA+j(05__g4hLt3o^^%%Yw`JWr?MsrSj6`lJF8`NosL)v2SsDQEX8_W8v>$ zbFi6jPAmv5kQXH9hvzHvQ|Cv|_nn`f7n>KDmzf)%8=T9}P0R_+k>@05hi5CZQ?sJ8 ze6!LsV>1IYGczJHd^6J1W77lEGt=VJg46hEiK(Hf^3>#%@DycADi96$0%?EDAMj_+ zi=P)fk3TPQZs=V3+~hgobCh#ZXSbd$pPif>o~%qxofSRHcUJn$*qMPdGn3+zf|K}3 zi8DfH$Y&%ch9@c$Qxl>Sd=t{+W8(wkGvngpg5&sciLw4ZZT+RjM928Xq)&^T7C0?4 zIzBo$njf7wHFTT&+~6+)=mBop!}s0awNucLtrjGf@@F z+5J;0Q;w*^=SWw?DgqT5IW7lfUQXCUcG;e^g>8y0WsO>W)^vHSJW!q~i^X7ypWRguuW7wz|Q--L)XGn`NF(77yxDXV0 zA;E`unNM~p$BiW%|!nr;hl2UO6;OBK}6Xgftx7vcR;GD-V4M}EDx%qY=@TxA)L3w2Hf*mA7z@<-kJaEgpHlFvv&V z|Lv0=zp6t9au z^(WJOeVYIO*uTjJAg%rP?(fN#-+q(u>ANQ30ImHe?309tmeE{(TKn&NwC3N2HMCCP zM3e9++5VgGLzD3J-uJmY_51IC%p_d%s9o?ZGzqVUXwHF;<{Y${gsTsm1Y0Nd z{~zJFQxm4sE;0JK*MFV8$uRzZgg-m}zteSI!Q@uANwIXY(Z|D>& z@=^VpLz1DwB!BDsQTUORvG-G`mw{hMGzHj{Zwe$ zN=mm1qN1G~llRt|ccRA3)=wmEY3l{O#p_!feeN8yjaGj_+ zhvJp1bAB)+rGD$2US;_Yb!rt`mj6hnj=r+|$3s#pvMhgJx0tTCj-Tk1EAp-5r$dq% z)LX~TbV?NW*70-QDk!7|`PT6Z-6F-jb$p;(1yRwK>UrgDUMtVBU+NY?RJ4V9p{k=( zw+f;%xEYVf(;5-A>JT`XXW+RwRT}k-5@Q|XHf|kBtX5A}KO;^K|F*5$vO2VC!{(Kt z4Xf90TC;iUwk_LNZo^60();+Y1`vIeL~A%uV)QT;5_NF+mlfT3>B>G7x#Pbspm;hB zEZ^Q6BKPH2TF`pjCexYz^&9=elC);e$ldFWy`kp8&|ii z3T+GFq}=8GsGt~bHVgL@$?)8BL_2eP88>j7Ns9eWzF;vcl`GnJyl=g zNPSof8=Rq;i0!AVdO=$|1o`@Y8GBuZWiX#y#J4A zzW;SJ@4t>d-=KN_3u)f}pU*G}`*xay>VKGo=V{%)b3dec1AED?AFcbx(cJ%C*Gqzf z=KjC1(j?5Hx&ObSx&K$wyT6M*U!`~d^TV`;0KNNfp?Ck12z}=u$31uRfhSswe$M*a zY?86{|Gj@@J3R`YysXY0|5%es+3#{xd}IqA+za*WUJw~&M%;F|8#G(QMpIB}5^DBl zXxWy%6SDO7xY}UBBV5L`HBUwBhI@1U<9;Ck4VFu(YsnFH&0Y+{;8e zbGsO^tioDK56u?IHU@7Ct(`ZuW%e{2W!aBA{wIx$Dx1v?7VaeyP#E2eUdEjy5#ly! zRJe#GQq5I!JLiQqt=%44yL$Vkt?SorTD{77_aEJiMpykQ z_0GoCtYBADWHd9PIBn@8{~Ot}1G|*D`&qrRJ<|9ugBC4ia&k_ztGrlz8sDL^}uf2*yHH4zXni#i)n&34sk0TcD zZBnpsUnb^nc-Gq9NBN6~5f}BzY~Qpgv~l&S+|y4>Q&ZEKE!|T)x#R!QsH&mJ-n-@8 z7fG+0(ZT3uEcDQ2V$XQlDs|<$(3Tz#@Z9nL4j}d=6074tCu1!ms+hiNb#tVGO3IyC zwVjY_*`^UZI)GpYNqIQ1g0Y&haL&XP%+Hzmg&lYN*Z^ut(y8IV3Pum(PWDQ;CjX+s zO?N7m#@$(1?zl!yTkPP5sb)7!DPt95p)6S%Ihi||Wl749Yd3G%UEtp7dE0WwsbpiD zI+a)(imy;8syMKmv68V+D6)kg3Wg2qFQ>QQo`oMjfYv*t;^M$^Mkgblom=`SXiJ#I z^Np9btlYk(Wn*ZUR!tZ{?W?5I$bmLSg%L5^+((9Vuu5~o%FUa0&{D43HnbGJu;Kv1 zUn5C{18t06#zMjsxiTKYo3?N4N7pcb?$?WK*)j+T%~HEZkq|jqwyB@(^)Y)b655+M&B}0t|2kxf?UO6E})@45WGiG zspmi&V;$p4YBt%;wPmwYH|gyK&mk+f?QUD`>n9bZ0Ytw+a$XMfFg7q25;d{s=&Wd0 z)tr5J?^)eg-Ee#J`$5dRj*j^Mxs z#^H<*-@t9uXmcc9NB3FV$_*PsZ5r`DDznl7w7<=?!3GW-&Is-8{b+CRUt1gI!uzj% z$1I#he{cW7EX=stETpInVBc%F|n)Zbl~Px9(pX%BS&oof}*~e9j2goIMBja&4>g?8@6Wa zdNZ4~aC%_cyaiJO^QO<9KVw0jo_zql_etp#4zw_O7*TJp>!Zb-p8O(Su4U@F)hjQj zGI87XEt^`X)vcwcPoBIyfc#HMxP}8Qj2_1R)Fzwej5< z>LIm zRCfT6RcQjK2DtxTcC~(FSqHzC-6E*=joC^WKDkWg)M(_+rgAIWZ22KYzm5Yfj8%;N zB?8&o&QFAHtz#~Yma2Us2P=p3ycKq^Bb4IF4;bTDS`p5B!JnM9|zLv~**nZIPw^l2k^Y+k==)UIy9V;+s5 z8i4-OZx=nr;Ggz>;K_&Q@_zqlP44$K{k&cGf=pqlr!ERa2t;>9c8q0T8G`JgBSMG~ z?99_mv0)2!6tec++|5@zfS`kZzLpv(APCBgg>F6w+It8h`_b3bd%bP|xoSGKhF(A+ z2YMLMh`EWfyk?`gRUm$|=TB`}w5*wO^5Pk|OY%yXTE?y1PI`3jT`@}RZDi}t zwk`D1w}!o9vSBn?v14A1ShqNCuzL2>V;D!~xm&ocR1a^VVD#7`*%pzOMcYVhZJ#Y7 z$CQ2reN5yW#z}c@WHYq3YexWO+k0AAYx~yqSFEN67#5~n>>B$O^D}{^jLmuO7HSsV zOtC|enYU5w(6rw&WAm1cp>5gc^STvEM$Eaa^8z z2sg<|{R*DVL}oEg&2#I#NlxxpY%UWBF|NpS5BVk;*{|#>CbfxiL!P^ZN|QFu%V}>C z5tSR)5@_2IYT2-!UR(3B!SPWVDfRlRcgxx2!P7#YC{f^UV8r$7>uxEHpr&Y1?-r6n zD_MS_a*9T;TOXlP*suE-Pt9`=;eI)_U%~NA#LqZ6&#m)*8QrhgR3>mCmS$?a#%o(w*EHQX%}aBo%&{^3N`{%tRz|w4 z`I~!zL3rX^voL0lSxC}2faW^0&{;2JaIpPAYI^VXP!m+9TV`4p4zlig-v!%s}Y zf81u_*7r@q$+QOGYt#lXlg0u3$Y~aKm`s9^KJWh=%^8?(623ug0Bfe1gs(bEgvAcC z@Wa2Dg;f=1;kOym;LXAx4oPed0KGB_)(LAThG_l2cYc>2!i%`Z_*~{u?q9%751Xf1 zORNX1_wlrG735`e0F^)$-~?QN8>j~OHi7_@0p)-Vumcr9B~S&pfNH=4)B^Q@7vS3o z0w4lLzywG@2~Y}@0p)-dumN^J1}XptPzgAJhJ%D*0N+6n0RvD6Gyvta@|jIML@)pn ztpjE&2Pyy;Pzxx4$StE&fC|6?R036ih*fHOrlx_sY(_wAhYK(PW{ z6%aZu*8Zm0+sn||>nw9`uae$g*4|!nZ?DSUUe&$5YI}P%^!DP9^a`q}x0j{2S6Oc_ zdv7mCZ!c$WFHdhTt9=<~j^#3eOgpw3z(Ol1nIFx0H#9eMMvqmomawd1Xl_9zW>clQk3zQrocmSh4NcS?}0SsP3Eg&=zN&qJ?9I&?%6hJym zr~(>+(jx>H;61#MezcQN4pakX?;<)17@G(c0M|+=2Rwi=LXd%)4uaT8C;^;+c!b~p zMEhb222clByaXp8HW6%qrg?EU>Q@20->JPpJG>Q7Q0#s?b>Ajd%tIAOIp@0E~bgkbw%o0n`EfVS)h=+ApN90S3SXNCZ|?;BLx_mB7CY zumX0V0;mL>fE(}twE%aJAOHry1V}&$PzG25J5T{s0#3jUcmUxL!2p;52`B-|04rc8 zXhK^7|4P6KxB(BqA0~)^5ikQ5pcE(vY=8_@01luMr~;gT3vdI~fCu0@2?AgMOn?NG z0A+v`uoJYQg?}aB1l)iJs0DcYatbnF1k8X1C0S{0I2ps^o zg3bfXKq*iT*a?~dR>I#2R0DND1E2tQ~@r)1JnavU>G1q z2u8rn&`vH1umBFg2~-1>2eC`ggti*~bwC5q2=E;Q5ikKIKp9{KssRsB1Mr;$17HS5 z0Q?d70TNIGlmjy00Gxmas0G}#v>wagF_v40)2>bS&ZIa4Jgu*1GXZv>tdrmZN@#sO zn+vE1I4{sdIo}T0+6a~Hgj!%2PfRUElvss!5E~+djH3=TT zdxTKkM8(c9Kx!t`((-teU`@*_`<*YxY9ak)HX0bu0_oFo@eB zS3n**o@WT?4;YJh_z)*-Z2(Q0~K6|;wSY&Adyu66@p!qqMX$^bXp#U=Lu z4S>{4s01q72ri%ws0X+R!3dNBWq<-0+6g5j$Rqirp2sD|2W3&fuN=orya_cgS}nZx7$D z+@6X>W4>6rJ=Pv*&)gQjEqEJ$TjJKxt@5qOTf(;}x1?@P-xRwka8u?${6O#ke;~0x zv|rwz+!x-b>`UDkz0r4L`i9sIfg3V=<9ma9`MrtjL)XjKC$9@%=f5@+jYoq~KAMPx zB61{oP52t+n$(`?9^any)v>DsS7)w@UlqKHzbbKM=t}v@20xXfo++s@vXtF{MN*l&=z@1G8_&o;Z$3+&DWOR9NQe& zoY@rL6x_sbN^Fc2xn3Z@Ice)@Rnm*9F({>k?~2Yvr}cHQ_bNn$+s(YTxQ~*Ls9)mnxU0LeY>f zlx~f+23j*M@s?l<-;%f_bcuXP^5XEt%EhURq8IrtO0S5m2&~8~k1r1{=a(lg3|%N+ zn7p8USzuXaX?$sLDZezaB(y|cl3W~KtSn9~iZ1dkN-vBp3@pq91Hnvlylefz;?^FF z&j`-oXC$VFrpwcl)56n~X{o8vslKV{DX}SmDVab#5Df5vgg@k${mJvf=PBo<&W)by zJ2!n!?3}mM16A3ZJE%l{zzerti%3q}Zguq|6!dGlFOEXCx+u zCdw0&6T%ae390eX@xJltahb8o*px5oOEg7JZyw`4?Z~Mer?ii19ocj;chceE2Zyya z`W3skv;I(Bq_(-n>q%8dt9{jJcg!7dXIybt(8aqF&X7}fc2>qJ1C<#^+!1u}jzmSM zLas>4VOfz=_Nd)wPupU)fGuNtGDS^3Q`#6a28SIhJ+XrWics)1w}~lQQk-GO`oiuxA#(` zpW}1y|7THCh#_)RZ45AQd_;)k_RxsM+y-=o^u1yJUv>_lrcH(8{PfSBJ&d7qJvTp& zb3IzH?bMLhbIblP^UEDVkT^q^R3!T=@WjSi`Ls&p&%VXZh%ojCKefoQ%@0xtynZj| zjc^8Umnu8V5aGD%^8%SWfDmLu!2;x^UFJYI@FUcwLYqYC+#OageBh1E&&a;iLlh@; zouq1H&&^$_Y=T!XKR+?TT-`Ekw-5Nc{jx!2`;n}#Kl{PxMF3bBdj4qsIqXDhavCx~ra>`|KfSH+1br z^3S7d*R}b{g}>~^E>T|iB3kE;}di?A-q0#bI1{H$Jh$HkLq< z+>ZJ|ht)IKan)b_oI;^gPw-|vd6s*!Zg@qq&TblV5hEXeSFHRTi-cYMvccc=g-DkR zj+`2O5iT`QejH+2_!%$UxuozT9hnC_HOYuVl@ZI0+9J6~X6F$JJsVhOI<#v1eX7?gp$JFRj$m!Q< zW50(!BZ-2;t14ce>)_OLp=3YEdFgBe{aq_nw{sW5lf@^%abkx+omG{R!QLt&3ku#2 z>Wi=lv!>bI0z0vcc#ytL2P2VL{(Jw(3*;P*pIGO`O*sWlo{QiFPR>@x1}=giG)HiZ zw&5MQFuUm-!B3%ya1?HUv(wlLKgW69fl3oWp_BcntF7ki5<^H5#Q@;^D<8+koVQx znRGA$r-A+=ez?eu9cu`mA}{oKCXnO+(MKmnj*EV&slpeBO##Vxs%xk`(1MR>1z@Ac^JvSL7}qe)wQktLvz$KpuYP8DU=s z?0!gkIeKRD`*TO>9Qsc`_tiQoq%gTYJwB#DzEaKS;BD8hAQvkM~BLEj4F5Dp5>QDK^wauI$J*)6E%0@}xx zm5#s}0NBQE351U}_Tfk5C~X8j0zZy&xBfu#YTQ+*ox>krw>^eFzr*wHw%d zM!!HC(vW@#aq(jxn?I6u3*^o|6Fd+u=8 z*U1lK$goYxOE9m1c+-DBj?m`!b|2MT13Hr3P@!byNYk71?CXPmoNa!_{QD>C57If2 z?mg!64#x*Xvhc%|4Iv__#)&?&ai(iVzhbA%grCdGM5t1>=k)ztIcG2PGoc7K+(^Hb z%~~Ay;po%3U(NAyAI$P{T<0y^kB|P2UukURN`Fs6>UMY;_i=JD+sj%GW6mm%je5eR z8ar4kgLM^Py#s83buo!X%n=pX7n2%cU`!h328YAWm^1>0#-x*AX-qm9rpBa^b>Jvi z9FtCg$ua3v*c_8a!|0fF8mx{GRRhkh1?SX(bL+u*4dD4+aJ~XAXat*wfkCc~ zxR3`I3E*N8Tw(y18o^~I@B%Yc P6n^90QWk;8!EvY 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

    {W+0LTmrFSGe{9t^FGZa_ucz`|mh_YhR+Z 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

    uJ6J&pxqA_tJWQt6z~`Tw;;xuTi8=X}$l2iX#0b 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

    M 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 + + + Debug + AnyCPU + + + 2.0 + {68CFCB2F-B52A-43A1-AA5C-5D64A1D655D2} + Library + Properties + Test.Plugin.TllFile + Test.Plugin.TllFile + v3.5 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + ..\Debug\ + DEBUG;TRACE + full + x86 + prompt + false + true + false + true + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + false + + + + + + 3.5 + + + + + False + + + + + + + + + {DCCFFA08-472B-4D17-BB90-8F513FC01392} + ChanSort.Api + True + + + {E972D8A1-2F5F-421C-AC91-CFF45E5191BE} + ChanSort.Plugin.TllFile + True + + + + + \ No newline at end of file diff --git a/Test.Plugin.TllFile/UnitTest1.cs b/Test.Plugin.TllFile/UnitTest1.cs new file mode 100644 index 0000000..67270ec --- /dev/null +++ b/Test.Plugin.TllFile/UnitTest1.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using ChanSort.Plugin.TllFile; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Test.Plugin.TllFile +{ + [TestClass] + public class UnitTest1 + { + #region class ExpectedData + public class ExpectedData + { + public readonly string File; + public readonly int AnalogChannels; + public readonly int DtvChannels; + public readonly int SatChannels; + public readonly int DtvRadio; + public readonly int SatRadio; + + public ExpectedData(string file, int analog, int dtv, int sat, int dtvRadio, int satRadio) + { + this.File = file; + this.AnalogChannels = analog; + this.DtvChannels = dtv; + this.SatChannels = sat; + this.DtvRadio = dtvRadio; + this.SatRadio = satRadio; + } + } + #endregion + + private readonly Dictionary expectedData = new Dictionary(); + + #region ctor() + public UnitTest1() + { + var expected = new [] { + new ExpectedData(@"opel\xx2350D-PZM00001.TLL", 31, 345, 0, 89, 0), // 164/- + new ExpectedData(@"defycgn\xxLH4010-ZD99970.TLL", 34, 280, 0, 129, 0), // 164/- + new ExpectedData(@"karlv\xxLD750-ZA00001.TLL", 30, 248, 0, 104, 0), // 176/- + new ExpectedData(@"JLevi\xxLE5500-ZA00002.TLL", 36, 0, 0,0, 0), // 176/- + new ExpectedData(@"chlabnet\xxLK450-ZB00001.TLL", 34, 310, 0, 128, 0), // 176/- + new ExpectedData(@"Stabilo\xxLW4500-ZB00001.TLL", 31 ,338, 0, 34, 0), // 176/- + new ExpectedData(@"MarioAntonioLiptaj\xxPT353-ZA00001.TLL", 50, 123, 0, 13, 0), // 180/- + new ExpectedData(@"Muffix\xxLW5500-ZE00001.TLL", 34, 290, 0, 125, 0), // 184/- + new ExpectedData(@"FranzSteinert\xxCS460S-ZA00001.TLL", 0, 0, 1261, 0, 200), // ?/68 + new ExpectedData(@"Klausi1\xxLK950S-ZA00001.TLL", 37, 390, 2695, 150, 491), // 184/68 + new ExpectedData(@"MP3Chris2712\xxLV570S-ZB00001.TLL", 0, 12, 2895, 0, 669), // 184/68 + new ExpectedData(@"decklen\xxLW570S-ZD00001.TLL", 0, 30, 1587, 0, 339), // 184/68 + new ExpectedData(@"NeuerScan\xxLM340S-ZA00001.TLL", 34, 317, 1698, 129, 264), // 188/68 + new ExpectedData(@"wagnale\xxLM611S-ZA00001.TLL", 0, 13, 1094, 0, 191), // 188/68 + new ExpectedData(@"_Pred\xxLM620S-ZE00021.TLL", 0, 11, 1302, 0, 191), // 192/72 + }; + + foreach (var entry in expected) + this.expectedData[entry.File] = entry; + } + #endregion + + [TestMethod] + public void MetaTest() + { + } + + #region TestLoadingAllTllFilesInTestFilesDirectory() + [TestMethod] + [DeploymentItem("ChanSort.Plugin.TllFile\\ChanSort.Plugin.TllFile.ini")] + public void TestLoadingAllTllFilesInTestFilesDirectory() + { + TllFileSerializerPlugin plugin = new TllFileSerializerPlugin(); + + StringBuilder errors = new StringBuilder(); + var list = this.FindAllTllFiles(); + var models = new Dictionary(); + var firmwareSize = new Dictionary(); + foreach(var file in list) + { + if (file.Contains("GlobalClone")) + continue; + Debug.Print("Testing " + file); + try + { + var serializer = plugin.CreateSerializer(file) as TllFileSerializer; + Assert.IsNotNull(serializer, "No Serializer for " + file); + + serializer.Load(); + + var fileName = Path.GetFileName(file) ?? ""; + int idx = fileName.IndexOf("-"); + string key = idx < 0 ? fileName : fileName.Substring(0, idx); + var satChannelList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS, ChanSort.Api.SignalType.Tv, false); + key += "\t" + serializer.ACTChannelLength+ + "\t"+serializer.HasDvbs+ + "\t"+serializer.SatChannelLength+ + "\t" + (satChannelList == null ? "n/a" : satChannelList.Count.ToString()); + string relPath = Path.GetFileName(Path.GetDirectoryName(file))+"\\"+fileName; + models[key] = relPath; + + var model = this.GetModel(file); + if (firmwareSize.ContainsKey(serializer.FirmwareDataLength)) + { + string x = firmwareSize[serializer.FirmwareDataLength]; + if (!x.Contains(model)) + firmwareSize[serializer.FirmwareDataLength] = x + ", " + model; + } + else + firmwareSize[serializer.FirmwareDataLength] = model; + + + + Assert.IsFalse(serializer.DataRoot.IsEmpty, "No channels loaded from " + file); + + ExpectedData exp; + key = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + Path.GetFileName(file); + this.expectedData.TryGetValue(key, out exp); + var analogTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.AnalogCT, ChanSort.Api.SignalType.Tv, false); + var dtvTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbCT, ChanSort.Api.SignalType.Tv, false); + var satTv = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS, ChanSort.Api.SignalType.Tv, false); + if (exp != null) + { + this.expectedData.Remove(key); + Assert.AreEqual(exp.AnalogChannels, analogTv.Channels.Count, file + ": analog"); + Assert.AreEqual(exp.DtvChannels, dtvTv.Channels.Count, file + ": DTV"); + Assert.AreEqual(exp.SatChannels, satTv.Channels.Count, file + ": Sat"); + } + } + catch(Exception ex) + { + errors.AppendLine(); + errors.AppendLine(); + errors.AppendLine(file); + errors.AppendLine(ex.ToString()); + } + } + + foreach(var model in models.OrderBy(e => e.Key)) + Debug.WriteLine(model.Key + "\t"+model.Value); + + foreach (var size in firmwareSize.OrderBy(e => e.Key)) + Debug.WriteLine(size.Key + "\t" + size.Value); + + if (this.expectedData.Count > 0) + Assert.Fail("Some files were not tested: " + this.expectedData.Keys.Aggregate((prev,cur) => prev+","+cur)); + Assert.AreEqual("", errors.ToString()); + } + #endregion + + private string GetModel(string filePath) + { + string name = Path.GetFileName(filePath); + if (name.StartsWith("xx")) + { + int idx = name.IndexOf("-"); + if (idx > 0) + return name.Substring(2, idx - 2); + } + return filePath; + } + + #region Helper Methods + + private IEnumerable FindAllTllFiles() + { + string path = this.GetTestFileDirectory(); + List files = new List(); + this.FindAllTllFilesRecursively(path, files); + return files; + } + + private string GetTestFileDirectory() + { + string exeDir = Assembly.GetExecutingAssembly().Location; + while (!string.IsNullOrEmpty(exeDir)) + { + string testFileDir = Path.Combine(exeDir, "TestFiles"); + if (Directory.Exists(testFileDir)) + return testFileDir; + exeDir = Path.GetDirectoryName(exeDir); + } + throw new FileNotFoundException("No 'TestFiles' directory found"); + } + + private void FindAllTllFilesRecursively(string path, List files) + { + files.AddRange(Directory.GetFiles(path, "*.TLL")); + foreach (var dir in Directory.GetDirectories(path)) + this.FindAllTllFilesRecursively(dir, files); + } + #endregion + } +} diff --git a/makeDistribZip.cmd b/makeDistribZip.cmd new file mode 100644 index 0000000..7cd002b --- /dev/null +++ b/makeDistribZip.cmd @@ -0,0 +1,35 @@ +@echo off +set target=%cd%\..\Program +set DXversion=12.2 +mkdir "%target%" 2>nul +del /s /q "%target%\*" +copy debug\ChanSort.exe* "%target%" +copy debug\ChanSort.*.dll "%target%" +copy debug\ChanSort.*.ini "%target%" +copy debug\Lookup.csv "%target%" +copy DLL\*.dll "%target%" +mkdir "%target%\de" 2>nul +xcopy /siy debug\de "%target%\de" +copy readme.txt "%target%" +for %%f in (Utils Data XtraEditors XtraBars XtraGrid XtraLayout) do call :copyDll %%f + +cd .. +del Website\ChanSort.zip 2>nul +copy Source\readme.txt . +"c:\program files (x86)\7-Zip\7z.exe" a -tzip Website\ChanSort.zip Source -x!Source\_ReSharper* -x!Source\Debug -x!Source\TestResults -x!Source\*\obj -x!Source\ipch Program readme.txt +del readme.txt + +pause +goto:eof + +:copyDll +echo Copying DevExpress %* +set source="C:\Program Files (x86)\DevExpress\DXperience %DXversion%\Bin\Framework\DevExpress.%*.v%DXversion%.dll" +if exist %source% copy %source% "%target%" +set source="C:\Program Files (x86)\DevExpress\DXperience %DXversion%\Bin\Framework\DevExpress.%*.v%DXversion%.Core.dll" +if exist %source% copy %source% "%target%" +set source="C:\Program Files (x86)\DevExpress\DXperience %DXversion%\Bin\Framework\de\DevExpress.%*.v%DXversion%.resources.dll" +if exist %source% copy %source% "%target%\de" +set source="C:\Program Files (x86)\DevExpress\DXperience %DXversion%\Bin\Framework\de\DevExpress.%*.v%DXversion%.Core.resources.dll" +if exist %source% copy %source% "%target%\de" +goto:eof \ No newline at end of file diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..01673d5 --- /dev/null +++ b/readme.txt @@ -0,0 +1,226 @@ +ChanSort v2012-12-26 + +Allgemeines========================================================== + +!!! Die Verwendung dieses Programms erfolgt auf eigene Gefahr! Es ist +!!! mglich, dass durch die Verwendung das TV Gert beschdigt wird + +Die Vorliegende Version untersttzt folgende TV-Gerte: +LG-Electronics: Serien CS, LD, LE, LH, LM, LK, LV, LW, PM +Samsung: Serien B, C, D und E + +Eine Diskussion zum Thema "ChannelEditor" fr LG Fernseher mit nheren +Infos rund um ChanSort befindet sich hier: +http://www.lg-forum.com/lg-led-plasma-lcd-fernseher/5098-channeleditor-45.html +http://www.hifi-forum.de/viewthread-145-5061.html +http://forum.lg.de/viewtopic.php?f=16&t=5097&sid=3dbbc693bbbaef643a624b82206b4ac0&start=10 + +Systemvoraussetzungen ================================================ + +- Microsoft .NET Framework 3.5 +- fr LG TVs der Serien CS, LM und PM ist eine programmierbare Fernbedienung + ntig (z.B. Logitech Harmony 300, One-For-All URC3920, ...) + + +Benutzung ============================================================ + +LG Fernseher + +1) Zuerst muss man am Fernseher das geheime "In-Start" Men aktivieren +und dort mit dem "TV Link Loader" die Senderliste auf einen USB-Stick +speichern. + +Bei der LM-Serie (2012) bentigt man eine programmierbare Fernbedienung, da +weder die Standard-FB noch der Fernseher eine Zugangsmglichkeit bietet. +Einige Wege um in das Men zu gelangen, werden auf dieser Seite beschrieben: +http://openlgtv.org.ru/wiki/index.php/Access_hidden_service_menus_/_modes + +Gelingt es, den Infrarot-Befehl fr "In-Start" an den Fernseher zu senden, +drckt man anschlieend auf "Settings" (Original-FB) oder "Menu" (Harmony). +Dann stehen das Hotel-Men und der TV-Link-Loader zur Auswahl. + +2) Mit ChanSort die TLL Datei am USB-Stick ffnen. Dies muss immer + Die Original-Datei des TV sein und nicht eine bereits sortierte. + Falls eine gleichnamige CSV-Datei mit einer bestehenden Sortierung + existiert wird diese automatisch eingelesen. +3) Die gewnschte Senderliste zusammenstellen. Am einfachsten in der + rechten Ansicht in Spalte "Sendername" den Namen eintippen, dann in + der Liste doppelclicken. + In der Mitte kann eingestellt werden, wo in der sortierten Liste der + neue Sender landet. Dazu einen Programmplatz in der linken Liste + auswhlen und in der Mitte eventuell "Dahinter". +4) Dateien speichern + Die TLL-Datei erhlt eine 9 als erste Ziffer, um die Originaldatei + nicht zu berschreiben. +5) Senderliste auf USB Stick speichern und ber den TV Link Loader in + den Fernseher laden. + +Samsung Fernseher + + Im Men "Sender" / "Kanalliste bertragen" / "Auf USB exportieren" + +Kontakt ============================================================== + +Benutzer "Pred" auf www.lg-forum.com +Email: horst@beham.biz + + +Versionen ============================================================ + +2013-03-30 +- FIX: bei nicht-LM Gerten wurden die DVB-S Programmnummern falsch ausgelesen +- Hotelmodus/DTV-channel-update kann nun bei allen LG serien gendert werden + +2013-03-29 +- LG: Doppelt vorhandene Sender (die automatisch vom TV bei der Sendersuche + mit Lndervoreinstellung angelegt werden) werden nun automatisch gelscht. + Diese fhren am TV hufig dazu, dass Sender zufllig zwischen deren + Programmpltzen hin- und herspringen. (Bug im TV, unabhngig von ChanSort) +- LG: Sender knnen nun gelscht werden ("Nicht explizit sortierte Sender: Lschen") +- LG: ndern von Sendernamen mglich (um bei DVB-C/T/S die Namen nicht wieder + zu verlieren, muss Hotel-Mode=ein und DTV channel update="manual" sein) +- LG: Fr die LM-Serie kann nun innerhalb von ChanSort der Hotel-Modus bzw + die Senderlisten-Aktualisierung ein-/ausgeschaltet werden. + +2013-02-26 +- Neuer Bearbeitungsmodus "Tauschen" eingebaut, mit dem beim ndern der + Programmnummer die beiden Sender ihre Nummer tauschen und alle anderen + Nummern unverndert bleiben. +- Beim ffnen einer TV-Datei ohne zugehriger Referenzliste werden nun + automatisch alle Sender in die "Sortierte Liste" bernommen. +- "Speichern unter" funktioniert nun auch mit Samsung's SCM Dateien +- Wenn beim Speichern ein Fehler auftritt, wird nun auf mgliche Ursachen + hingewiesen + +2013-02-11 +- Mehrfach vorhandene Sender werden nun getrennt angezeigt, wenn sie + unterschiedlichen Programmnummern zugewiesen sind (z.B. DVB-T Empfang des + gleichen Senders ber verschiedene Sendeanlagen). +- Beim ndern der Programmnr auf eine bisher nicht verwendete Nummer werden + die Programmnummern hinter der neuen Nummer nicht mehr erhht. + +2013-02-04 +- Untersttzung fr Samsung "AstraHDPlus" Senderliste hinzugefgt +- Funktion zum bernehmen der bestehenden Senderliste in die sortierte Liste + +2013-01-22 +- Fix: Import von .chl Referenzlisten, wenn der gleiche Sendername ber + mehrere Satelliten empfangen wird und dort dem gleichen TSID zugewiesen ist. + +2013-01-16 +- Import von .chl Referenzlisten von SamToolBox +- Samsung Senderlisten zeigen nun "verschlsselt"-Info an +- FIX: Mehrfachauswahl in den Senderlisten (mit Strg/Shift + Maus/Cursortasten) +- FIX: Warnung statt Absturz bei mehrfach vergebenen Transponder-IDs (.SCM Datei) + +2013-01-15 +- Samsung Serie E wird nun untersttzt +- Favoritenliste der Samsung Serie D und E wird nun erkannt +- Samsung Modellerkennung verbessert + +2012-12-26 +- Untersttzung fr Samsung Fernseher hinzugefgt +- Funktion zum ffnen einer Referenzliste hinzugefgt +- Funktion zum kompletten Lschen der Senderlisten fr LG Fernseher +- Diverse Bugfixes + +2012-11-07 +- Anzeige von DVB Netzwerk Name und Betreiber +- Anzeige der DVB-S Transpondernummer +- Fix: Direkte Eingabe der Prog# in rechter Liste, wenn sie vorher 0 war + +2012-11-06 +- Fix: Analoge Senderliste wurde nicht korrekt gespeichert +- Fix: Hinzufgen von Sendern zu einer leeren Liste +- Setzen von Favoriten mglich +- Setzen von Sender sperren / berspringen / verstecken +- Direkte Eingabe von neuer Programmnr in den Tabellen +- Kontextmen ber rechte Maustaste + +2012-11-05 +- Fix: DVB-C/T Senderliste wurde nicht korrekt gespeichert +- Fix: Favoriten in DVB-C/T werden nun korrekt angezeigt + +2012-11-04 +- Fix: Transpondernummer und Satelliteninfo wurde falsch ausgelesen +- Mehrfach vorhandene Sender werden nun nicht mehr ausgefiltert + +2012-11-01 +- UI und internes Datenmodell komplett berarbeitet +- Getrennte Listen fr Analog, DVB-C/T, DVB-S in jeweils Radio/TV + +2012-10-30 +- Untersttzung fr LG Serie CS, LD, LE, LH und PM hinzugefgt +- Neue Serien knnen durch Anpassen einer .INI Datei hinzugefgt werden +- Automatischer Test im Sourcecode, der alle bekannten TLLs ldt +- Hilfe-Men hinzugefgt + +2012-10-29 +- Plugin zum direkten Laden/Speichern von TLLs, ohne TLLsort.exe +- Untersttzung fr LG Serie LV und LW hinzugefgt +- Sourcen verffentlicht + +2012-10-26 +- Programm umbenannt von TLLsortGUI auf ChanSort +- bersetzt in Englisch und sterreichisch +- Einstellungen werden beim Beenden/Speichern des Programms bernommen +- Ausgewhlten Zeilen in der sortierten Liste alphabetisch sortieren +- Dateinamen fr Speichern knnen gendert werden +- Untersttzung fr Plugin-DLLs fr verschiedene TV-Modelle + +2012-10-25 +- Neu: Wenn eine Gruppenzeile (Sat, Analog, CableAndTerrestic) ausgewhlt + ist, werden alle darin enthaltene Sender eingefgt bzw. entfernt. +- Bugfix: Eingabefelder fr Einfgepositionen erlauben nun keine + ungltigen (sprich zu hohe, nicht fortlaufende) Nummern mehr. + +2012-10-24 (14:52 MESZ) +- Bugfix: Fehler beim Einlesen der TLL-Datei, wenn der gleiche Sender + (sprich Uid) mehrfach enthalten war. Kann vermutlich passieren, wenn + ein Sendersuchlauf 2x durchgefhrt wurde, ohne die alten Programme zu + lschen. + +2012-10-24 (#1) +- erste Verffentlichung + +Source Code ========================================================== + +The user interface (ChanSort.Ui project) is using the commercial "WinForms" +UI component library from Developer Express. You can get a trial version +from http://www.devexpress.com/Subscriptions/DXperience/WhatsNew2012v1/winforms.xml +The trial version will periodically show popup-windows reminding you to +obtain a license. + +As long as you dont make any changes to the UI, you can exclude the +ChanSort.Ui project from the build list and copy all files from the +"Program" directory to "Source\Debug". + +Alternatively you can just compile the other projects and drop the generated +DLL-File into the "Program" folder and start ChanEdit.exe there + +Lizenz =============================================================== + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to \ No newline at end of file