- added Italian translation

- updated Polish translation
- added support for a Hisense HIS_SVL variant with different file structure
- Samsung IP-TV lists allow editing stream and logo URLs
This commit is contained in:
Horst Beham
2023-08-14 10:46:10 +02:00
parent e561f71441
commit 3ed2e28ac0
52 changed files with 3337 additions and 513 deletions

View File

@@ -19,7 +19,7 @@ namespace ChanSort.Api {
// 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", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ChannelList_ProgramNrAssignedToMultipleChannels" xml:space="preserve">
<value>{0} Il programma #{1} è assegnato a più canali: indice {2}='{3}' e indice {4}='{5}'</value>
</data>
<data name="ChannelList_AddChannel__DuplicateUid" xml:space="preserve">
<value>{0}: il canale '{1}' ha più record di dati: indice {2}=Pr#{3} e indice {4}=Pr#{5}</value>
</data>
</root>

View File

@@ -2,6 +2,9 @@
; HIS_SVL.BIN, HIS_TSL.BIN and HIS_FAV.BIN
; ========================================
; there are several versions of this format, with no deterministic way to detect the format
; ChanSort checks if the file sizes are multiples of the record sizes to guesstimate the version
[Header]
RecordSize=40
ID=0
@@ -12,16 +15,20 @@ BlockSize=36
[Version1]
TSL_Record=304
SVL_Record=264
FAV_Header=24
FAV_Record=80
ReadDvb=false
[Version2]
TSL_Record=328
SVL_Record=304
FAV_Header=16
FAV_Record=80
ReadDvb=true
;=== variant with 304 byte TSL record and 264 bytes SVL record (LTDN55K390XWSEU3D V00.01.00a.E0430)
[TSL_Record:304]
[TSL_Record:Version1]
RecordSize=304
ID=0
BroadcastType=2
@@ -34,7 +41,7 @@ DvbsSymbolRate=28
Name=188
NameSize=28
[SVL_Record:264]
[SVL_Record:Version1]
RecordSize=264
RecordId=0
@@ -79,10 +86,26 @@ NameSize=16
BroadcastSystemData=48
[FAV_Header:Version1]
RecordSize=24
CountFav1=16
CountFav2=18
CountFav3=20
CountFav4=22
[FAV_Record:Version1]
RecordSize=80
SvlTableId=0
SvlRecordId=2
DisplayNumber=4
DisplayNumberSize=10
ChannelName=15
ChannelNameSize=64
;=== variant with 328 byte TSL record and 304 bytes SVL record
[TSL_Record:328]
[TSL_Record:Version2]
RecordSize=328
ID=0
BroadcastType=2
@@ -96,7 +119,7 @@ DvbsSymbolRate=28
Name=216
NameSize=32
[SVL_Record:304]
[SVL_Record:Version2]
RecordSize=304
RecordId=0
@@ -141,7 +164,7 @@ NameSize=96
BroadcastSystemData=136
[DVB_Data]
[DVB_Data:Version2]
ShortName=4
ShortNameSize=16
LinkageMask=28
@@ -154,7 +177,14 @@ DvbcTsid=118
DvbcOnid=120
ServiceType=129
[FAV_Record]
[FAV_Header:Version2]
RecordSize=16
SizeFav1=0
SizeFav2=4
SizeFav3=8
SizeFav4=12
[FAV_Record:Version2]
RecordSize=80
SvlTableId=0
SvlRecordId=2

View File

@@ -12,7 +12,7 @@ namespace ChanSort.Loader.Hisense.HisBin;
*
* This binary format is based on a customized MediaTek format, which means that there may be many incompatible
* variants that can't be identified and distinguished easily.
* This loader only supports the known HiSense variants with 264 and 304 bytes per channel in HIS_SVL.BIN.
* This loader supports 2 known versions with 264 and 304 bytes per channel in HIS_SVL.BIN, which also differ in TSL and FAV file layouts
*
* See also the his-svl.h file in Information/FileStructures_for_HHD_Hex_Editor_Neo
*
@@ -32,6 +32,7 @@ public class HisSvlBinSerializer : SerializerBase
private string favFileName;
private byte[] svlFileContent;
private byte[] tslFileContent;
private byte[] favFileContent;
private const int MaxFileSize = 4 << 20; // 4 MB
private bool readDvbData;
@@ -42,7 +43,7 @@ public class HisSvlBinSerializer : SerializerBase
private const string ERR_badFileFormat = "The content of the file doesn't match the expected format.";
private IniFile ini;
private DataMapping headerMapping, svlMapping, tslMapping, dvbMapping, favMapping;
private DataMapping headerMapping, svlMapping, tslMapping, dvbMapping, favHeaderMapping, favMapping;
private readonly Dictionary<int, Transponder> transponder = new ();
#region ctor()
@@ -82,10 +83,6 @@ public class HisSvlBinSerializer : SerializerBase
this.ini = new IniFile(iniFile);
this.headerMapping = new DataMapping(ini.GetSection("Header"));
this.headerRecordSize = headerMapping.Settings.GetInt("RecordSize");
this.dvbMapping = new DataMapping(ini.GetSection("DVB_Data"));
this.dvbMapping.DefaultEncoding = this.DefaultEncoding;
this.favMapping = new DataMapping(ini.GetSection("FAV_Record"));
}
#endregion
@@ -115,6 +112,7 @@ public class HisSvlBinSerializer : SerializerBase
{
var svlLen = new FileInfo(this.FileName).Length;
var tslLen = new FileInfo(tslName).Length;
var favLen = new FileInfo(this.favFileName).Length;
IniFile.Section candidate = null;
foreach (var section in this.ini.Sections)
{
@@ -124,22 +122,29 @@ public class HisSvlBinSerializer : SerializerBase
continue;
if ((svlLen - this.headerRecordSize * 3) % section.GetInt("SVL_Record") != 0)
continue;
if (favLen != 0 && (favLen - section.GetInt("FAV_Header")) % section.GetInt("FAV_Record") != 0)
continue;
if (candidate != null)
throw LoaderException.Fail("Unable to uniquely infer file format from its content");
candidate = section;
}
if (candidate == null)
throw LoaderException.Fail("File content doesn't match any known SVL/TSL/FAV.bin data format versions");
throw LoaderException.Fail("File content doesn't match any known SVL/TSL/FAV.bin format versions");
var tslRecordSize = candidate.GetInt("TSL_Record");
this.svlRecordSize = candidate.GetInt("SVL_Record");
this.readDvbData = candidate.GetBool("ReadDvb");
this.svlMapping = new DataMapping(ini.GetSection("SVL_Record:" + this.svlRecordSize));
this.svlMapping.DefaultEncoding = this.DefaultEncoding;
this.tslMapping = new DataMapping(ini.GetSection("TSL_Record:" + tslRecordSize));
this.tslMapping = new DataMapping(ini.GetSection("TSL_Record:" + candidate.Name));
this.tslMapping.DefaultEncoding = this.DefaultEncoding;
this.svlMapping = new DataMapping(ini.GetSection("SVL_Record:" + candidate.Name));
this.svlMapping.DefaultEncoding = this.DefaultEncoding;
this.dvbMapping = new DataMapping(ini.GetSection("DVB_Data:" + candidate.Name));
this.dvbMapping.DefaultEncoding = this.DefaultEncoding;
this.favHeaderMapping = new DataMapping(ini.GetSection("FAV_Header:" + candidate.Name));
this.favHeaderMapping.DefaultEncoding = this.DefaultEncoding;
this.favMapping = new DataMapping(ini.GetSection("FAV_Record:" + candidate.Name));
this.favMapping.DefaultEncoding = this.DefaultEncoding;
}
#endregion
@@ -389,17 +394,29 @@ public class HisSvlBinSerializer : SerializerBase
{
if (!File.Exists(filename))
return;
var content = File.ReadAllBytes(filename);
var favListSizes = new int[4];
for (int i = 0; i < 4; i++)
favListSizes[i] = BitConverter.ToInt32(content, i * 4);
var content = this.favFileContent = File.ReadAllBytes(filename);
int[] favCount = new int[4];
var recSize = favMapping.Settings.GetInt("RecordSize");
favHeaderMapping.SetDataPtr(content, 0);
if (favHeaderMapping.Settings.GetInt("SizeFav1", -1) >= 0)
{
for (int i = 0; i < 4; i++)
favCount[i] = BitConverter.ToInt32(content, i * 4) / recSize;
}
else if (favHeaderMapping.Settings.GetInt("CountFav1", -1) >= 0)
{
for (int i = 0; i < 4; i++)
favCount[i] = favHeaderMapping.GetWord("CountFav" + (i+1));
}
else
return;
var dispNumLen = favMapping.Settings.GetInt("DisplayNumberSize");
favMapping.SetDataPtr(content, 16 - recSize);
favMapping.SetDataPtr(content, favHeaderMapping.Settings.GetInt("RecordSize") - recSize);
for (int i = 0; i < 4; i++)
{
for (int j = 0, c = favListSizes[i] / recSize; j < c; j++)
for (int j = 0, c = favCount[i]; j < c; j++)
{
favMapping.BaseOffset += recSize;
@@ -525,8 +542,7 @@ public class HisSvlBinSerializer : SerializerBase
using var mem = new MemoryStream();
using var writer = new BinaryWriter(mem);
for (int i=0; i<4; i++)
writer.Write(0);
writer.Write(this.favFileContent, 0, this.favHeaderMapping.Settings.GetInt("RecordSize"));
var favRecordSize = favMapping.Settings.GetInt("RecordSize");
var tmp = new byte[favRecordSize];
@@ -552,12 +568,11 @@ public class HisSvlBinSerializer : SerializerBase
}
// update header
writer.Flush();
var off = mem.Position;
mem.Seek((i-1) * 4, SeekOrigin.Begin);
writer.Write(order.Count * favRecordSize);
writer.Flush();
mem.Seek(off, SeekOrigin.Begin);
favHeaderMapping.SetDataPtr(mem.GetBuffer(), 0); // the MemStream buffer gets reallocated while adding data
if (favHeaderMapping.Settings.Keys.Contains("SizeFav1"))
favHeaderMapping.SetDword("SizeFav" + i, order.Count * favRecordSize);
else if (favHeaderMapping.Settings.Keys.Contains("CountFav1"))
favHeaderMapping.SetWord("CountFav" + i, order.Count);
}
tmp = new byte[mem.Length];
@@ -589,11 +604,12 @@ public class HisSvlBinSerializer : SerializerBase
return;
base.DefaultEncoding = value;
this.dvbMapping.DefaultEncoding = value;
if (this.svlMapping != null)
{
this.svlMapping.DefaultEncoding = value;
this.tslMapping.DefaultEncoding = value;
this.dvbMapping.DefaultEncoding = value;
this.favMapping.DefaultEncoding = value;
this.ReparseNames();
}
}

View File

@@ -19,7 +19,7 @@ namespace ChanSort.Loader.Hisense {
// 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", "16.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {

View File

@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Load_NoChannelsMsg" xml:space="preserve">
<value>Questo file di elenco canali non contiene dati.
Molto probabilmente durante la configurazione iniziale del televisore è stato selezionato un elenco di canali predefinito. Tali elenchi non vengono esportati e non possono essere modificati sulla TV o sul PC.
Per ottenere un elenco che può essere modificato sul tuo PC, devi ripristinare il televisore alle impostazioni di fabbrica e selezionare l'opzione 'Altro' durante l'impostazione del canale satellitare.</value>
</data>
<data name="Load_NoChannelsCaption" xml:space="preserve">
<value>Nessun canale trovato</value>
</data>
</root>

View File

@@ -52,6 +52,6 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="TllFileSerializer_ERR_wrongChecksum" xml:space="preserve">
<value>Checksum errato: calcolato {1:x8} ma il file ha {0:x8}</value>
</data>
<data name="TllFileSerializerPlugin_ERR_modelUnknown" xml:space="preserve">
<value>Il contenuto del file non corrisponde a nessun modello supportato</value>
</data>
<data name="TllFileSerializerPlugin_ERR_fileTooBig" xml:space="preserve">
<value>La dimensione del file {0} è maggiore del massimo consentito di {1}</value>
</data>
<data name="TllFileSerializer_ERR_dupeChannel" xml:space="preserve">
<value>Il canale #{0} (Pr# {1}) è stato cancellato perché è un duplicato del canale #{2} (Pr# {3}): {4}</value>
</data>
</root>

View File

@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup>

View File

@@ -26,6 +26,7 @@
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.IO.Compression" />
</ItemGroup>
<ItemGroup>
@@ -38,6 +39,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.Sqlite" Version="7.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Buffers" Version="4.5.1" />
<PackageReference Include="System.Memory" Version="4.5.5" />
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />

View File

@@ -1,11 +1,18 @@
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using ChanSort.Api;
namespace ChanSort.Loader.Samsung.Zip
{
internal class DbChannel : ChannelInfo
{
private dynamic jsonMeta;
private Encoding encoding;
public bool JsonModified { get; private set; }
#region ctor()
internal DbChannel(IDataReader r, IDictionary<string, int> field, DbSerializer loader, Dictionary<long, string> providers, Satellite sat, Transponder tp)
{
@@ -40,9 +47,10 @@ namespace ChanSort.Loader.Samsung.Zip
if ((this.SignalSource & SignalSource.Dvb) != 0)
this.ReadDvbData(r, field, loader, providers);
else
else if ((this.SignalSource & SignalSource.Analog) != 0)
this.ReadAnalogData(r, field);
if (field.ContainsKey("jsonMeta"))
this.ReadIpData(r, field, loader);
base.IsDeleted = this.OldProgramNr == -1;
}
@@ -72,5 +80,62 @@ namespace ChanSort.Loader.Samsung.Zip
this.AddDebug(r.GetInt32(field["lcn"]).ToString());
}
#endregion
#region ReadIpData()
private void ReadIpData(IDataReader r, IDictionary<string, int> field, DbSerializer loader)
{
var json = loader.ReadUtf16(r, field["jsonMeta"]);
if (json != null)
{
var s = JsonSerializer.Create();
dynamic obj = s.Deserialize(new JsonTextReader(new StringReader(json)));
this.encoding = loader.DefaultEncoding;
this.jsonMeta = obj;
this.JsonDefaultUrl = obj?.default_url;
this.JsonLogoUrl = obj?.logo_url;
}
}
#endregion
#region JsonDefaultUrl
public string JsonDefaultUrl
{
get => jsonMeta?.default_url;
set
{
if (jsonMeta == null || value == (string)jsonMeta.default_url.Value)
return;
jsonMeta.default_url = value;
JsonModified = true;
}
}
#endregion
#region JsonLogoUrl
public string JsonLogoUrl
{
get => jsonMeta?.logo_url;
set
{
if (jsonMeta == null || value == (string)jsonMeta.logo_url.Value)
return;
jsonMeta.logo_url = value;
JsonModified = true;
}
}
#endregion
#region GetRawJson()
public byte[] GetRawJson()
{
var s = JsonSerializer.Create();
using var w = new StringWriter();
s.Serialize(new JsonTextWriter(w), this.jsonMeta);
w.Flush();
var rawJson = Encoding.BigEndianUnicode.GetBytes(w.ToString());
return rawJson;
}
#endregion
}
}

View File

@@ -261,6 +261,8 @@ namespace ChanSort.Loader.Samsung.Zip
};
if (fileType == FileType.ChannelDbDvb)
fieldNames.AddRange(new[] {"onid", "tsid", "vidPid", "provId", "cast(shrtSrvName as blob) shrtSrvName", "lcn"}); // SRV_DVB
if (fileType == FileType.ChannelDbIp)
fieldNames.AddRange(new [] {"cast(jsonMeta as blob) jsonMeta"});
var sql = this.BuildQuery(table, fieldNames);
var fields = this.GetFieldMap(fieldNames);
@@ -303,7 +305,7 @@ namespace ChanSort.Loader.Samsung.Zip
{
list.VisibleColumnFieldNames = new List<string>
{
"OldPosition", "Position", "PrNr", "Name", "Favorites", "SymbolRate"
"OldPosition", "Position", "PrNr", "Name", "Favorites", "SymbolRate", "+JsonDefaultUrl", "+JsonLogoUrl"
};
}
return list;
@@ -542,8 +544,9 @@ namespace ChanSort.Loader.Samsung.Zip
using var cmdInsertFav = PrepareInsertFavCommand(conn);
using var cmdUpdateFav = PrepareUpdateFavCommand(conn);
using var cmdDeleteFav = PrepareDeleteFavCommand(conn);
using var cmdUpdateIp = (channelList.SignalSource & SignalSource.Ip) != 0 ? PrepareUpdateIpCommand(conn) : null;
Editor.SequentializeFavPos(channelList, 5);
this.WriteChannels(cmdUpdateSrv, cmdDeleteSrv, cmdInsertFav, cmdUpdateFav, cmdDeleteFav, channelList);
this.WriteChannels(cmdUpdateSrv, cmdDeleteSrv, cmdInsertFav, cmdUpdateFav, cmdDeleteFav, cmdUpdateIp, channelList);
trans.Commit();
}
@@ -573,6 +576,16 @@ namespace ChanSort.Loader.Samsung.Zip
return cmd;
}
private SqliteCommand PrepareUpdateIpCommand(SqliteConnection conn)
{
var cmd = conn.CreateCommand();
cmd.CommandText = "update SRV_IP set jsonMeta=@jsonMeta where srvId=@id";
cmd.Parameters.Add("@id", SqliteType.Integer);
cmd.Parameters.Add("@jsonMeta", SqliteType.Blob);
cmd.Prepare();
return cmd;
}
private SqliteCommand PrepareDeleteCommand(SqliteConnection conn, bool digital)
{
var cmd = conn.CreateCommand();
@@ -623,7 +636,7 @@ namespace ChanSort.Loader.Samsung.Zip
#endregion
#region WriteChannels()
private void WriteChannels(SqliteCommand cmdUpdateSrv, SqliteCommand cmdDeleteSrv, SqliteCommand cmdInsertFav, SqliteCommand cmdUpdateFav, SqliteCommand cmdDeleteFav,
private void WriteChannels(SqliteCommand cmdUpdateSrv, SqliteCommand cmdDeleteSrv, SqliteCommand cmdInsertFav, SqliteCommand cmdUpdateFav, SqliteCommand cmdDeleteFav, SqliteCommand cmdUpdateIp,
ChannelList channelList, bool analog = false)
{
bool canUpdateNames = this.Features.ChannelNameEdit != ChannelNameEditMode.None;
@@ -652,6 +665,13 @@ namespace ChanSort.Loader.Samsung.Zip
cmdUpdateSrv.Parameters["@srvname"].Value = channel.Name == null ? (object)DBNull.Value : encoding.GetString(Encoding.Unicode.GetBytes(channel.Name)); // convert string => UTF16LE => string with flipped byte order (looking "Chinese")
cmdUpdateSrv.ExecuteNonQuery();
if (cmdUpdateIp != null && channel.JsonModified)
{
cmdUpdateIp.Parameters["@id"].Value = channel.RecordIndex;
cmdUpdateIp.Parameters["@jsonMeta"].Value = channel.GetRawJson();
cmdUpdateIp.ExecuteNonQuery();
}
// update favorites
for (int i=0, mask=1; i<5; i++, mask <<= 1)
{

View File

@@ -135,4 +135,16 @@
<data name="lblWebsite.Text" xml:space="preserve">
<value>Webové stránky projektu:</value>
</data>
<data name="lnkDownload.EditValue" xml:space="preserve">
<value>http://github.com/PredatH0r/ChanSort</value>
</data>
<data name="lnkEmail.EditValue" xml:space="preserve">
<value>horst@beham.biz</value>
</data>
<data name="lnkLicense.EditValue" xml:space="preserve">
<value>GNU GPLv3</value>
</data>
<data name="txtAuthor.Text" xml:space="preserve">
<value>Horst Beham</value>
</data>
</root>

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="lblWebsite.Text" xml:space="preserve">
<value>Sito web del progetto</value>
</data>
<data name="lnkDownload.EditValue" xml:space="preserve">
<value>http://github.com/PredatH0r/ChanSort</value>
</data>
<data name="lnkEmail.EditValue" xml:space="preserve">
<value>horst@beham.biz</value>
</data>
<data name="lblAuthor.Text" xml:space="preserve">
<value>Autore programma:</value>
</data>
<data name="lblLicense.Text" xml:space="preserve">
<value>Licenza:</value>
</data>
<data name="lnkLicense.EditValue" xml:space="preserve">
<value>GNU GPLv3</value>
</data>
<data name="lblCredits.Text" xml:space="preserve">
<value>Crediti:</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>Chiudi</value>
</data>
<data name="txtAuthor.Text" xml:space="preserve">
<value>Horst Beham</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Su ChanSort</value>
</data>
</root>

View File

@@ -135,4 +135,7 @@
<data name="$this.Text" xml:space="preserve">
<value>Despre ChanSort</value>
</data>
<data name="txtAuthor.Text" xml:space="preserve">
<value>Horst Beham</value>
</data>
</root>

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="lblMessage.Text" xml:space="preserve">
<value>Come vorresti continuare?</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Scegli un'azione…</value>
</data>
</root>

View File

@@ -111,9 +111,7 @@
<Compile Update="Printing\ChannelListReport.cs">
<SubType>Component</SubType>
</Compile>
<Compile Update="GlobalImageCollection.cs">
<SubType>Component</SubType>
</Compile>
<Compile Update="GlobalImageCollection.cs" />
<Compile Update="XGrid\XGridControl.cs">
<SubType>Component</SubType>
</Compile>
@@ -215,6 +213,7 @@
<PackageReference Include="DevExpress.Sparkline.Core" Version="23.1.4" />
<PackageReference Include="DevExpress.Utils" Version="23.1.4" />
<PackageReference Include="DevExpress.Utils.UI" Version="23.1.4" />
<PackageReference Include="DevExpress.Win" Version="23.1.4" />
<PackageReference Include="DevExpress.Win.Reporting" Version="23.1.4" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>

View File

@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel.Text" xml:space="preserve">
<value>Annulla</value>
</data>
<data name="btnMyCountry.Text" xml:space="preserve">
<value>Set di caratteri predefinito per il mio paese</value>
</data>
<data name="btnOk.Text" xml:space="preserve">
<value>Ok</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Set di carattteri</value>
</data>
<data name="colDisplayName.Caption" xml:space="preserve">
<value>Descrizione</value>
</data>
</root>

View File

@@ -7,6 +7,7 @@ using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Reflection;
using DevExpress.Utils;
using DevExpress.XtraEditors;
namespace ChanSort.Ui
{
@@ -16,7 +17,7 @@ namespace ChanSort.Ui
/// that are used globally throughout the solution
/// </summary>
[ToolboxItem(false)]
public class GlobalImageCollectionHolder : Component
public class GlobalImageCollectionHolder : XtraForm //Component - DX23.1 it must be an XtraForm because the context menu for editing the collections is missing in the Designer
{
private IContainer components;
private ImageCollection rawImageCollection;
@@ -46,6 +47,7 @@ namespace ChanSort.Ui
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GlobalImageCollectionHolder));
this.rawImageCollection = new DevExpress.Utils.ImageCollection(this.components);
((System.ComponentModel.ISupportInitialize)(this.rawImageCollection)).BeginInit();
this.SuspendLayout();
//
// rawImageCollection
//
@@ -101,7 +103,14 @@ namespace ChanSort.Ui
this.rawImageCollection.Images.SetKeyName(48, "0048.png");
this.rawImageCollection.Images.SetKeyName(49, "0049.png");
this.rawImageCollection.Images.SetKeyName(50, "0050.png");
this.rawImageCollection.Images.SetKeyName(51, "0051.png");
//
// GlobalImageCollectionHolder
//
this.ClientSize = new System.Drawing.Size(298, 268);
this.Name = "GlobalImageCollectionHolder";
((System.ComponentModel.ISupportInitialize)(this.rawImageCollection)).EndInit();
this.ResumeLayout(false);
}

View File

@@ -123,14 +123,14 @@
<assembly alias="DevExpress.Utils.v23.1" name="DevExpress.Utils.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="rawImageCollection.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMi4xLCBWZXJzaW9uPTIyLjEu
Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4xLCBWZXJzaW9uPTIzLjEu
NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
/xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP
BQAAAIqKAAAClgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAACxAAAAsQAa0jvXUAAAI4SURBVDhP1ZJPSJRRFMXfskUbqbBw0SooJg1jKhVkMDMU
BQAAAOGLAAAClgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAACw8AAAsPAZL5A6UAAAI4SURBVDhP1ZJPSJRRFMXfskUbqbBw0SooJg1jKhVkMDMU
TKjGTBl0TDNEtDIXkTU55lT4D3Xsj6KGZhhmaUZqYOZgSlakqGOUSkgEE2kFjdjo982vzzdugqBldODx
znnvnsu99z3x71FV00ePc478G0OkX1pZA6Ra+3k3M8/9NCttZovkMVldRGf0EG7qIMn6hLqDJ8mvH0Q0
330JD1vxemFq1k1TxxS32qelproUym2SVzWOU1Y/yvCLj3iLz+NVPVR0jiKOFTnoHf4Kd1rA8VRzweXr
@@ -141,7 +141,7 @@
e4PwO4GwPxrX7lUWr5xlsH+K0wUOcgoGZFuqMZrlQ5Ham6skZHQRn3yP7oH3qMpPvpgPkJXbjDjX0E/1
vjQiM5vw217H2q121mypYGTShS0ghCJ/Pa8mtGn7n0FsOKWVnc36YAtlvW+J2pXD6of+fyHELyMtGAnY
LCN/AAAAAElFTkSuQmCCrAIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1B
AACxjwv8YQUAAAAJcEhZcwAACxAAAAsQAa0jvXUAAAJOSURBVDhP1c5tS1NhAIfxfRF7EetFpRxStNKZ
AACxjwv8YQUAAAAJcEhZcwAACw8AAAsPAZL5A6UAAAJOSURBVDhP1c5tS1NhAIfxfRF7EetFpRxStNKZ
qZtjbhI6CVTCB0omPqyYSg7ZYBomomSKkjLN2bQtTdNaItUHCCKCIsoMETN16dxTcz5wdc99gF5GB/7n
HG74XefI/v2l0+Wi06SjU19Al68gLy+dy9lpZGWdE5P+Oplanc7i4rPjLSzM4PFMMz/vYnZ2kunpcdzu
USYmhnE4Bhmx32doqIeBgU56e9vjAY1GcYxtbW1YLBbMZjNNTU0YjUZqDDVUVVVRVlZGcXExBQUFqFQq
@@ -152,7 +152,7 @@
um4gslZJeLWU0IqewLIW/5IK35dMtj+fx/tRYvPDaTben2T9XQK+lXqG22OBMYn9bTtR75BYP3ubvUR+
dhH+0UF4zUZo1UpwxUzgezP+ZRO734z4lmrxfa3BLv5e9rRHwtMl8fyOxPxdiSmrhFvM1S3xRJy5bBLj
4vlQnI20ineLxFizmMB9JhH43y+Z7A95ZMCdwloGFQAAAABJRU5ErkJggowCAACJUE5HDQoaCgAAAA1J
SERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsQAAALEAGtI711AAAC
SERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsPAAALDwGS+QOlAAAC
LklEQVQ4T9WS3UuTURzHz71UwrzRCzV8gVLctDaZbixlKmPmlClOmmiBxgTRSqbmVdRVF4FQQoUISRCV
ZkTQy0XUTRYRQSJUSEnkW/iyl8fHqePTeZ45EPoH6sDn3H2+X87vd8Q/cFoE4uQ+3BKPIC4S7EhiElWi
SCKSkGRdsioRmjA0NaQzODlI/0Q/fZN9xHvPEe/uZjcQYLejg532drb9fmLNzWx5vah1dfzWA2Tr0NRF
@@ -163,7 +163,7 @@
hJXA33I4NZVISQnf9QCzoHO8E+c1J46rDsqulFExfBy1qIiI+QhKTg7RzMyEbDAQOnSQUEoKYaNxL6BA
cHrsDK2jrfogG0eaqL9Rj+p2o1ZXsylXqNjtRK1WGWgmLJs1OSxXOacHHJPXYUm6xCBJkRwQ+ifR9qxN
WhuW9t55idaqiUn2/vP/e4T4AwKnjHYei+iaAAAAAElFTkSuQmCCmAIAAIlQTkcNChoKAAAADUlIRFIA
AAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAI6SURB
AAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAI6SURB
VDhPpZJrSNNRGIf3oQ99skiLQjCyRCwYBoZUH0KSLhpCUVoYXYSyG4VRiPPSpks3Nze1VjqsbbqmTq2V
YlgxKJQRoaWOElOzoKiUpYZKXvb0b8KYJlZ04PlwXs7v4T3vOSLgv5i3OJcF13yBuSy4as3aBAHm0lit
KPhbAd0dRsaHajz8cFmYHDBgNRVgM8uz/yioKdcw5qqcFZ7+XMKkM4XK20oqSnMxXM9GX5jFTbWEa4pU
@@ -174,8 +174,8 @@
UL9Qj0CXL6HTnsVdcz70ZMFLod0XB5ho3sPokyiG6iMZsIr5aFyHU+2PNHkt4esDG7yvUJyXSo1JifPB
GVq1Ii8O9SLsisU0ZC+hOmM5htRAblxcTWLMGndkeFCMV6CVX0YrPUle2jHSzyf8mizH46PZt2sz27eI
2SQOISw4kKBVAaxY5sdKfz8h5/MPfDf/DqKfuxCKOTLBBxEAAAAASUVORK5CYIKgAgAAiVBORw0KGgoA
AAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAN1QAADdUBPdZY
8QAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACHElEQVQ4T5WS7WtScRTH96c0
AAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAN1AAADdQB75G6
FQAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACHElEQVQ4T5WS7WtScRTH96c0
etW/EVS0Nnph5lw2h65g0NPY2GiEs5jN3EKLvSgqKKLHmdrD1ihmToVL86lrgaAhRrVEX7jrvbvTXfXb
vcfy9mIJXvjC+X3POZ97OL9f194+x8qenllYrdaOpPTIvb4uOWhcfRxHIBDoSHPPWAXSUACYX2TR6XfT
+4WmIMDc809kSjUJv/IbbSWKW1R7w/MPwP7kD0CS8HPjR1sJWwLVOl98VgG2Rwky6/U6NrlSW1WrVaqd
@@ -186,7 +186,7 @@
AJ11WZ7gLSXz+TzGJicoNp8aph0Eg0G43W74/X7ye2SAybHaBHT3XnPt0ziFY9PNCcrlMmo1+boEXl5e
AalUCgzDIBwOtyY4MfMOWstSEyA/KgVyRzloB/5/hX+l6R+gRkXdR+y23xS47hoGAHdAAAAAAElFTkSu
QmCCkgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJ
cEhZcwAADsIAAA7CARUoSoAAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAg5J
cEhZcwAADsEAAA7BAbiRa+0AAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAg5J
REFUOE9jIBa4Fx9MYGRmZYJySQNaIcv4Xauu/3TO35MIFcIPHFM3CQXXnst1L7+43Ln84jbnykt77Stu
/Xetvv7WJGKWDFQZdhBQcSLQvezKW8v8a/9Ncq/9N8q9/t8w/8Z/o8Kb/01Kbv+3LTm3AagMu1f8So/7
WuVe/qOXev6fZtyxB1qJx6/qZlz8ZFh4679J2d3/5lX3/9vWP/jvUHwoGqoFAcxj1wpYZJx+rh2xZa6S
@@ -197,7 +197,7 @@
DHBsfvTfufPZf6/Jb/4Hzf/0P3rNj//JG75+8u8Aa8YdmCreU3iNC6/etap7+N+q8uJh56ZrW7y6bqz0
aT9bpupRIwtUgt1mZKCbvM/FourOH3nnBnUgl7AGbEA3YRso1+FMMAjAwAAA8UXZZO59Q5UAAAAASUVO
RK5CYIKeAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAA
AAlwSFlzAAALEgAACxIB0t1+/AAAAkBJREFUOE+lke9PEnEcx/kL+ht60BO2HhCbSo1RzUaoZTOLilwb
AAlwSFlzAAALEQAACxEBf2RfkQAAAkBJREFUOE+lke9PEnEcx/kL+ht60BO2HhCbSo1RzUaoZTOLilwb
M+2SsB/LphsYIq4fDC/S5AryB7SWtWrypKStH25lj3LVoTwqqiVkHL/OaLPy3ffOIG5IT7rtdbvbfd6v
fb7vkwH4L2TBqQgE7j1hRcYfvkIg+BJOb7CmeHAH5cXOI8yyzkgvqupOyCWCpR8/JfgnplFZe1hAUSxR
6Ki1VXXm7vXqPeT1H4Khm48Qes6uKqk6aF6j2LyXPP4R3H/MlggG/A/yYZH8sMB2g5WrrN4PuWpXThSM
@@ -295,7 +295,7 @@
3WkuS4fDd+3YXI/ObI4pQ8ipmQcxou8p0PY4dpq9mS+te6LQNM3M5ucTOMpl3VJbWf3bDZ01BKAH8kj5
IQ7sufMWj2Zeth3Lun8A+Glao9oDUeMAMdzbD06bzY9uX6kBvitOmzf8Tef2f62u+wlSbAABOMbXPAAA
AABJRU5ErkJggtQCAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L
/GEFAAAACXBIWXMAAA7CAAAOwgEVKEqAAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0
/GEFAAAACXBIWXMAAA7BAAAOwQG4kWvtAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0
cqEAAAJQSURBVDhPYwCBb2dPSn3cvM7o9coVbGABAuBefDzLs6RY45M2VsoMbzauSHjRXPLtZVPR/9d9
jfeO5ae5QdVhgLux0XxvOhsb7xSkP1pkbjjbnYtDkeFgcVb309q8v2+ntv9/N6nl/4eWkv+34gP7HSSl
WKH6wOBpZnz4m6rsF4ejg68nCQlZA4UYITJA0OnhanO2MP3Eu7by/2+K4v+/DLD8f89G/UCLtibvndgo
@@ -307,423 +307,425 @@
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
NfdhAAAAAElFTkSuQmCCCw==
AABJRU5ErkJggrwCAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L
/GEFAAACc0lEQVQ4T7WSXUhTYRjH33M2uxClqK67EBIyu7GbikSiTCq86DJCKpkVRSaoQfaBYmSSolQS
lZEoasJ0EbWVWC5RSVaaufzIj23apmbbWc3adt6z/Xucp0KM8KYf/DnPeZ7n/7zPezjsv1GcLooeY5pJ
Mu17fuuQRqOmV87Ujegz3DMALg3CWRWTo6ZXhl6nWevtyHEjHMKCvnblS63Z2vVq+d9UZsQIrgcJtYrP
hjCXIlLmHXDWJDZW62JFtW0pT3SaLcOFUWftVXH1c61HJ4PuVwgF7Qhx26Iolj2d+PIiy+m4Hd/0sWhV
XtspTVLE3F+6/bxkvoDguAnKjAWKpw+K7x2UAIn3LmohnidJVJt9A9nWCm9nMawVO4tYw37trrG6I4o8
1AJuN4LPtIF72qF8M5OJ9J20EFOOz1Jt0gh5xIAJfXao5aB2d2SL+lRNrq1BF5YH74Hb6sBdD6F81kNx
Ny9qTg8+3QTuqCNzNewteWhMi8qPmH9Rs01b5nqUAflDIfj4NfCpcijTFRFxZzltV4pgnw7O2q24nyRW
qrY/ZMUz0XJx3VCgew+C/XvppFTwiRTwsSQaugGBLhF+E8PbAmE0N4H9/cfqLxA6/EaGQDcjE6PrkByk
UYZgL4P/JYO1SHitti/HelkY8T+jZguZxhjdnSEk0fMTDbTS4A6GoRJhSm1fznCx4PvxlAb0MMwP0Lp3
GCx3GXwjNIDeA+0Mo+UCP7GJCaplKcNXRNnbLMBaKngN6ez6zWS2sWwHizMcYFfflwhu6bFAA8Twcfpe
qmUp5szVJw0p7NilRBarpn5zbjOL1iezw+bMNafVFMHYTzLZooZpzlEAAAAAAElFTkSuQmCCTgEAAIlQ
TkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADrwA
AA68AZW8ckkAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMpJREFUOE+lkr0O
wiAQgGlro5tRF03cfNE+ZSemDnTqxMIE3p13zRVJDJXk4+B+vjQNJsbYpJRK9MABaBV4PwMnvjcGtg4P
jDTiGWuI1HRuzZthGNJeYHUk2LN4rv1X0JMghFANCx4k8N5Xw4I7CZZlqYYFn584z/MG59xXLmcjmKap
mo3gF9ZaIs+TADZ5eRI1HTaO40jw0AXzwBNj/lRLXEXCAsytz1kEaJRzKfY4rARrXZokoYckivxY+AJD
Bb7cOOZCzQtQtWTeF24184AzFQ0AAAAASUVORK5CYILUAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQ
CAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6
mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAACSklEQVQ4T6WS2UuUURjG/XO6iJC8qGyBlAhJ
KcqFTBy11CStXFIsk9yaCzNsnUozG9d0CMkZdxtGs9wzZ1xDIjHIJjXGXGqc79d3vmD0U/CiLp4D5+F9
fud9X44H8F/aYowOWKI/T1qZtPbyoaedrtaXNBqKqS3JD9xcK6S62PrMsVMj/SzPTeByjCAt9CDZW5kb
K+NZ4VWK8lOObqwXUl3Gh7pYstuYHmniVmYceakaspPOMNOdy2xfJrnJoXLZNoDBThPSj16yEkNJjfbf
I7wrZ/28yh/fRJpIJz32uGxtA+gwloG9iZRI0em6X/FIizSWRKLGV+ULKUenUe9prntKy4sHNFQWUq8v
oE6fj6FIS01xHlW6bMof3kB/9zqlhdeEPFWAtlodi9PNMG9RJH034/rWxtrXZpxfTLhmW9z+zHAN93IS
5NgGQGPVnb/hsWRc1gScgzGsdoez1BHEylt5ceMpuGyXcL4/z8dXgWRcOKkG1Otvw5yFteF4fg+cY+Vd
GN0VfmhCdvK6JsodXu3VMG7wJy0mQA0Q80r2dn71RbHcdZpF8wnCg3YQFbFf1gF3eKkzmNFKX5Ii1pes
HIZirTLv8psQHO0BLDT4KrDNYUebP9ZSby6G+agB1bocnDNGHK3HmDce5qflFNX3A4kM30eR9og7vGDy
YejJbuJDD6kBFbospvv1DJfsxfb8IJ9aIplqDFMWJmYWbYuXRdiUt4u4YO8tAK+CjFi0aRpFufL3zboc
omxbLEzMLNoWL4uwLPU/+Hfh8QdZjOdNufbSGQAAAABJRU5ErkJggm0GAACJUE5HDQoaCgAAAA1JSERS
AAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAA2Ov1HBSqAAAAIGNIUk0AAIcLAACMHAAA+V0AAIUwAAB7
cQAA66AAAD/EAAAh8aVSo6gAAAMQaUNDUFBob3Rvc2hvcCBJQ0MgcHJvZmlsZQAAOMuNlE1IFGEYx/+7
jQixBpGZCMXQwSRUJg1SAnPXrzZlW8ZVU4TYnX13d3J2dpqZXVMkQoiOWcfoYkl0kOgUHjp0ykOEkGkX
CTpaBJHgJWR7ZmY/ZkmxF2b2N8/H//mYZYCq11FNU7w8kFZNXRwI8DfGJ/jqT6hCDXygE5UMzR8OD9lM
sag8HmB307oD6y37+A87NToVJBnqALVJhy9aHHP4qsXTpmYST1ospaJxYo24WY+IPcRPiY8lXRxzcZwZ
Es3ZTZyRNJ10vLXEHTkpaWkuEwtqXFaJtyx73JDSFEPzen9bu3DaNAeBrtPAkQ9l24QBLL8ATjWWbU31
wMkxYKW9bNsR7f146taMRHubszVfgHr6ms/vNALVj4G9R/n8n2f5/N5zqkF9vFOkrJ4r7tjzEXD6Le58
RSzSQezMZJ8OYJH2OHYUGLwPPPkGnHsFnHgDhGuASCe891C8THbHrtOT0WZ0OZky+TZBuMT76dUyPqhK
rc18VFF422XwOjOYnmPxVqSVrFSod5wuH1NHhumX5vPeZUZfgT3z8Wgv7RKtxN/jrLfPeo/ELxNyf9Ba
IF1bCb1/xGHPedkMRhz2jqpKaKjA9WosdL2gyWlmQCzqG7nhvqL9VvRamLiBWJzKDFoxdZTbPZuKjDns
UWZTPaECf9azolX3LMUsaYr9n6fevO8xDgUMMlS6q+AhYgABtECDjgwS5JEpQiYrs2N0YgNT+0YqCLuY
J/825WzbObeRpWwraxSBEOabSwq88EX4KWwIi8KS8GOhIdtU9szrN2Vp7eEv0rUqF3UL3kJPjr5Edf3k
VZAka7o0k+Hq1NVdQl1oKCtZNdiD0K5rSuaq1IKYrTRlV8rZPoPufle1g7ZHsatzb+vLtTa4lcl13+pc
xa4y/0zFSlNVPpfj3PmMO8Nd4IJcB9cJnrvCdXNdXC89XeaGShkjpCJj2lYyEKUsFTPk1SremRML59ti
n9oBpjJdlnjrGxrWMwlZYa7P3CHu/zrAX7hwDd/Ec6rXAAAACXBIWXMAAAsPAAALDwGS+QOlAAAAGnRF
WHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAAKhSURBVDhPhZNdSFNhHMbfUijF7Uw0P3Om
0/zCTGerCA2VWoZakpWUSalRdFM0DaGL6MpuugiEurGLboQ+IJqm6NTc/NjmNGhT0dMidbqRTtxubFA+
ve/ZYS4keuAH7/n/n995z80h/0p3kjSkT87F9cmlcR/pWRz/P4YULn+24ljn4q1qj6ulHq7mOiw0VXpm
zxR2sp1Y2xntfgn5rEppXWks/7V+9xzWb6vhDoLNlhvUv6aUya3060QrKBalXONsKMPq9SIsNp2Go+Mp
XEM9Auy8dFMt7Jw3SmE5nKgRNX/6D0jT7efzfc7LBbA3X4XHuQKfzxfg58Y6Vh/Wg+2dl2inKs+nS+HS
RZ0Q85HE9oWqDPC1Kqw5luD1erf54cKKpgYLFWmYu1YkdFjXpIxvF3X6+Udjeb40BvyLNrjd7gBrjkV8
v1MOvjQW1holHDNWocOXxMCiiuFFnZDxHJnPmheJ+V4tHA6HwPLXeczVlcGqjMSEOhf85IQwZ50vtMsc
USdEnyXbnMyNxHSPFna7Hd+mrbDWloDNRktyYBsbEeaMGdphc+aIOiG6g5zNmC3D1LM2TNObpi6eBHv+
VJwNy6AONpstAOsYc2RgjqgT8iFV+mQ0SwbjWRXM1cUYzZSh/0QmDN1amM3mABMmE8bLC8G6zBF1Ql4l
SBJ0GZx3hIoGSu/xDPS/e4vh4WEBvV4PA8V4v1HY09u9zBF1f14nSa4MpHFbQwoOI5XFMHY8x/jggB96
HrtwCmynU3Bbb2hX1P7KnsfR4ZquZOmmTk6LScFIwWZdcunmo+jwZtrd61e2s4sioRxShIbcexAVNvYy
PmLjfaLkN6MjLsLTEhVmSg0NYXIBhROdHWG/bRglmqLYTV9IyWNnyj5KOCXo1ybkD9uSslHkXI87AAAA
AElFTkSuQmCCxgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8
YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACWElEQVQ4T21SS2sTYRT9oHsX
QmnMaxKSFlGySNqkj6Sp+IjWWBrBpFqhT0WhhWgNamIzpmqhZBFUCBV1pxvrzoVWrcbHRnSjon/CtWjT
ao/3TCexFi8c7pzHPZPAqM3jdrvLmqb9dDqdcDgc4CanbkbqA8B8kvF4PDGGk8kk8vk8isViHeTU6TNn
nvwtEPG4x9OM8xcuIndJx+j4aRwdHKmDnDp95mol9QKr3Y0zGR2nJrNIJEeRODKO+OET6E2cNHa/8ERq
zPCZY553RoHT5S339g9jebEBj9IKV/cqzAiwpPB7UfZzhcIehWsxhduDCtWnDWCed0aBxday/Hi+E3ih
cK9cRuXjN0xnprAqBd+fyMEzhaWlBej6TdyfvwW8VGDeYmteNgoat7UAHxTWXsvbVirITswgM7gPv94q
/KgorIh+bvgYspNXgNVXWHsjufcKjZZmuecvsHrw8O441t6J8UnwRfBV8Nnk3OTUhTO3cGcMLdv96wV2
hwuzczcQCMXQ2n4QbR1xwSFBn/A+85la3PCZm527DptdWy/QNFdV1ws4sD+OSNcuRCO7Ee3+D0Snz5yu
X+bHVTUK5Gt7kEqlMHV2Ch3BdoQ7u9AdDgsiGxA2dPrMMc87o0BGPjAncrkcRoZGEPAHEGwLIhQMIRQS
yCanTp855nlXK1BWq3Xa6/UaZjqdRk+0B74dPvh2CmSTU6fPXFNT0wTv6gUyWymyeWBgAIVCAaVSqQ5y
6vTN4y082ljAodgq/23B5XJVGa6BnDp9M2fM5oLaOAV+AcM1kFP/ZwCoP8hjrhyQhyn0AAAAAElFTkSu
QmCC1wIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJ
cEhZcwAACxAAAAsQAa0jvXUAAAAHdElNRQfUBxgPMwsKE6x8AAAAGnRFWHRTb2Z0d2FyZQBQYWludC5O
RVQgdjMuNS4xMDD0cqEAAAJASURBVDhPlZHdT1JhHMf7A7roonu9KKGtP8ALLrtgq4tq6si2xg1rubZe
9IKSFLZmulpjzsKNQjYCX5AxmjKGB0RxyUsQgoAEgXiAAwECA4mJ7tfDw+mCYS0+29nzcn7fz/N27g96
vZmtN6xbTZvb9S2bCwjLl4KRsHxA8910yd9Z1qwKV4wW2HR6wOENgtMXBFcghFti3VrQaHQsurQduXyB
rdUTYPf6IRiLQySRhEB0H1z+EOyEIri/algj5+aUF+hIK1LZvHXD4cGF6cNDKJbLuB9LURAmExBNpSD4
IwoSifQxHWnl06K2bvP4IRQ/gFyphAQViJBJLEvlckDl87hVqhaX6UgrKrUOn/vbXhi8aMuhOAnZYhF/
eSQsoB01WoVygaAjrbydlmW/7u6BwxfA4WQ2C5lCAQfL1SpUazUoVSogFE3M0JFW7g+NizfsbnAHv8Nu
JAbxdAYLSkdHUDs+hpPTU7DZncDjDZ/9Ev39/IsC0XvSg47QeIX9dLp5mWjVxuoHiQS8fiMFPn/mBh1p
B0kuPXn+zqkz2SBCZfClkT+z8FlvgYlXUkqlMvzSL82HXVMMp3nsCpOOtYNE7Htc0eTDYbGcwxkdQeOr
AoHk/KxgiOPTPoUSMQDuyS5K/egfkrNQPGD2BpYGyicZNZJwYEvYRc1ymZ1JxIMMllvR15SY7oCR3029
vMXoTPLieg9r++PtpsQ8CDLeZYr+9f+MXOthrU3fLO+sjMPUs7E6Pd0ZSNI7yr0r5HJFfb8Bf/2gi4hp
+/UAAAAASUVORK5CYILRAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEA
AK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJjSURBVDhPlVP9S1ph
GL1/6gzXbMsiolE/hBWI+ENtOvsySwuD5leaOsNyS0VcqDms6Z1au3X7IhFELA2U0/s+w0D6ZV04cO/L
e85znuc8V6hUZFxf/0WxeIxkMga7fQPT01OYnJyEVquFyWSCzWZDPB7DyckviGIOslzG3d0FGFcQzs4K
8Hrd0Ov1MBqNcLvdiEQiiMViODo6wuXlJZrNJur1OhOJw2q1siLryGSSuLo6hbC+bsXKygp2d3fh8XiY
mJfew+EwUqkUzs/PcX9/j3a7jVqthnK5jM3NTczNzSKR+A6BW+WXQ6EQnE4nIRAIkItsNsuqXOHx8REP
Dw/kJpfLkTuNRoPV1SUIOzse6tPn8xEcDgdcLheJptNpSJKERqOBarWKfD6PaDRKrU5NaTA//xk0A5vN
gpmZGSwsLMBisZAgb4u74U4ymQwRFxcXMT4+zvCRyH6/GzwFoVQ6ZoOxYnl5mWbAiVzAYDCQGBfl7yMj
I1Cr37NCBuzvf6PkSIBDkkRsbKyy/qLgT6fToRSCwSDMZjPGxsYwPKxmgp/YnT3Wmvgvxq4AB49lbc2M
g4MfNPlSqcSc2TE6OoqBgXesBSMj77Nk/hD5hQCHLJewtGRiFvdQKBQwMTGBvr437OwL24MILi6Kz2SO
HnIX4XCAEhFFEQqFAoODA2yI4Z7KXfR8dHF4GGe74MfNzQ2USiWGhj6wnfj5gszx4oAjmz2kraxUKlCp
VDT5VwnwPecCrVaLfiqV6u3rBG5vJWxt2aHT6dDfr2SbN8u2MvH/Ahynp7+xvf2VNi4U8j3n3gtZeALA
Uv0zVsZhhAAAAABJRU5ErkJggvkCAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAg
Y0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAAlwSFlzAAALEAAACxABrSO9
dQAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACWUlEQVQ4T5WQ30tTYRjHj3SR
1EVoXkiZEzNG4F0YeBGV3QX5BxghRIUIW6BEqVRgWgilLJF+kAmRsHJjarkUS6emW0lW4rQl46x55na2
s7Nf7nh2zuzbOWfnIgkrP/DlfZ/v833eFx5iOzAMkx+NRsvVcnvEorGzGxvCT06gIQripM/nK1Fb/4Zl
I6eEdBK9X47AMLMbdm8r0ul0yu/3H1UjW+N2u4tFUUyYFiphsOeh05GPjukcjLmbsJZYG1NjBOHxeHat
UFQFSZI5qiWTxXH8xwnyDtqm8tA+U6CobSoX3ogDq6uBR0qK9Hi0/HqKouMuCOtiPEDTZbIfpJkmKjqH
Zlsu2t4XKWq27cVS0IogHZqUItmE07mo4ZI8NeS6jqujuTDOX0SKE+KLi0uV/Dov3psuwy3bQbRMlODm
2H6MLLeADUdcVVVVe+RPiDATfTG+3IVrowVSQIvGt4UwftVDTG1g6FurVBcp/o13h9BpPw0uwXN9fX2l
yrCMn6L7h50dqBs8gAarVlH9q0J0Oy7hyuviTV6AJTE7O1urjmYwGo2lLBOLPHfUQ/dSg3qzFJZUp56y
9JJvnTdg5Qclb31HZvI3TGZzORuKx57Y9Kh5poGuV7tJDaZyxCNrQs/TnsPqyJ8MDgwekx5Jdo3U4vxj
DWq6tYqqH+6Dk/yAuU+fb6vRrbH0W06EQwnuruUCzhmKUH2/BO0DNQisBr3ZEmrs75hM5gqGjvEGy2Xo
HhyHP+CH9c3wGbX9f5gtlpPL38kFn5cOjY/bGiUrK9PZHvK2d2auW0EQvwCWUIP6O4nZEQAAAABJRU5E
rkJggt0BAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAB
lElEQVQ4T2NABv7VpyQ8CvZ/tUpYLAYVwgb+Q2lM4Fl0cJVr9vb/VhHTS6FC2ABuA9xyd95zTlv/0Di4
5yVUCBvAboB7wQEnoO3fbWLnahgHdP63ipwRAJVCB9gNAGo+7ZS67pZZ2KRpJkHdX8zDJh+ESqEDTAOA
mplds7Z/BNISIL5l1ExfY/+O/+ZR07TAClABpgEuWduOmYdO/GEZPjnFKmwGl7F/53uQAcb+7RehSpAB
7kAkEmA3YGpE/tqpoZk7p0cXzZ0aVbBrorvvxR5jzRSoNDLAbsBkz8BtIHp2ZIr4VE+fF7V6qvfAEpgA
uwHT3dzAqW9mUPzMOn3V/w366mFgCQRoBGJvIAYZ4ArEXUCMCuZEZDtPcvf9X6evtgoqhAyMgRikGYad
gBgVTI0uetBlovmi1VxHHMSf4uioDZZAgC1ADNJ8DMxDBjPCs3v77e3+dxhppIL4kzxtRbuMNZaCJREA
5gpU26e4+2p3GGt+KddR+lqrpza72VBtRaWuyqtqXZW5UCXIoBpKUwMwMAAA1uqHbWt/5s0AAAAASUVO
RK5CYIJPAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAA
AAlwSFlzAAAOvwAADr8BOAVTJAAAAfFJREFUOE+NUktLHEEQ3oPXiAgBD4Lg9qyy7swIgSQmh8F1ZhEE
c/Kk4EmS3V4DIQ9C5tGINw+CKMiCgg8QITfdnVkPokjIXTyKvyLkgbDRr8pZ3NlDzAcf1VVd9XV1d6UI
Y6XIzZdrk7aMClgvjL4+NMfnw8eOjLbtcn2Ok5K4ie0dULRlvwmf2aVoGuv3FIPYNfxDiEhOSuJeYExG
vl0KfyL5nItAq1TtoT1b1jadcviOE5No60BGv8lC5MB5ezTEQQB+xSnWPsVuK1o7CNfR9g/YPfAS3azE
WxAI1x4UGJ2vjkDgtFCuD9iyfk128uO3R7RXkNHywwLF+giusE5ruj8HAZzewAP+dWQIRsk7t7+BpU46
yOLrOsmqbLab7D+QFPAM4Xm5zCvfSBd8QyxSLDDFtm9qDd/QdjkpiaSAr2s7X3Tx3DXSM4GuffDNzEt3
WJvlPUOsBWamfRbuBVCswD+erl3gNDqxobJ9PAcEdHIMNmdhAZwAScABl0AW4cfDVWrK6M9xEFBWXxcL
6qI3Dj0BqbjJPBVVkPQL3Pd0cYWWV7HBCEztazAspmK3iSpIxd/Zc4fSL1B4pnKZQT4NluJ4wA2Ifeak
JJpd5NkjASRWaE0CZANDFHH6TSsp3gI3tndQlsVzoJ4KnoP/Ryp1C1Eew9boXTQeAAAAAElFTkSuQmCC
zQIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZ
cwAACxEAAAsRAX9kX5EAAAJvSURBVDhPnZHdS1NhHMf3F2hXQVoRWMii1jB8IcaKotKcWdF6UXchBmox
50W0SLSCpdJcxoRpTZxuEnuhpCWaU7OknBBlL6ajIHNZ2TKbc21zz7Zv55zcweHoogc+5+LwfD7n+T2H
A+C/YZZ12AGae0PjDKaHL2GwjkKpteZEN6YJj3K5Wfm+lTINGwiSUAz6+3ZkHDpDw2cCgsPhjH2nwN8t
xjbBcWTlVnL/GdDc6Yft2TgbOXDinPBgQfXPzEJpQmautCa7uNHLBroeja8KNOl7ozIDvTkKP7tsU15p
S4QNmPrGVgV+eXx4+84B28gk0nNKYgI0ojIt845ZBqs9Rv4y44RFf4NFXCxjNseDWa2WJ6zs8wcZaW7G
isB8Dxan1cshFT1H/EgzdWFRmT46LZg7VDC1N8CoU8LYpoS5XYXO23UwtNRC33wNHRoF1HUXmN/MoS8s
Ks/OLTIB+IcRXBhE0NMP4ulC+Iceka9qRD4qEJ6UI2g/CVWVhPKXA7Ts+OTC5JSL+moD4HtMjdBNYQSZ
bUFouh7kvRxLr8rhHy3C2K11uCITETZA33SUTm09dYIBBOdNlNyKkFNJyZcQeH0W3pFCLA7mYaQpCVKJ
8G+AfqxER80Hbw/Idx1CnxtBPlRj6U0FftslcA+I4H4ggO16Mk7npsUPaG9eBjx3EfmmQXhKATJxHoHn
JfAOHYG7W4gFyw5Yrm7A/l1b4gc0yipgXgfXi0o4n5ZhorcIdmM++pr3wFy/E21VqdBd3IhMXlL8gLpO
jqbaClIjO0bKCwREnL2V7E1PJmmpiYSXkki2pyQQ3uY1ZP3aRD8Azh+8H9cKYg4VBwAAAABJRU5ErkJg
glEBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBI
WXMAAA65AAAOuQG4Bhe/AAAA80lEQVQ4T6WQvw6CMBCH8b8x0RjjCzjyGj4CIysjY0cWB0ZGRtaOjoy+
giNj1443Mp49uApqVFJ+yS+h9L4vl3q/okDNz3KPGtSRfw2PhQuVYVCeSDLjq/8x8LKBdYaiirAEaSUr
HvkeAy9aOG/gREWY6hjLWmJ480ly4NHPGHhrYQITFTdwqgUmEOG1Lqxkw0iXbu13OMYcEkzBfJv2JGtG
28h7NiFBvwRnIJ7r93ut8h2jr0HEqemmERj4KSh95JFhIQHBtLa7oLaPN0IgIGwfzkVA6wsI3AW0fqyN
ABwFQofjBARKrovgQpAtnfmqF897AFUoF4SZQG1wAAAAAElFTkSuQmCCVgEAAIlQTkcNChoKAAAADUlI
RFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADrkAAA65AbgGF78AAAD4
SURBVDhPpdKhboRAEAZg2mt7F5Jemsu9wMm+xj0CEotErsScQCKR2JVI5L1CJXLtypHI6czcbLm0JaXw
JyNg+b9kNkRTOdu3S9q9Yxh+1qN5oQK20KDVYUSP5oUB41PMfSLQIqCAbB1QQo4GCBgWAtVgCEjXAbxG
O9iFABhZo/sPgIiPNPHtDowgswD7UT1w6X5Kn4/AlX6ou2n7eq/VWxy4Fy41vsbCZTS5ADw1FLIKj1wo
AR7cTqtjCHn9HQmX+VWOtfIzhDwHxPSMZIKENah80E+nM65TCdKBxaQ7cXmrn/wdQp4EcVUob/RofgJC
5aO++pYo+gSp3BeElbvW3AAAAABJRU5ErkJggvkDAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAA
AB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAA7AAAAOwAFq1okJAAAAGnRFWHRTb2Z0d2FyZQBQ
YWludC5ORVQgdjMuNS4xMDD0cqEAAAN1SURBVDhPbZNrUJRlGIa/JXGL06KyoZZCA3kgtXIcKmYKRyVT
bARJ2sXlGCuCKCwU6bIsISgeQDJJA4IhYHEBUSIJGJihIkhEflAzkD+IoS11OMTADOeBq4/PGc2Zftzv
v+t63vd55xaAx/lzeOC38o4yjLUniSqPILj4Qw6XhmO8oae6vQrLQwuzs7NW/2WkY35+3qrrjy4yGlI4
05zKuZY0MpoNpDYmoa9PIL4mmsiyEFIq9HTf6/56ZmZG9pSgs+8OafV6vmzLxtCQSMyNMKKuB6OtOsRH
FWoizGoizUGoi/2JztfS0d3B9PR0jiQYGh98JrPpFLltWSTVHePI9RAJjKwMIkKEw8oD0ZQFoCrx42Dx
++y77ENy0UnuP7gv8iiFyttm0hsN6OviOVylkcBQEWrubWBhYYGzjekEFPmyv2A3vnm78Ml9B2+DF00/
NzE3NycT0m8ZOd2cIk2OMKsIvRYoXtWP73/9ThKk1iSzTwR3X9nOzstv4/35m2w1bOZ0fjpjY2OCEFUS
Lk5PIKT8INoKDZd+ukBWcyZ3+zslQfkvZaTXG0mqSeCN86+zNXMLrxjXE2zQMDIyIhPUVwLQiVs+VHqA
WLNWgv4vf//zFx6p69iY9jLuKa7sOfYeQ0NDMkGV+wFHKsM5ULiXwKv+1N25RW17Lf0P+iWwo+c2N1tv
UtRUyNqPX2DNidWs1Cnx0+1neHhYELRfhaP5JpC9V3fgfeEttnziwbpYN0wtZZIgPCcU5wglSq0TzglK
nBKXo9A6EJMRzejoqCBkVZ1nz8VdbL/khVf2Nrade5VNn23gWrvpkSAvlJVJz7MiQQTjHLCLtcVRraCw
spDx8XFB+PHuD7xr3IGnuKDXzmzC49R63JJd8EnbSXCmho2JG1gWr8D+uB02R59Drl2Kp9aTzq7OR984
NTVlKKguaNms88DN4IKL/kVWJznjdHwZDlH22MXYYhMrgjFyrLXWuIe5k1eax+DgoNSJxR4IA5YB4cQX
n8pcI9egjFvBcp0jDnH22Mba8OxROUujrVkSuoRVqlUYLhro/b1XJj7vSRcWMzExIZi+NVn56nx5KcQV
xyAFcpUchUqBq9oV/3j/hyXmktq+vr7HRXpKsJjJyUmh516PzFxrluUU5dhk5Gaszc7PlpmqTUJrW6tg
sVikGz9hEP4FFdR7LL8mfOEAAAAASUVORK5CYIKlAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYA
AAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwAAADsABataJCQAAABl0RVh0U29mdHdhcmUA
UGFpbnQuTkVUIHYzLjUuN6eEncwAAAIiSURBVDhPlVJbi1JRGPUXhcd+QQ/RQ5ehh+Yh6C2iG4TN5GhG
WiMH1MYHRbxNKgleXhQV0WR0zHtkKnlBy5SOpoj4G1Z8ew6K6Dy03s63vrP22msvyf9AaH7B4GsKf3vf
IY7WSKVSMBgMaDQajKzX67BaravFqluBSeAJBPd9tD7cQOaTYS1SqVRQLBbh8/mQyWQYUavVkM/n4XA4
2HfeeA/zEykmeg5/eA7uw9trgWq1ygSCwSBCoRAjyBHNIpEI4vE4zvk9CLwUv485/NTIcHpway1Adulk
sk8uLBYLkskkWq0WwuEw/H4/Mu9v4peWQ/cNhx9KDqeHd9YCBJPJhEKhgHa7jU6ng263y37WarVs8ezt
dbRUUjQUMnx7KcPHV3ubAgSz2YxSqYRer4dEIgGdTrda+vz6GmoHHKovZCg+vwr30d1tAXJAeQwGA0Sj
UXZ3kZKk+X3kn0lx/phD8uEVeI4fbQtQDnSF0WiEdDqNQCCwsWR/9xRn/hPo5A+2fyaQ7eFwiPF4jHK5
DKfTubHo8XjQbDahVqt3C1Da0+kUs9mMBUmZiBQDvRA5vFTA5XJhuVxisVhAEATWTJFi8Hq96Pf7lwvY
7XZmnwo1n8+h0Wg2Fo1GI7uiQqHYLUDdpwZS+6hcKpVqY5F4OkCv1+8WiMVi7Pmy2SyrNJVLpBhsNhsm
kwnkcvluAQK9Pc/zoDzE0Qq5XA5KpRKUxcVEIvkHnImwRU2HfbEAAAAASUVORK5CYIJTAwAAiVBORw0K
GgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOvAAADrwB
lbxySQAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACz0lEQVQ4T3WPW0hTcRzH
fbDEpERzK0wxY6ZZmYpR4LW84PUU3sjwslnelqKlVggZGQ5xRqUUuswUdWW6tNQinWLq8LaZt9Qm/R6j
wIfz6Nu3/9nWQyw/8OX8OHy/n53ZeBd3i85Ufay6pNQOSZ9NUFHL1I5cNY0i1RQKTZk0PfObJ3eyGieI
U2r7hf6JYrXIRkBS2quoVM8isHYUHg/G4VYzBa/6efg3LiNYtYnAplX4NCzA/eE0PGvG4V87hsI2HY6X
9TWYBJ5FXcqGKUL54DpKNEu40fsVt96tovL9Bu4OGVE+sMHerUDauYirbfNIU80ir0MPSbFaaRIck3cp
lZME6QeCbIhQ+IlwbZCQqSGkqI1IaP+Giy0rCGnSI+jRLHwV00htnoF3Sc9jk8A1/maUtN3Aj60RmqYJ
jTpC3QShYpiQpzEirXMNUc1LCG5cgF+dDqVqPcIUn/kj8eXRJgHDThQm5VJeGPj7Y4Qc9uuFbJzdT0h/
bQTXsY5olSDQI69rESEKLX8oQsYJO/PcjEmSrDLwVVpCEfsb+UyU1fcDqd2biGtdRa56BaH1X3hxRK7V
+C92YiZJajHwFaMEOZPkDhCu9GxB+vY7gp/MbztGFuw6/guT5HBJ7EtKRggF7CukTJKmHMFAdNivtexE
rORw0EcGjI14HfSxbKxgkmyuskePjN4tlL7SYSYhBCSLA50VmyNLwCIX+lN11MnJsrHiQFnXHJLfGKG+
Uw2SxoKCXNhYZI5w5yZiROJ829K3wiGvYw6pPUZ0yMtAif4gon+TGIBhiUu9pW+FQ+pzHZ/Ra4RCfg8U
exoUcxIU5WuOcMf5QyMRVVv6VtiKw2VJUU9n+POKCRiC3H5TejgoLcwcds+fk2zHONp7Wfr/xe7wheuc
e37ry0xn+8vaQI/F5Ug/CBHuAtH+WNbZY67uji3LPpa9LK4spywRbja2sfkDNmCxwsesQzEAAAAASUVO
RK5CYILKAQAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAA
AAlwSFlzAAAOwQAADsEBuJFr7QAAAAd0SU1FB9YDGg4REtpJ5+sAAAAadEVYdFNvZnR3YXJlAFBhaW50
Lk5FVCB2My41LjEwMPRyoQAAATNJREFUOE9jGDxg1uzpFxoaGv4Tg3v7u1ZDtSEASIJYAFIL1YYAMAM+
fHiPF4NAfyQTDMdAtaMacPz4MawYJAfS+O7Vsf/n1xaC2VDtxLkApOH96+P/L63J+r+wOfQPTgOw2Y6s
eUl7OJgPxMZQ7fhdAFL89tnR/+dXZf5f0ByGqRkEcLkArPnpkf8n5qf8X9ACsbmzIQvmdEYojd0F79+/
+18Qbfn/0Oqu/4tbQ8Gan985BYtGkGZUA/79+4uiGaTBx0ntf3a4GZh95uB6oPh7mAGsEJ1QABL89esn
3IB3796CFIE1bl457f+hQ4f+nz596v+jR49gBnCANcIASBAZ/Pv37//379//v3z5Eqzp6dOn/1+9eoXs
AjaITijo6etcDJIgBnf3diwGakH4n3zAwAAAQHL8GeIdtyEAAAAASUVORK5CYII4AwAAiVBORw0KGgoA
AAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29mdHdhcmUAQWRv
YmUgSW1hZ2VSZWFkeXHJZTwAAALKSURBVDhPXY7fS9NRGIcPhQzzLikJuhCS2UWlTWOxcsZIHG3M/XBq
/kpRw8E02BRUlmWBmEQEpeGFDBd4IStLKZCizSZrpvPrzKaoMZnDi9V24x/w6fsedVhfeNh7zvs8h7Gy
sjKm1+uZ0WhkJpOJlZeXnzKbzUqRCpGmA2hW0o4ccqmh9ugDEnGptNvtXYFAYCUej2N3d5dDs9/vX7HZ
bF3kkPv/AxKDwaB1Op1jFLx+t4bOp8vQWIMcml2TYcRiOxgdHR0jlxr+gE6nI4rFhSsSiaC+ewFVPZto
f55Ex/Ae7EN7sD5LoKJrg++2tjYxMjLiooZaptVqT1utVsf2dgTVnQE0Po6idfAPantjOPxovjsQF3/3
nfX1dVgsFge1TK1Wqzwez+qQax7Gjp+407cDvW2dc/gdnqsdEWjaQng59g1TU1Or1LKSkpJa+lstDi/q
H0ZQahE4qubvkKonca7Ejdxb75FT+pajbJjj7uLiAqhlKpXKKggCrtV8Rs39X7jRNA+Z+QvOaz+K0iKC
wSByNR9SFFR6uOvz+UAtUyqV7STKK2dQZlvDJfMcLph8HIrD4XDqTMiq/Nz1er2glikUikZBWEadfQaq
1h+Q1YZSUByNRv+5k1UvcHd21gdqmVwuL52YcK8NvvKisOoriixRXG3e5lCcSCRSZ+KiyYOBIQ+cTtca
taywsPCMwWDsX1paxc2GaVypE1B8L4mitiSPk8n9mbhcvcSd+fll6PWGfmpZfn4+y8vLU/f2PnKHQpu4
XulGjuYT5M1R5N8OcmimO9oJwgYcjj43NdSyrKwslp2dnS6VSmu6ux9MhsMxPBn2Q9f8BicLhjg00104
vANyyKWGWvqOiZyQSCRnMzMz6xSKohfj49NbGxu/cRS6ox055FJz0LLjIpkiUhFZWlqaKj09vSUjI6NH
ZOCAHrqjHTkiufsNO/4Xs7UWcTgSh1AAAAAASUVORK5CYIKCAgAAiVBORw0KGgoAAAANSUhEUgAAABAA
AAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpg
AAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAB+ElEQVQ4T2P4//8/RRirIAxP3vItZvLm
rzvm7f76aPnBr0dWHvw6ZdWhr1LIalA0IOO+DV93APGf7nVfnzeu+PK4fsmXO3N3fn0MNOATsiFwDd2r
Xv1fduKrAZi97uuy/o3ffqdOevfGpeDEb+vU7X/ME7Z8d6+4+3Hm9q9vgAbcRDEAKMDZuOTl/3kHvl6t
X/G1YcKmb3/iep7/cy04/t8uY/cv09g1x13ytz60jF/+J6zj3c+lB77eRzEAhItnPv+fNevz/8I5X/5H
9nx8YZW85a9F4oYfprEr80HyAbXbVQwjFr9wLb/9vmHplz0YBiT1Pfvv3fTmf3Tv5/9lc9781/CetNok
ZoUjTF7BoY7ZLuvQb9eyO68bVn45BBOHGxDU/PS/WfH9/55Nr8AuSex59L9u8VtLmDzQAFa7zEN/veqe
fWte+WULTBxugFPF4/8ORdf+W2Ue/28Sv+2/YdTa/xo+U4FSEHmzuPVKtpkH/wW0vP5bMP1xKUwcbgA6
BgUsMl/da5K7a9ntP2mT3//r3fCVDSYOV0AIW6TsuxjS8eFfWN35XGRxFEXYcFzfeyWH/Asx/i0f/vlV
XvmmFTCbEVkeRTE27FH92Nm/5dMvj5KLP42jVnmhy6NwsOGo3s+RziXXGk1j1olik8cQIBVjFSQe/2cA
AG4MzKZBtgOMAAAAAElFTkSuQmCC1wEAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAA
AARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAF5SURBVDhPbZOtloMwEEZ5DOxKZGVt
ZSQyNhKJxEYikVgkElnbR1iJrUQis3OHDgvswvlO2px8d34yZN0zpnZqUhxrVTNUqR5Cqnufqs6n0JYp
RKfy8ZHKZpOr76oM8/Q9qobvXtW/ul3d1KZrEAt0AqzyHp91lZ2DlnU5iSwVAA2Amj4QNfEaQN6j+b28
fzMAQNo81Rh2+b7cI/tYngSAHj2qW8ogAeCw65xm0zylRpGX/xiqqVLgLYqhys4AaqFZPEAe3UOBtZjC
6JOTzvvhbEbc0AYQEoC9XhGH2QOAWQ8ezPN73gChkH35wVWZWWv+ROT6KIPSOBz6oALA/t1/pYxB4aB1
GHM9SRNlzZs8xVejwwQEQzvGC0AmjFnYI5fFSUDoh2WC6QRgPLlKy8DqNBHxCgVQtnf5naeMuTYAhiNk
XmY9/J82gDQRALNgpj/m6/qRa2+pcJIB4wgA2VdoXyKiVhNREWbWHWDivm3l2kw0y0TdpsLl6Qdca7yy
lAsocAAAAABJRU5ErkJgghIDAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FN
QQAAsY8L/GEFAAAACXBIWXMAAA3VAAAN1QE91ljxAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUu
b3Jnm+48GgAAAo9JREFUOE+Nkl1Ik1EYx3cpQQQhXnXR6iaDbrsJAoMSp6K0bJttaptWUlamTBqhZq6Z
GfNCsLJYy9TI5bemxebcRiP3vS6MGcu+1tiCuU3mdNN/73sWe5GKfOEH53nO8/zOwzkva39h+/RejgLP
WKxt079vJzSHD6LoqOAti2revN1vRyg7e1toTx6AXSqFpbgYqqwdoAXoGHTBSpn/x3j+HjiHW/CluwoD
GRlQsjNTgrsvnKC/RDKBH37fX9Gqr8E5oUB45jz6arLQLcoBmyNPCdoGfgsSCXz3ffsD7dN6OMbkCE2d
hfpiJgy9tVC+fA+6lwjkfQ4i2NjYwHI4tAXXrBq20Vv4OS6C6sJumAZkpLZj0M0IbvbasbkJrK+v4aPX
swVVMwdzyhz0VO3CjKoO4cgyqW177mIEjU+sGDd/RnQ1gdhakrBKEfR9Aj/vEB42HMGH+TGSX6FqJt99
RSs1dVpw/dE8hIpZFF7qBE8oRAmPSxDxciHk5aVjQVk5Tpy7hwLZBJrVNkZQf98MgVwLnqgMIyPDsFqt
sFgscLlc8Hq9CAaDiMfjsNltEJRX4FjtEGSP5xnB5S4TTre8Iac4HA7U1F4la3GlBIFAgDRHo1EsLS2R
/PG6YdQ/MDOC6s45cJumyabb7Ua5WAx+4xCJY7EYwuEwFhcXiZzO5UpHcaXLyAgk7ToU3Zgim3RhhUSS
FoRCIXg8HhiNRuj1epLLaxhDtXKOEfCap6gJXpFNv9+PugYpWUuqKskdGAwGaDQa6HQ6kudQAnG7NiVg
F9zpzOYqV041pSaIRCJIJqnnWolSlxfAwsICzGYzTCZTeoIzra9R0jiZElA/FS3poYOSUuYJ/wWXX0oa
adj5bfJf3+KmTV18XhwAAAAASUVORK5CYILoAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf
8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+S
X8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAACXklEQVQ4T6WR60+SURzHn7Ve9SfU+173prW1rlttJl7S
akMzRJzOpGgi8wIhy5BSSe1iLbEZMhfoIEsdI6Y1Np1BdvGydLklkJcSIUEJE/h2zqPoGHNr9du+z875
Pb/v53t2DgPgv5TQMFg+7O6yfio1DYxjJxn7x8jozgDx+zF3gKzjau13GM45H7rMw0jJrYxyeBX7STse
QMz7iBCJRLHo9cPm+Myq22qHvmcIjnEXckQqCvDFPHEAXa+j9euslyy3iyYvB0KYmF6A0WIHSabpQvIr
HqAxDh0gQpiku+Y9celm2yjsY05kFSuRnicLqTUvcL/dTGybAHnDs2xq7rdP0SabGkue96xgasaDFr0V
qXwpFI0deGIcRGqejI4yTFmtLl31qHtW2/MOjw026F6+xT2tBTfuGlBSrQFfXI+MfDmSL5Uj+0oNmtp6
IVFqkMyr2ADcefoK/pUQ3STUejiCYGidPckPbxDfvgcgq9OisLyRnEBKRxhG+dCEnjcf8dzqgNb0Gg/a
+6Bq7oS0rg2iqmYISuvBLa7GWYEMSRcluEp6WcKbOHFetAFQNHXCPbdINwnlX12Dc34Ze8g9U+3SMuCX
1CKFV46DZ/LpCMNUNeh9o5MzIHe2VXS9FFjHpHsVgxNe1ty7CThXIMexTOE2QKHW1qhbjEHXYgjelSjm
fkYxvRDB8Jdf6BsJoMPmY40xneaWsGaibhZQJLl1RHq7bWlgxM2+7d9oE7CXBdCPRNl6PLNQgTTBdXBy
K5GUU4ZTXDFOXriGoxlCHE4rwiFOQcxIdZn6tgD/LjB/AIOf8bLFGE59AAAAAElFTkSuQmCCUQIAAIlQ
TkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACw8A
AAsPAZL5A6UAAAHzSURBVDhP1ZK9S1tRHEDfLrQFXeJgBONgFCMhEVQkak0gviGBpJAlBTs4OFTI4FIc
HAQHwUEQQRD/BelcCqUUKaW0dG0IIiGEEELy8r4/Tu9L1BDoXvqD83twL+fc5Un/flQVhnFRlD7ttkur
ZQtMmk2dRkOlXleo1dpUqy3u7lv0Ao/jed4Truvj4jhOD9u2sSwL0zQxDANd16lUGoPAsOw+yX8TNU3r
fcvlOlI6DTc3HtfXHldXHpeXLhcXLufnDmdnNqenFicnJsfHBkdHOoeHGgcHqjjXkKSaQHLZ3/coFDzy
eZdsxkWWHVIpm/V1i5UVk8VFg4UFndlZjelplcnJLomEOgiUSh65nEsm4yBv9eW1tWE5/CAHg13GxxVx
5weq/cDeXl9Ob9kkkwM5HjeIRIQc1giF+nIgoDA21hHhrpDvkd5LEr93T/iVLvEz+ZYfiV2+L+/wLbbN
10iR23CBL6Ecn4MZPgVkPo6l+PDiJbfR17wTrmSK5ezsYG1uYiUSmMvLGLEY+vw82swM6tQU3YkJlECA
zugo7efPaI+M0IlEqPgBXSx7+w1WsYhZKGDmX2Fks+iyjJ5KoW1soK6u0l1aQonH6USjPbkzN0fZD6hi
KYK2oCVoPtAQ1AU1QVVwL7gT+K/64iP+3/xfjyT9AVST6hre5zQtAAAAAElFTkSuQmCCEQIAAIlQTkcN
ChoKAAAADUlIRFIAAAAQAAAAEAgDAAAAKC0PUwAAAARnQU1BAACxjwv8YQUAAAB+UExURUwtAIxUAItT
AI9WAI5VAItUAP+aAPWVALlvAPCRAP+bAMl4APeWAPmWAIRPAAwHAG9CAPOTAIBNABMMAIhSAPqWAAoG
AAAAAAQDAHFEAPSUAPiWAH9MAAgFAPiVABcOAAUDAHhIAA8JAAMCAAQCAPKRAAcEAAIBAAEBAPWUALv7
++UAAAAJcEhZcwAAFrcAABa3AVqLeyAAAAATdEVYdEF1dGhvcgB5dmVzIGd1aWxsb3XClrWlAAAAGXRF
WHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAABx0RVh0U291cmNlAE9wZW4gQ2xpcCBBcnQg
TGlicmFyeZjHSPcAAAC9SURBVChTHVDbFkNADEwWoSxFVWxRVK///4OdyEMyM2dPJrNE7Dhih+IYkCgR
SbNTLhiFF0nISVmd60bEt5euFEd87Xodwm2cZu2rO1NcLKq6hm3GeGQR8b01uD/RhvrF2OGnNwhqDU3u
IMi4fYx/w0+wFMIvfE34bOMh5E1Yjau+J2+2r3oAee5ocwvbKHsY3I5nSxHDtup1nsZbGLTvrmZbdpcW
KZr6XNnpCOeLFNnyU4aRHPGR2+LjF5j+WSgPtRCv+toAAAAASUVORK5CYIJVAwAAiVBORw0KGgoAAAAN
SUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAAYBQTFRFTC0AjFQAi1MAjVUAjlUA
ilMAi1QAj1YA/5oA/poA3YUArmgAmFsAl1oAp2QA4ogA/5sA/5kAq2cAg04AynkA5YkA3oUAt24AhlEA
w3UA2YIAhlAA8JEA75AAkVcA44gAomEA95QAiFIAtGwAmVwATi4A3oYA/50A0H4AXzoApGMAwHQALxwA
lloA54oA2oMAb0IAhVAAUDAAv3MA+5cA1H8A54wAbkIAUzIAAAAApWMAtm4ABQMAOyQA8ZIA/pkAaT8A
d0cAgU4ATC4Ak1gAbUEAl1sAunAAz3wAtWwAekkAWTYAgE0AZj4APyYA5YoAYzsAnl8AqWUA640AxncA
wXQAMh4AQCcAh1EAZz4AGQ8AklcA4YcA9pQA/5wA9pUAZj0AIhUATi8ANB8AVDMA0H0A14EAlVkAXDcA
ckUAcUQAc0UArWgA+5YAdkcAkFcAr2kAo2IAqmYArGcAnF0A34YA5IkAvnIA/ZkA+JYA7o8A8pEAvXEA
9JMAiVIAgk4A2orP1AAAAAlwSFlzAAAWtwAAFrcBWot7IAAAABN0RVh0QXV0aG9yAHl2ZXMgZ3VpbGxv
dcKWtaUAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAHHRFWHRTb3VyY2UAT3Bl
biBDbGlwIEFydCBMaWJyYXJ5mMdI9wAAAP9JREFUKFNjYGBkYmJiZmFlY2cGMhgZGNg4ODg4ubh5ePn4
BYBMNgYmDkFBIWERUTFxCUkOQQ4moACHlLQMUFJAVk6eAywgoMCiKCgoyCGqpCwAEVBRVVMHqtDQ1IKo
UNfWEdLV0zcwNDIGqWAzMTUzt7C0sraxNbSTsWdiYJFyUHF0cpZ2cXXTdWfxYGZg9/Qy9Pbh8vXzVwgI
5AtiZGAMDgnlCQtnjYiMig6JiQU5LE49PiFRJyk5JVU9DmSLQFpQekZmVnagT06qWC5QRZxunmE+D19B
YVGxZ0kpMwObQJl0eUWlvmmVQHVNYS3Qu4yMrIxsbCwsjEyMdfWMDABGfShTAbygpwAAAABJRU5ErkJg
gqYBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAAGXRF
WHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAThJREFUOE+l0s0rRGEYBfCnSFOTr4WPGRZi
IWrohtiMHd0/wEZmZanZSZrNlCSSpNiINStLMz4WFrLRFYmixM5XSYkmdXU85zas3nTfTP3mvZ33nOku
RgD8izG0YQxtGEMb0jF7Ln0rd9K//uCq1eTavTjzl0a8Y4ddbrgNvnqXbxl41L14bRwT73563AQ/kJg5
44O3cPUFnmH07BaCLrfSkjn0lm6AqRMfcxc+pk8/kT0uIHP0jsmDV4zvPSOdf8Ro7glDuRcM7LyhbusD
rfs+uJVYOu/Wj20Hb8AzDL4BT26lLJ6Q6GDWLU9tehTtGpa//PZ0wy0/laqxpHMkVZqc2NBnR7WpJtXA
O9Ws2pXDDrvFnFuJqApVq+IqpmpUlWJO1cWMd+ywyzxi/HPYMIY2jKENYxge5Bt65EUqyhfUrQAAAABJ
RU5ErkJggpACAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEF
AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiJJREFUOE+l0V1Ik1EYB/DHJhXF
ZpYmZkQUwYyi3NoUB1p04aluJS8ssuhDKAqaka4gtavU9WXhBrmIoF2UKBKjBVpaSLCzoNStLFk07Wv2
IZYuWTw9z7stXBkUHvi95+Gc//nfvICIMzLt4f+A7BoJ6+v6wXhxEEz2ISh0vBfEXtD8Dpjh/IsE+U2v
oeDKW87Z/yywBQWVyBjY8NtjlnspwDkLZxILLrwUVCLtw4i8688+h5wGPz9KJqlES4roziquDXlpd/0q
WHemT1CJ8rjeH0Ge43QNPq+pceBJkSPgL7n15pW5e2y03P0xRHdWpUBb7RFUIpuCiEc7v6KlZxxrH4ex
xhvGahnGU54JPPloAisfjmPF/W9Y0TUWyT/X17u61mtQClYc75aNgR9Yfvtzgt1tISx2BnGLYwA32/px
0+WnuLXZF8mrl4P0pmrViZ7oX1h65K7IOuyWdb5J3N/+CQ/cGcXt7i+4sX0ETa0hzGv5gEbn8He97dnI
SktXL2Wrlpk75i0/di9aQAeQvq9NpO1tlYfkJK7piCDPU3iIi1gpZ8g86AIqgAWmsmiBJncnpGw7DZod
TqEuvSF1DxB5Ty27CQv3tCTgnNpYCvGlFMSXKiMbZhdWirnFVyVTLdbGbv6+4gVJZA5Rk3RVzq4Slcl8
nea1REf0MTxzaxbh7KypBcmES+aTFLKIZJBMsiSG5zSiIZxNUgr4MxPTHv47hJ+sAgt4WQeb8QAAAABJ
RU5ErkJggrYCAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEF
AAAACXBIWXMAAA7BAAAOwQG4kWvtAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAC
NElEQVQ4T5XTf0hTURQH8GOTimIzSxMzIopgSlFubYoPtOgPb/Wv5B8WmfRDKAqaka4gtb9SV6aFG+Qi
gvZHiSIxWqClhQS7C0rdShuLpv2a/RBLlyxO5769pK0FduDz7n3vnvP96z6gSiLJZBFZSlLICkSE+RAl
AsSwmqSrcveXqiTTzUTNicyVKiMbFhZVs8Ul17mgWqlVTv5dcoAmbx+k7D4Pmr0Opi67xXWPEMWaWn4b
lld0xBB9amOZMq4EZB13QfqhLpZ2sJMf47O4sSeCYv8HN3ESC/UZMo86YY2pB5ZJ5dGA1SfuMwrhDd5Z
PNz9GY/cm8Q9rq+4rXsCpc4Q5nd8RKNj/Ife+mJivblvkHprKGDJ2lMPogHrTvfz1sBPrLz7JcaBrhCW
OIK40z6CO6zDuP3qc9zV7o3kN3I/zdRsODMQDdDWull2HedtQcSTvd/QPDCN9U/DWOcJYy0P4zn3DJ59
MoPVj6ex6uF3rOqbihRcGhrMqfcY5AAahs0XhtiWhmFuG0ds9EVQ7H/TNXk9UuvIs2J7wFd65+1rU//U
ZKXrU4jOLHMB9ALGy6+YscUvh4hVf/El5Db5wNA8mkxSiZYU05mF3Rjz0OqMDWjxg2QNMsk2xhWwtXlU
BMTIuxIQfWbR83cADRXZPzBiK2x/D0J8QEHbGyi89k702eQA8YhHlaHIJKsUYp9GNERc/SS5N35Y/giw
SaEjeoXYi/udRcR/s0DujR/+Xwk/zh/CL4WOBcKP8CYhAAAAAElFTkSuQmCCYgIAAIlQTkcNChoKAAAA
DUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACw8AAAsPAZL5A6UA
AAIESURBVDhP1dJNSBRhHMfxBzzsQSplvXjRg14UURAV1vCQBztIYJBgB/HQMT1EGBQUhAfZEhYX1lhY
QSgEI1npjWQD0SWkg5WFTDbNLuvu7MzsNDu77vvrr+cZh+0SebUHvjzMwOc/zwNDzsCa2sNjbwiZTKZW
KpUySiaT0HXdSNM0qKoKRVEgSRJEUUQoHAZpnNzG4vsYPgnHqFartSoVVgXlctmoVCqhWCyiUCggn88j
l8shGAyCWKf88PiiuLsexc6BbuJKDf8NZrNZYxcEgZ3AD/emiLnnAdxei2Drm3YqZtdkO8/zIOeub+PJ
uwgergl4sCpg5lkIvi/qP3E6nTZ2juNALONbcL09wv3Vn7j3lMedlR+4sRzA1/klpD0epNxuJF0uJJxO
JBwO6AsLiNvt0Ol7zmIBqbvqg/P1UQ3fWv6OjZlHiF8chNbfj189PVA6OyG3t0NqbYXY3IxIUxPkgQHs
EgJCrmzC8TKE2ZVDA3un7YgPUtzXZ+AYxQrFMsVRikWKIw0NkHt7zQGX39D/IHiCb/7Banc3Yh0dUNra
ILe0nGCrFeEL5xGur4dEh/uNAZdeYf5FAL45DxITE0hcG0d8bAza6Ci0kRGow8OIDQ1Bsdkg0yuxLzMc
7eoyB9i8mCSN4OnDIY2jHZjt0z7T9mgfzdixGWR9oJn/8/+7CPkN30AEw/RlrO8AAAAASUVORK5CYIJ7
AgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlz
AAALDwAACw8BkvkDpQAAAh1JREFUOE/V0t1LU2EABvD3rguphHkzoRRKoSYtpU3aki2Zi7EwQ0uLRXZR
9IkZfTg0KqQuugiCoKy/QCK6iIgICZGI/gBLnfuwba1l4XbOzna2KU/POWdj/0K98Jz3PRe/5+V9zxH/
wLB8htg2V8kn5gvWwgKFOLMioEQFZO19nmvBNZNl1pg/jBDmOYy/SOgJTiVx61kKqjqGjY1R5grW1y8w
Z1HODKMUCKA4OAi1vx+F3l6s6gXcefx5AqfvRxGYjODEvRjy+ZPERwkPo1w+hFKpG8XfXVA7O1Fob0e+
rQ0Fnw/pakFwKqHjobthDNyOQlGOE/truHgA6i+7gS0WKK2tyHs8SBlHmMXNp3HiZQxMLKMvGEEu10fs
JT5oYJU4vdfALS3INTdDcbkqBaaPuPbkO/onQjgyFoL/Rhiy7Cd2EzsNXCD+WcFNTZAbG5FzOpHUCzbP
YORxjHgJvuuL6BkNQZK8xA5iG7GVd7Ibyo+dBjabITU0IGe3I64XbPqAi49ixAvoufoN7suLyGbdxPtq
WCFO1rBUXw+5owNRvUC8w7mHEXhGvsJ1aR6O8wvIZBzEe4h3Ee/gnWyHHCc2mZDdugXZujpIVmu14A3O
PAjj1GQIQ3eWeJFhHuEYC/yMlyXdLOlCLrUfss0GiTtrWOKnDBsFb/l4zbxkpplXSM0IrM4KpDlr6+R7
gfi0wAqBtqsGq9F+5v96CPEXq7DG3wjs77IAAAAASUVORK5CYIJMAwAAiVBORw0KGgoAAAANSUhEUgAA
ABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VS
ZWFkeXHJZTwAAALeSURBVDhPpdNpSBRhGAfwd3Y2lIosTT9YkASaCMKSECaVkWeeaaWJhQdEghmVaHjs
rpq6beuKW154ZaRmbF61u16rbXnkhaBiaYmt5p2SeCvK0zODUYEfhAZ+DM87z//P+2UIAPwXUhvAJfWo
IYhLGtG7YC4X8TTBXH8UjR4jCRKgO8gBv+9jdtWB3H8KaDw8h4S9AebVM15eMObqCj8LBRsbfc825rr4
i1/aveFTiwe0iI7Jce/43wXGOER2xJi/mKvnD31zdIR1gQDW+HxotbSE5Y4s6H3vAmuTQlidEICmwhrU
QXtEmNFjCkzqgnQk2qLA9vWegq2l9kxo5/Ggy8YGak1MYDglFBY/psOHKhtoq7YDZZElaDUR0JdyXolZ
d6K6QceNlt7qXe7MhvlmGeurOAQqjIxgIPnmn7OaMCjLM4UBVSjMtzyBaWXUMGYfEIU/LV3qyNyc00jZ
xUW8wUJbBjDzTppqXkF4ySCEFfZBevhlBcm/RGcNFod+n9NI1jqf+gyWXDeobBI5dTNlTOD3e0YtZoXk
doOseRXSmlbAM0EJJMWJPoNeIwWSbM8NCxjUPHLXyrwOdjQmuWh/YHiqJgm8k2rgmqQRLkSUQnywXSNT
wJI60yTVmdaVYknlfasepiDP95A6zZlDcq7qqWexYFwRD/L8VLAOLYCcxNsjpT60mA1jkMguchjRlXd5
XbP1oq0JZQK0it36C/30Vc0il35mHq0SwKTqIUwphUtlgfrlxVc4pwnzmBpQJMOVJZ9UCNdGKmJBWx4D
Y2+EbGDsbRwwBdOqhI1OqcfnEr/9Fc+9OX4xthw2zz5mWJLuQpW3Sb1GtPLIlUllPIxV8TeHXt5b7JT5
jivCT/Zke+rU447YzYyyND9MbScJoZEBMjt1lPKJtaVyk+2pOpE91YKaE+2o8qizVKb7CSrCwpBywD0r
ZIGOID1EmHvsRUyJ8S4ZogNId8dfdPeA/AI7WxeYbRf7xwAAAABJRU5ErkJgggcCAACJUE5HDQoaCgAA
AA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsRAAALEQF/ZF+R
AAABqUlEQVQ4T8XTzyvDYRwH8OcgYzObtBmKWqP8TJgfGRMuEgc/clHUTO2RH0VpB+UfkKaUg1xw4KZ2
GGs52JiSgwPKj2hKfGf2q0zz3dv360eUXb45eOrV83ze9X4OTz3k/5dVW6s5amjuP9Q3DwhxpG/pt1bX
achund7IDJrwODElCGOk2K1vMhJbZS1l6Bi8oxOCMMPjsNXoKHFatDTiNOBlb1CQiNMI13wNJQc7ZZQN
dgHhDkQDHfDu9cCz2YvQdSdYbubzeNhgNw52yilxO4ooG2hBLKiD/7IVnjk9bixmMMdDeL5vBLg8Hr7j
dpRQ4rJr6KuvADFvFkKOdrhNamwZRvGwNoLnk1IgoAL8v736CuGy53NvYM+l0ac8sFx4d9oGz3IO9vuK
cbVaheAtd0FYAYSUv0Sf8uG0qynZnsmk/rVchFfScLeQg9CS/N3jYgZ8S6r3PB6+sz2TTcm6XEEv0rNw
JZIJwnf4LlkXy02nqQqcy5SCnMkU2JCkmchkorjCIpKaZ0Up0x+kn/vX+ef8zZIkNU8mSir475DASeaI
BeI7fPcvi5A3ZiPQPqzE3hQAAAAASUVORK5CYIJZAQAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYA
AAAf8/9hAAAABGdBTUEAALGPC/xhBQAAARBJREFUOE/Nk09LwmAAh6cXoXu3gUcPEUZ/MIQstJKQlRJK
BBJR3ysCDyL6FdTKOTdD6KIfwv3xYOef72/Re4x3emnwwLb39zynTfsHVywW/xw7WAe6DCQce4Tv5TIS
dOgysGVZQywCH4HvKcEtHbphwDQH4YHvqcEtHRn4eH+DL156nqsEt3RkoN/rirI4dOdKcEtHBtr6AWbF
OqYnVSW4pSMDLX0fX6c1TI4MJbilIwNN8WBnrmHtXijBLR0ZaCQP0Ts2MMjdwircwb6qwzEeMa48/1B+
glN6wOjyHuZZFf3sDejIwEsqi9edHFrpPDp753/CDbd0fgMJwbZAjwid8EuMhzesRYOO+Bc2ujRtBQMI
1INWL/QWAAAAAElFTkSuQmCCJQIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARn
QU1BAACxjwv8YQUAAAHcSURBVDhPzZNPSBRhGMZXL4t76KRgIFRipKKIuSYqukH+txLMDTyUBB08eFI8
uFqQsHgQg02C0oNe1UQMW4aMiCACC1ZxdzM3XVGRnXFWd5x1l13Rx+/9wI/2EliXPvjBPPO+v4cZmDH8
BycpKflrSir+BnKpwPiFhYNBB0cffo2o9AEx1xKizvfQHa/E7HfIIZcKTJ9NadhteYDQEztOQhroHG1u
4fDNLA6n3yLUZYPS0CKgXXLI5QWfWAi2teMkEuUyPYFc3QT51h2Oan2IYOsjcW/39n2QIwo+shAeGePy
cTjMFu9CLq9OYK/ThsjsO2gDQ1DYnBxRMM9CZGqGFxz9XEWgqDIBpdGK2MJ3Ptfsg5Ar60COKJBMqdgb
GkY8HkdMDWKroBSbucUJBB53YH90HGrvM2ybLSBHFDhZ8JdVQfNvQNd1BF6OwJeZL/iVX4I1cwV8WQU8
r+WVgBxRMMeChw1XG+9B8f6AqqrYcUrw9/VzViy1cF/MEtAuOaJg5kI6Fq4VwpV3A+6KGvi6bVh//gK+
nqfwNjTDc7Me7vIqLBdbsMhe71v2dZAjCibSr2Ay4yrmLmVDupzzR2iHdsk5KzAy0hgZ54Qc/iUm8wtq
Ox/ksH/hn47BcApx3Yq+niTvSwAAAABJRU5ErkJggkICAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAI
BgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAA7AAAAOwAFq1okJAAAB5ElEQVQ4T9XQT0iT
cRzH8adTB6mEeUgCJRRDHQ6XSzSHOaZjTExxoYKiBQoKQoEgNhCEQOifRkX/yOjPoT+EBw/RITp0iA4d
IypL1za3Ou7/n2d7932eTQbSwVv0wOt5fofn/XngUf799VFR2OlDwXvxruCteCNei1diTawKfeC3x6P7
NTdHaHaW0MwMobPn2JqeZmtyEv/4OL6xMX4OD+MdGGCjv5/vPT28KA6cJzA6il9e8A8N4XO78fb14e3u
ZsPh4IfNxnqbla/NzXxpbOSz0ci608mz7QHtyzvjTZcrH3docZvEx/JxfT2famr4ZrfzWBvIZrPkcjmd
ds6qWVRVJZPJkE6nSaVSJJNJEokE8XicWCxGNBrVn8FgsDigPbVwN3EkEiEq50AgkB/YjjNqZldxOBzW
zz6fD0U5qTC1NoXzoZPOlU5O3Gun9VYrTTeaMF0zUXe1jupL1VQuVlJ+oZyyhTJK50s5umyWWP6B4lCY
WJ3AvmKn/W4xblhuoPZKLVUXq6hYrOCgxIYFAwfm91PiKcG0ZCoMdCicfnmGkecjDD4dxP3kFL2PenE9
cNF1vwvbHRvW21ZabrZguW7BvGTWY+NlY2HguNwswiSOiMPikDCIfWKv2CP0l//q/74U5Q/nC7eH7XHN
aQAAAABJRU5ErkJggq8BAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAA
sY8L/GEFAAAACXBIWXMAAA7AAAAOwAFq1okJAAABUUlEQVQ4T83Mu0oDQRgF4LyUzyApbGxsbCQoaJHC
wsLKwsJe0EIEUbCQSAoRsRK8gJciEVyTGLPZZJONSTb3zWZnRjjOzi5kZGy8FP5wmvnmnMif3Ob+GX6S
sP5fBlzK4BCGwegdWl5HfCMJl7EgkvVcJnwiGvs80B8xdDl2hgzpnI6l9WMM/BKPbC0ncGWgPaSwHYpm
n+JBK2J+7UiU/MhW7wWuDDQ41LoUVofg5tHA3OohmgMmIlu1Q4UrAxaHSpuibFNcpAzMrhyIUlAcmxG6
MlCyCYwmgd4gOL8vYWZ5D2aLiMj2Wg9cGShw8DFfIzi5LWM6vosiL/iRLWd5wpWBl5qHrEWQqRIkr8uY
WtxB/o2XeGR7rnrClYEMB82P6SFxZSK6sC1KQXFsT6ErA9lCAamMjsu0IT5MxragVXiJR7bTu9LXA/7D
dxPWf3ORyAe1w3W6mUDdSQAAAABJRU5ErkJggi4CAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAA
AB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAB0ElEQVQ4T42OyU5iQRSG
eSPjwoWPoA/QD6BxZ1y4cNEJ6Y1xY2JMNGrQxkCLilOQiA0Kgjgh3L4O4AgOESdIk4galcu997dOKUhF
HCr5kzqp+r7/GAB8Kx8eemwfS6M0bcNp/LKk0NJ/jcbuK9R1XKK6+QzDgSysvizMc1kMuG8YysQFgTUI
DAZ0mHwaejwqOl15tDsUtI7nYBx5QmXDP7hlBTOSAmc4hz7npSgopNWWws/BFJp6X5p/tF2g1phERV2I
txbS60i+CUZmJei6XsyKfCTM7uUYqmrqoWo6cnkd0cMkTEPTb4I/zpAALEpxYZ4JbHEBwQ85Ddv7Z6LA
PLWEzf1z3rwoJeBfP4B3bY83Ezztk7kgxpoJ3tg9FQUm+4LQOM/gwl3Ja5jwRLjg9kFF5k6FvHMiCnps
c4LAs7xThO8fVdhnQ1xAcOpGhRQ9FgVd1r8IR0/hXWVrL8Xgel2bmgm2OVe4gJql2DEi24n3gtINHF4Z
d48a/t+quMjkYZkKcsE5u5+kFYS3PhHQ2pOsOcNgAhJXCn6P+7mA4Dib1zfj7wXByAFfm2C762VtajZP
+GEa9XEBNRNcVkAfvgpBpSkKvpMPT7nP5VL+GAzPWxP02T68l4UAAAAASUVORK5CYIL7AAAAiVBORw0K
GgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOuQAADrkB
uAYXvwAAAJ1JREFUOE/FkNENwyAMRFkpHaRb5LN7VZ2mG1GexdGLJULz1SdZBsPdIQrUUu6tKj0Gxu3J
8YL3tiGu9D4KEC8NSEXc1+MVEssg94HSVf4KN8iMeRdGKp19HHRmBoMsyPszluaXuJIM/0sn2Wrv4znZ
XE9v/aV1kC8K5n7mooOB0GXvKvaIrB7MTnExeKqvp7gYJGr9+Ae/guhbZf8A89uCddg192EAAAAASUVO
RK5CYILVAQAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARn
QU1BAACxjwv8YQUAAAF/SURBVDhPYxgEgJGRiaHB9j86vn//PgperWaAgcF6gQQ7Q73t/7bTy1EwOng8
awEKXqkKNoAdZAAXU53tf9/Ndf+d15fDMTq4nJwDx1ezi/8vVzMEGcAFMaDG9r/r+or/1qsL4RgdXIxJ
hePLKbn/l0G8ADWg2ua/7Zqi/8YrsuEYHZwPjYfji3Hp/xejGFBp/d9sZe5/7SWpcIwOzvpHwvGFiMT/
C1X1kQwot/qvsyj1v+LcWDj+9esXCj7uFgDHp4CGzFfVQzKgzOq/yuzY/5LTQuH48+fPKPiAnQccH3YP
/D9XBdmAEsv/MpND/wv0+cLxmzdvUPAOUwc43m3v+X+2ii7CAPZi6//yvSH/VSdF/teeFvffaFby/xcv
XoDxy5cvwfS+oOj/u33D/u/wCPy/2dHr/3R1pDAQLHb4L1bq8l+i1vO/ZL0XGJ8+fRoFLzS3B+N5Znb/
pxpZ/Z+iZwY3gB2IRYFYhkQM0gNOiUxgBsg00jBIDzAvUAQYGABAQ57pU3RpwwAAAABJRU5ErkJgggs=
</value>
</data>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View File

@@ -156,6 +156,7 @@
this.miCzech = new DevExpress.XtraBars.BarButtonItem();
this.miGerman = new DevExpress.XtraBars.BarButtonItem();
this.miSpanish = new DevExpress.XtraBars.BarButtonItem();
this.miLangIt = new DevExpress.XtraBars.BarButtonItem();
this.miHungarian = new DevExpress.XtraBars.BarButtonItem();
this.miPolski = new DevExpress.XtraBars.BarButtonItem();
this.miPortuguese = new DevExpress.XtraBars.BarButtonItem();
@@ -1135,9 +1136,10 @@
this.miMarkForSwapping,
this.miSwapWithMarked,
this.miConvert,
this.miSaveAs});
this.miSaveAs,
this.miLangIt});
this.barManager1.MainMenu = this.bar1;
this.barManager1.MaxItemId = 122;
this.barManager1.MaxItemId = 123;
this.barManager1.ShowFullMenus = true;
this.barManager1.ShortcutItemClick += new DevExpress.XtraBars.ShortcutItemClickEventHandler(this.barManager1_ShortcutItemClick);
//
@@ -1602,6 +1604,7 @@
new DevExpress.XtraBars.LinkPersistInfo(this.miCzech),
new DevExpress.XtraBars.LinkPersistInfo(this.miGerman),
new DevExpress.XtraBars.LinkPersistInfo(this.miSpanish),
new DevExpress.XtraBars.LinkPersistInfo(this.miLangIt),
new DevExpress.XtraBars.LinkPersistInfo(this.miHungarian),
new DevExpress.XtraBars.LinkPersistInfo(this.miPolski),
new DevExpress.XtraBars.LinkPersistInfo(this.miPortuguese),
@@ -1653,6 +1656,16 @@
this.miSpanish.Tag = "es-ES";
this.miSpanish.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miLanguage_DownChanged);
//
// miLangIt
//
this.miLangIt.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check;
resources.ApplyResources(this.miLangIt, "miLangIt");
this.miLangIt.Id = 122;
this.miLangIt.ImageOptions.ImageIndex = ((int)(resources.GetObject("miLangIt.ImageOptions.ImageIndex")));
this.miLangIt.Name = "miLangIt";
this.miLangIt.Tag = "it-IT";
this.miLangIt.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miLanguage_DownChanged);
//
// miHungarian
//
this.miHungarian.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check;
@@ -2527,6 +2540,7 @@
private DevExpress.XtraBars.BarButtonItem miSwapWithMarked;
private DevExpress.XtraBars.BarButtonItem miConvert;
private DevExpress.XtraBars.BarButtonItem miSaveAs;
private DevExpress.XtraBars.BarButtonItem miLangIt;
}
}

View File

@@ -27,6 +27,7 @@ using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraReports.Design;
using DevExpress.XtraTab;
namespace ChanSort.Ui
@@ -1610,6 +1611,22 @@ namespace ChanSort.Ui
{
col.VisibleIndex = GetGridColumnVisibility(col) ? visIndex++ : -1;
}
// add custom columns used in the current channel list
foreach (var field in this.CurrentChannelList.VisibleColumnFieldNames)
{
if (!field.StartsWith("+"))
continue;
var col = gview.Columns[field];
if (col != null)
continue;
col = gview.Columns.AddField(field);
col.Caption = field.Substring(1);
col.FieldName = field;
col.UnboundDataType = typeof(string);
col.VisibleIndex = visIndex++;
}
--this.ignoreEvents;
}
#endregion
@@ -2400,6 +2417,12 @@ namespace ChanSort.Ui
e.Value = channel.GetOldPosition(this.subListIndex);
else if (field == colFavorites.FieldName)
e.Value = GetFavString(channel.Favorites);
else if (field.StartsWith("+")) // custom loader-specific column
{
var pi = e.Row.GetType().GetProperty(field.Substring(1));
if (pi != null && pi.CanRead)
e.Value = pi.GetValue(e.Row);
}
}
else
{
@@ -2408,6 +2431,13 @@ namespace ChanSort.Ui
var channel = (ChannelInfo)e.Row;
channel.Favorites = ChannelInfo.ParseFavString(e.Value?.ToString() ?? "");
}
else if (field.StartsWith("+"))
{
var pi = e.Row.GetType().GetProperty(field.Substring(1));
if (pi != null && pi.CanWrite)
pi.SetValue(e.Row, e.Value);
}
}
}

View File

@@ -609,4 +609,58 @@
<data name="colAudioPid.Caption" xml:space="preserve">
<value>Audio\nPID</value>
</data>
<data name="miFavASet.Caption" xml:space="preserve">
<value>&amp;A</value>
</data>
<data name="miFavBSet.Caption" xml:space="preserve">
<value>&amp;B</value>
</data>
<data name="miFavCSet.Caption" xml:space="preserve">
<value>&amp;C</value>
</data>
<data name="miFavDSet.Caption" xml:space="preserve">
<value>&amp;D</value>
</data>
<data name="miFavESet.Caption" xml:space="preserve">
<value>&amp;E</value>
</data>
<data name="miFavAUnset.Caption" xml:space="preserve">
<value>&amp;A</value>
</data>
<data name="miFavBUnset.Caption" xml:space="preserve">
<value>&amp;B</value>
</data>
<data name="miFavCUnset.Caption" xml:space="preserve">
<value>&amp;C</value>
</data>
<data name="miFavDUnset.Caption" xml:space="preserve">
<value>&amp;D</value>
</data>
<data name="miFavEUnset.Caption" xml:space="preserve">
<value>&amp;E</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>&amp;Jazyk</value>
</data>
<data name="miEnglish.Caption" xml:space="preserve">
<value>&amp;English</value>
</data>
<data name="miGerman.Caption" xml:space="preserve">
<value>&amp;Deutsch</value>
</data>
<data name="miPortuguese.Caption" xml:space="preserve">
<value>Português</value>
</data>
<data name="miRussian.Caption" xml:space="preserve">
<value>ру́сский</value>
</data>
<data name="mnuInputSource.Caption" xml:space="preserve">
<value>mnuInputSource</value>
</data>
<data name="miGotoLeftFilter.Caption" xml:space="preserve">
<value>&amp;Filtr levého seznamu</value>
</data>
<data name="txtSetSlot.Properties.Mask.EditMask" xml:space="preserve">
<value>\d{1,4}</value>
</data>
</root>

View File

@@ -1467,4 +1467,25 @@ speziellen Anbieter, Satelliten oder Länderlisten aus.</value>
<data name="grpInputList.Text" xml:space="preserve">
<value>Alle Sender</value>
</data>
<data name="lblHotkeyLeft.Text" xml:space="preserve">
<value>F3: Filter | F4: Liste | -: nach oben | +: nach unten | Entf: entfernen</value>
</data>
<data name="miSaveAs.Caption" xml:space="preserve">
<value>Speichern &amp;unter...</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>&amp;Sprache</value>
</data>
<data name="miGotoLeftFilter.Caption" xml:space="preserve">
<value>Filterzeile in der &amp;linken Liste</value>
</data>
<data name="miRightListFilter.Caption" xml:space="preserve">
<value>Filterzeile in der &amp;rechten Liste</value>
</data>
<data name="lblHotkeyRight.Text" xml:space="preserve">
<value>F5: Filter | F6: Liste | Eingabe: übernehmen</value>
</data>
<data name="btnClearRightFilter.Text" xml:space="preserve">
<value>FIlter</value>
</data>
</root>

View File

@@ -0,0 +1,675 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="colIndex1.Caption" xml:space="preserve">
<value>Indice Pr.</value>
</data>
<data name="colOutServiceType.Caption" xml:space="preserve">
<value>Tipo di servizio</value>
</data>
<data name="colOutSlot.Caption" xml:space="preserve">
<value>Nuova pos</value>
</data>
<data name="colOutSlot.ToolTip" xml:space="preserve">
<value>Nuovo numero di programma</value>
</data>
<data name="colOutName.Caption" xml:space="preserve">
<value>Nome canale</value>
</data>
<data name="colOutFav.Caption" xml:space="preserve">
<value>Favoriti</value>
</data>
<data name="colUid1.Caption" xml:space="preserve">
<value>UID</value>
</data>
<data name="colOutLock.Caption" xml:space="preserve">
<value>Blocca</value>
</data>
<data name="colOutLock.ToolTip" xml:space="preserve">
<value>Blocco parentale</value>
</data>
<data name="colOutSkip.Caption" xml:space="preserve">
<value>Salta</value>
</data>
<data name="colOutHide.Caption" xml:space="preserve">
<value>Nascondi</value>
</data>
<data name="lblHotkeyLeft.Text" xml:space="preserve">
<value>F3: Filtro | F4: Lista | -: muovi su | +: muovi giù| Can: rimuovi</value>
</data>
<data name="pageProgNr.Text" xml:space="preserve">
<value>Pr#</value>
</data>
<data name="grpSubList.Text" xml:space="preserve">
<value>Sottolista</value>
</data>
<data name="miFile.Caption" xml:space="preserve">
<value>&amp;File</value>
</data>
<data name="miOpen.Caption" xml:space="preserve">
<value>Apri file dati TV...</value>
</data>
<data name="miReload.Caption" xml:space="preserve">
<value>&amp;Ricarica</value>
</data>
<data name="miRestoreOriginal.Caption" xml:space="preserve">
<value>Ripristinare il backup</value>
</data>
<data name="miFileInformation.Caption" xml:space="preserve">
<value>File &amp;informazioni…</value>
</data>
<data name="miSave.Caption" xml:space="preserve">
<value>&amp;Salva</value>
</data>
<data name="miSaveAs.Caption" xml:space="preserve">
<value>Salva con…</value>
</data>
<data name="miOpenReferenceFile.Caption" xml:space="preserve">
<value>Applicare l'ordine da un elenco di riferimento…</value>
</data>
<data name="miAddFromRefList.Caption" xml:space="preserve">
<value>Aggiungi canali dall'elenco di riferimento…</value>
</data>
<data name="miSaveReferenceFile.Caption" xml:space="preserve">
<value>Salva elenco referenze…</value>
</data>
<data name="miExcelExport.Caption" xml:space="preserve">
<value>Esporta elenco Excel…</value>
</data>
<data name="miPrint.Caption" xml:space="preserve">
<value>Stam&amp;pa</value>
</data>
<data name="miQuit.Caption" xml:space="preserve">
<value>&amp;Esci</value>
</data>
<data name="miRecentFiles.Caption" xml:space="preserve">
<value>File recenti</value>
</data>
<data name="miEdit.Caption" xml:space="preserve">
<value>&amp;Modifica</value>
</data>
<data name="miAddChannel.Caption" xml:space="preserve">
<value>&amp;Aggiungi canali</value>
</data>
<data name="miRemove.Caption" xml:space="preserve">
<value>&amp;Rimuovi canali</value>
</data>
<data name="miRenameChannel.Caption" xml:space="preserve">
<value>Rinomina canali</value>
</data>
<data name="miSort.Caption" xml:space="preserve">
<value>Ordina i canali in ordine alfabe&amp;tico</value>
</data>
<data name="miRenum.Caption" xml:space="preserve">
<value>Ri&amp;numerare i canali</value>
</data>
<data name="miRenumFavByPrNr.Caption" xml:space="preserve">
<value>Rinumerare i preferiti per Pr#</value>
</data>
<data name="miRenumFavByPrNr.Hint" xml:space="preserve">
<value>Utilizza lo stesso Pr# in tutti gli elenchi di canali e preferiti</value>
</data>
<data name="mnuFavSet.Caption" xml:space="preserve">
<value>Aggiungi ai pre&amp;feriti</value>
</data>
<data name="miFavASet.Caption" xml:space="preserve">
<value>&amp;A</value>
</data>
<data name="miFavBSet.Caption" xml:space="preserve">
<value>&amp;B</value>
</data>
<data name="miFavCSet.Caption" xml:space="preserve">
<value>&amp;C</value>
</data>
<data name="miFavDSet.Caption" xml:space="preserve">
<value>&amp;D</value>
</data>
<data name="miFavESet.Caption" xml:space="preserve">
<value>&amp;E</value>
</data>
<data name="mnuFavUnset.Caption" xml:space="preserve">
<value>Rimuovi dai Preferiti</value>
</data>
<data name="miFavAUnset.Caption" xml:space="preserve">
<value>&amp;A</value>
</data>
<data name="miFavBUnset.Caption" xml:space="preserve">
<value>&amp;B</value>
</data>
<data name="miFavCUnset.Caption" xml:space="preserve">
<value>&amp;C</value>
</data>
<data name="miFavDUnset.Caption" xml:space="preserve">
<value>&amp;D</value>
</data>
<data name="miFavEUnset.Caption" xml:space="preserve">
<value>&amp;E</value>
</data>
<data name="miLockOn.Caption" xml:space="preserve">
<value>&amp;Blocca canale: attivo</value>
</data>
<data name="miLockOff.Caption" xml:space="preserve">
<value>Blocca canale: disattivato</value>
</data>
<data name="miSkipOn.Caption" xml:space="preserve">
<value>&amp;Salta canale: attivo</value>
</data>
<data name="miSkipOff.Caption" xml:space="preserve">
<value>Salta canale: disattivato</value>
</data>
<data name="miHideOn.Caption" xml:space="preserve">
<value>Nascondi canale: attivo</value>
</data>
<data name="miHideOff.Caption" xml:space="preserve">
<value>Nascondi canale: disattivato</value>
</data>
<data name="barSubItem2.Caption" xml:space="preserve">
<value>TV-Set</value>
</data>
<data name="miTvSettings.Caption" xml:space="preserve">
<value>Impostazioni del dispositivo...</value>
</data>
<data name="miCleanupChannels.Caption" xml:space="preserve">
<value>Pulisci i dati del canale</value>
</data>
<data name="miCleanupChannels.Hint" xml:space="preserve">
<value>Riorganizza i record dei canali e rimuovi i duplicati</value>
</data>
<data name="mnuOptions.Caption" xml:space="preserve">
<value>Impo&amp;stazioni</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>&amp;Lingua</value>
</data>
<data name="miEnglish.Caption" xml:space="preserve">
<value>Inglese</value>
</data>
<data name="miGerman.Caption" xml:space="preserve">
<value>Tedesco</value>
</data>
<data name="miPortuguese.Caption" xml:space="preserve">
<value>Portoghese</value>
</data>
<data name="miRussian.Caption" xml:space="preserve">
<value>Russo</value>
</data>
<data name="miCzech.Caption" xml:space="preserve">
<value>Ceco</value>
</data>
<data name="miRomână.Caption" xml:space="preserve">
<value>Rumeno</value>
</data>
<data name="mnuCharset.Caption" xml:space="preserve">
<value>Set di &amp;caratteri</value>
</data>
<data name="miCharsetForm.Caption" xml:space="preserve">
<value>Tutti i set di &amp;caratteri...</value>
</data>
<data name="miIsoCharSets.Caption" xml:space="preserve">
<value>Set di caratteri ISO</value>
</data>
<data name="miShowWarningsAfterLoad.Caption" xml:space="preserve">
<value>Mostra avvisi dopo il caricamento del file</value>
</data>
<data name="miShowWarningsAfterLoad.Hint" xml:space="preserve">
<value>Mostra automaticamente eventuali avvisi dopo l'apertura di un file</value>
</data>
<data name="miAllowEditPredefinedLists.Caption" xml:space="preserve">
<value>Consenti la modifica di elenchi predefiniti (PERICOLOSO)</value>
</data>
<data name="miAllowEditPredefinedLists.Hint" xml:space="preserve">
<value>Il televisore potrebbe non funzionare correttamente quando si modifica un elenco con numeri di canale predefiniti</value>
</data>
<data name="mnuAccessibility.Caption" xml:space="preserve">
<value>&amp;Accessibilità</value>
</data>
<data name="mnuGotoChannelList.AccessibleDescription" xml:space="preserve">
<value>Apre un sottomenu per la selezione della sorgente di ingresso. Questo menu può essere attivato direttamente con il tasto F1</value>
</data>
<data name="mnuGotoChannelList.Caption" xml:space="preserve">
<value>Seleziona sorgente di &amp;ingresso</value>
</data>
<data name="mnuInputSource.Caption" xml:space="preserve">
<value>mnu Sorgente di ingresso</value>
</data>
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
<value>Apre un sottomenu per il programma di selezione dell'elenco dei preferiti. Questo menu può essere attivato direttamente con il tasto Maiusc+F1</value>
</data>
<data name="mnuGotoFavList.Caption" xml:space="preserve">
<value>Seleziona il programma/l'elenco dei preferiti</value>
</data>
<data name="mnuFavList.Caption" xml:space="preserve">
<value>mnu Lista favoriti</value>
</data>
<data name="miSelectFavList0.Caption" xml:space="preserve">
<value>Lista programmi</value>
</data>
<data name="miSelectFavListA.Caption" xml:space="preserve">
<value>Favoriti A</value>
</data>
<data name="miSelectFavListB.Caption" xml:space="preserve">
<value>Favoriti B</value>
</data>
<data name="miSelectFavListC.Caption" xml:space="preserve">
<value>Favoriti C</value>
</data>
<data name="miSelectFavListD.Caption" xml:space="preserve">
<value>Favoriti D</value>
</data>
<data name="miSelectFavListE.Caption" xml:space="preserve">
<value>Favoriti E</value>
</data>
<data name="miGotoLeftFilter.Caption" xml:space="preserve">
<value>Fi&amp;ltro elenco a sinistra</value>
</data>
<data name="miGotoLeftList.Caption" xml:space="preserve">
<value>Elenco di sinistra</value>
</data>
<data name="miRightListFilter.Caption" xml:space="preserve">
<value>Filt&amp;ro elenco a destra</value>
</data>
<data name="miGotoRightList.Caption" xml:space="preserve">
<value>Elenco a destra</value>
</data>
<data name="mnuHelp.Caption" xml:space="preserve">
<value>Aiuto</value>
</data>
<data name="miWiki.Caption" xml:space="preserve">
<value>Wiki</value>
</data>
<data name="miOpenWebsite.Caption" xml:space="preserve">
<value>Sito web ChanSort…</value>
</data>
<data name="miAbout.Caption" xml:space="preserve">
<value>Info Ch&amp;anSort</value>
</data>
<data name="bar1.Text" xml:space="preserve">
<value>Strumenti</value>
</data>
<data name="miMoveUp.Caption" xml:space="preserve">
<value>Sposta in su</value>
</data>
<data name="miMoveDown.Caption" xml:space="preserve">
<value>Sposta in giù</value>
</data>
<data name="rbInsertSwap.Properties.Caption" xml:space="preserve">
<value>Scambio</value>
</data>
<data name="rbInsertAfter.Properties.Caption" xml:space="preserve">
<value>dopo</value>
</data>
<data name="rbInsertBefore.Properties.Caption" xml:space="preserve">
<value>prima</value>
</data>
<data name="cbCloseGap.Properties.Caption" xml:space="preserve">
<value>Chiudere il divario quando si sposta/elimina un canale</value>
</data>
<data name="cbCloseGap.ToolTip" xml:space="preserve">
<value>Quando attivo, tutti i canali successivi a quello corrente verranno automaticamente rinumerati</value>
</data>
<data name="lblInsertMode.Text" xml:space="preserve">
<value>Modalità di inserimento:</value>
</data>
<data name="pageEmpty.Text" xml:space="preserve">
<value>Nessun elenco di canali</value>
</data>
<data name="lblSetProgramNr.Text" xml:space="preserve">
<value>Imposta posizione:</value>
</data>
<data name="lblSetProgramNr.ToolTip" xml:space="preserve">
<value>N. di programma per le operazioni di inserimento e impostazione</value>
</data>
<data name="txtSetSlot.Properties.Mask.EditMask" xml:space="preserve">
<value>\d{1,4}</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ChanSort {0} - TV Editor dell'elenco dei canali</value>
</data>
<data name="btnToggleLock.Text" xml:space="preserve">
<value>Attiva il blocco parentale</value>
</data>
<data name="btnToggleLock.ToolTip" xml:space="preserve">
<value>Blocco parentale</value>
</data>
<data name="btnToggleFavE.AccessibleDescription" xml:space="preserve">
<value>Attiva i favoriti E</value>
</data>
<data name="btnToggleFavE.Text" xml:space="preserve">
<value>±E</value>
</data>
<data name="btnToggleFavD.AccessibleDescription" xml:space="preserve">
<value>Attiva i favoriti D</value>
</data>
<data name="btnToggleFavD.Text" xml:space="preserve">
<value>±D</value>
</data>
<data name="btnToggleFavC.AccessibleDescription" xml:space="preserve">
<value>Attiva i favoriti C</value>
</data>
<data name="btnToggleFavC.Text" xml:space="preserve">
<value>±C</value>
</data>
<data name="btnToggleFavB.AccessibleDescription" xml:space="preserve">
<value>Attiva i favoriti B</value>
</data>
<data name="btnToggleFavB.Text" xml:space="preserve">
<value>±B</value>
</data>
<data name="btnToggleFavA.AccessibleDescription" xml:space="preserve">
<value>Attiva i favoriti A</value>
</data>
<data name="btnToggleFavA.Text" xml:space="preserve">
<value>±A</value>
</data>
<data name="btnClearLeftFilter.AccessibleDescription" xml:space="preserve">
<value>Rimuove i criteri di filtro dei canali dall'elenco dei canali ordinati</value>
</data>
<data name="btnClearLeftFilter.Text" xml:space="preserve">
<value>Filtro</value>
</data>
<data name="btnClearLeftFilter.ToolTip" xml:space="preserve">
<value>Reimposta filtro</value>
</data>
<data name="btnRenum.Text" xml:space="preserve">
<value>Rinumerare i canali selezionati in sequenza</value>
</data>
<data name="btnRenum.ToolTip" xml:space="preserve">
<value>Rinumerare i canali selezionati in sequenza</value>
</data>
<data name="btnDown.Text" xml:space="preserve">
<value>Sposta il canale selezionato verso il basso</value>
</data>
<data name="btnDown.ToolTip" xml:space="preserve">
<value>Sposta i canali selezionati verso il basso</value>
</data>
<data name="btnUp.Text" xml:space="preserve">
<value>Sposta il canale selezionato in alto</value>
</data>
<data name="btnUp.ToolTip" xml:space="preserve">
<value>Sposta i canali selezionati in alto</value>
</data>
<data name="btnRemoveLeft.Text" xml:space="preserve">
<value>Rimuove i canali selezionati dall'elenco ordinato</value>
</data>
<data name="btnRemoveLeft.ToolTip" xml:space="preserve">
<value>Rimuovi i canali selezionati</value>
</data>
<data name="grpOutputList.Text" xml:space="preserve">
<value>Canali ordinati</value>
</data>
<data name="splitContainerControl1.Panel1.Text" xml:space="preserve">
<value>Pannello1</value>
</data>
<data name="colIndex.Caption" xml:space="preserve">
<value>Indice del programma</value>
</data>
<data name="colSlotOld.Caption" xml:space="preserve">
<value>Vecchia Pos.</value>
</data>
<data name="colSlotOld.ToolTip" xml:space="preserve">
<value>Vecchia Posizione</value>
</data>
<data name="colSlotNew.Caption" xml:space="preserve">
<value>Nuova Pos.</value>
</data>
<data name="colSlotNew.ToolTip" xml:space="preserve">
<value>Nuova Posizione</value>
</data>
<data name="colSource.Caption" xml:space="preserve">
<value>Sorgente</value>
</data>
<data name="colPrNr.Caption" xml:space="preserve">
<value>Pr#</value>
</data>
<data name="colName.Caption" xml:space="preserve">
<value>Nome canale</value>
</data>
<data name="colShortName.Caption" xml:space="preserve">
<value>Nome breve</value>
</data>
<data name="colFavorites.Caption" xml:space="preserve">
<value>Favoriti</value>
</data>
<data name="colLock.Caption" xml:space="preserve">
<value>Bloccato</value>
</data>
<data name="colSkip.Caption" xml:space="preserve">
<value>Salta</value>
</data>
<data name="colHidden.Caption" xml:space="preserve">
<value>Nascondi</value>
</data>
<data name="colEncrypted.Caption" xml:space="preserve">
<value>Cripta</value>
</data>
<data name="colEncrypted.ToolTip" xml:space="preserve">
<value>Crittografato</value>
</data>
<data name="colServiceType.Caption" xml:space="preserve">
<value>ID del tipo di servizio</value>
</data>
<data name="colServiceTypeName.Caption" xml:space="preserve">
<value>Tipo di servizio</value>
</data>
<data name="colFreqInMhz.Caption" xml:space="preserve">
<value>Frequenza (Mhz)</value>
</data>
<data name="colChannelOrTransponder.Caption" xml:space="preserve">
<value>Canale/ Transp</value>
</data>
<data name="colChannelOrTransponder.ToolTip" xml:space="preserve">
<value>Numero canale o transponder</value>
</data>
<data name="colSatellite.Caption" xml:space="preserve">
<value>Satellite</value>
</data>
<data name="colNetworkId.Caption" xml:space="preserve">
<value>Rete (ONID)</value>
</data>
<data name="colTransportStreamId.Caption" xml:space="preserve">
<value>TS ID</value>
</data>
<data name="colTransportStreamId.ToolTip" xml:space="preserve">
<value>Transport Stream ID</value>
</data>
<data name="colServiceId.Caption" xml:space="preserve">
<value>Service ID</value>
</data>
<data name="colVideoPid.Caption" xml:space="preserve">
<value>Video ID</value>
</data>
<data name="colAudioPid.Caption" xml:space="preserve">
<value>Audio ID</value>
</data>
<data name="colSymbolRate.Caption" xml:space="preserve">
<value>Symbol rate</value>
</data>
<data name="colPolarity.Caption" xml:space="preserve">
<value>Polarità</value>
</data>
<data name="colNetworkName.Caption" xml:space="preserve">
<value>Nome rete</value>
</data>
<data name="colNetworkOperator.Caption" xml:space="preserve">
<value>Operatore rete</value>
</data>
<data name="colProvider.Caption" xml:space="preserve">
<value>Provider</value>
</data>
<data name="colUid.Caption" xml:space="preserve">
<value>Uid</value>
</data>
<data name="colLogicalIndex.Caption" xml:space="preserve">
<value>Ordine</value>
</data>
<data name="colSignalSource.Caption" xml:space="preserve">
<value>Sorgente del segnale</value>
</data>
<data name="lblHotkeyRight.Text" xml:space="preserve">
<value>F5: Filtro | F6: Lista | Invio: agg</value>
</data>
<data name="lblPredefinedList.Text" xml:space="preserve">
<value>Questo è un elenco predefinito e non può essere modificato.</value>
</data>
<data name="lblPredefinedList.ToolTip" xml:space="preserve">
<value>Durante la configurazione del televisore è stato selezionato un elenco di canali predefinito.
La modifica di tale elenco causerebbe il malfunzionamento della TV.
Eseguire una scansione completa dei canali sulla TV e non selezionarne nessuno
elenchi di fornitori, satelliti o paesi specifici.</value>
</data>
<data name="btnRemoveRight.Text" xml:space="preserve">
<value>Rimuove i canali selezionati dall'elenco ordinato</value>
</data>
<data name="btnRemoveRight.ToolTip" xml:space="preserve">
<value>Rimuove i canali selezionati dall'elenco ordinato</value>
</data>
<data name="btnAddAll.AccessibleDescription" xml:space="preserve">
<value>Aggiungi tutti i canali attualmente non ordinati alla fine dell'elenco</value>
</data>
<data name="btnAddAll.Text" xml:space="preserve">
<value>&lt;&lt; Agg. Tutti</value>
</data>
<data name="btnAddAll.ToolTip" xml:space="preserve">
<value>Aggiungi tutti i canali attualmente non ordinati alla fine dell'elenco</value>
</data>
<data name="btnClearRightFilter.AccessibleDescription" xml:space="preserve">
<value>Rimuovi i criteri di filtro del canale dall'elenco completo dei canali</value>
</data>
<data name="btnClearRightFilter.Text" xml:space="preserve">
<value>Filtro</value>
</data>
<data name="btnClearRightFilter.ToolTip" xml:space="preserve">
<value>Reimposta filtro</value>
</data>
<data name="btnAdd.Text" xml:space="preserve">
<value>Aggiungi i canali selezionati all'elenco ordinato</value>
</data>
<data name="btnAdd.ToolTip" xml:space="preserve">
<value>Aggiungi i canali selezionati all'elenco ordinato</value>
</data>
<data name="grpInputList.Text" xml:space="preserve">
<value>Canali originali</value>
</data>
<data name="splitContainerControl1.Panel2.Text" xml:space="preserve">
<value>Pannello2</value>
</data>
<data name="splitContainerControl1.Text" xml:space="preserve">
<value>controllo del contenitore diviso 1</value>
</data>
</root>

View File

@@ -373,4 +373,10 @@
<data name="colAudioPid.Caption" xml:space="preserve">
<value>Audio\nPID</value>
</data>
<data name="colOutLock.ToolTip" xml:space="preserve">
<value>Parental lock</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>&amp;Idioma</value>
</data>
</root>

View File

@@ -126,7 +126,7 @@
<value>0, 111</value>
</data>
<metadata name="dsChannels.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>194, 17</value>
<value>192, 17</value>
</metadata>
<data name="gridLeft.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
@@ -276,7 +276,7 @@
<value>gridLeft</value>
</data>
<data name="&gt;&gt;gridLeft.Type" xml:space="preserve">
<value>ChanSort.XGridControl, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null</value>
<value>ChanSort.XGridControl, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gridLeft.Parent" xml:space="preserve">
<value>grpOutputList</value>
@@ -294,7 +294,7 @@
<value>18</value>
</data>
<metadata name="globalImageCollection1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>433, 17</value>
<value>431, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
@@ -387,7 +387,7 @@
<value>256, 6</value>
</data>
<metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>308, 17</value>
<value>307, 17</value>
</metadata>
<data name="miFile.Caption" xml:space="preserve">
<value>&amp;File</value>
@@ -420,7 +420,7 @@
<value>4</value>
</data>
<data name="miSaveAs.Caption" xml:space="preserve">
<value>Save as...</value>
<value>Save &amp;as...</value>
</data>
<data name="miSaveAs.Hint" xml:space="preserve">
<value>Save channel list under a different file name</value>
@@ -598,66 +598,83 @@
</data>
<data name="mnuLanguage.Caption" xml:space="preserve">
<value>&amp;Language</value>
<comment>@Invariant</comment>
</data>
<data name="mnuLanguage.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="miEnglish.Caption" xml:space="preserve">
<value>English</value>
<comment>@Invariant</comment>
</data>
<data name="miEnglish.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="miCzech.Caption" xml:space="preserve">
<value>Česky</value>
<comment>@Invariant</comment>
</data>
<data name="miCzech.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>41</value>
</data>
<data name="miGerman.Caption" xml:space="preserve">
<value>Deutsch</value>
<comment>@Invariant</comment>
</data>
<data name="miGerman.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="miSpanish.Caption" xml:space="preserve">
<value>Español</value>
<comment>@Invariant</comment>
</data>
<data name="miSpanish.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>44</value>
</data>
<data name="miLangIt.Caption" xml:space="preserve">
<value>Italiano</value>
</data>
<data name="miLangIt.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>51</value>
</data>
<data name="miHungarian.Caption" xml:space="preserve">
<value>Magyar</value>
<comment>@Invariant</comment>
</data>
<data name="miHungarian.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>47</value>
</data>
<data name="miPolski.Caption" xml:space="preserve">
<value>Polski</value>
<comment>@Invariant</comment>
</data>
<data name="miPolski.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="miPortuguese.Caption" xml:space="preserve">
<value>Português</value>
<comment>@Invariant</comment>
</data>
<data name="miPortuguese.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="miRomanian.Caption" xml:space="preserve">
<value>Română</value>
<comment>@Invariant</comment>
</data>
<data name="miRomanian.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>42</value>
</data>
<data name="miRussian.Caption" xml:space="preserve">
<value>Русский</value>
<comment>@Invariant</comment>
</data>
<data name="miRussian.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>35</value>
</data>
<data name="miTurkish.Caption" xml:space="preserve">
<value>Türkçe</value>
<comment>@Invariant</comment>
</data>
<data name="miTurkish.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
<value>46</value>
@@ -676,15 +693,18 @@
</data>
<data name="miUtf8Charset.Caption" xml:space="preserve">
<value>UTF-8 (Unicode)</value>
<comment>@Invariant</comment>
</data>
<data name="miIsoCharSets.Caption" xml:space="preserve">
<value>ISO character sets</value>
</data>
<data name="miUtf16BigEndian.Caption" xml:space="preserve">
<value>UTF-16 Big Endian (Unicode MSB first)</value>
<comment>@Invariant</comment>
</data>
<data name="miUtf16LittleEndian.Caption" xml:space="preserve">
<value>UTF-16 Little Endian (Unicode LSB first)</value>
<comment>@Invariant</comment>
</data>
<data name="miTheme.Caption" xml:space="preserve">
<value>Theme...</value>
@@ -739,6 +759,7 @@
</data>
<data name="mnuInputSource.Caption" xml:space="preserve">
<value>mnuInputSource</value>
<comment>@Invariant</comment>
</data>
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
<value>Opens a submenu for the program of favorite list selection. This menu can be directly activated with the Shift+F1 key</value>
@@ -778,18 +799,23 @@
</data>
<data name="miFontSmall.Caption" xml:space="preserve">
<value>S - Tahoma 8pt</value>
<comment>@Invariant</comment>
</data>
<data name="miFontMedium.Caption" xml:space="preserve">
<value>M - Segoe UI 9pt</value>
<comment>@Invariant</comment>
</data>
<data name="miFontLarge.Caption" xml:space="preserve">
<value>L - Segoe UI 10pt</value>
<comment>@Invariant</comment>
</data>
<data name="miFontXLarge.Caption" xml:space="preserve">
<value>XL - Segoe UI 11pt</value>
<comment>@Invariant</comment>
</data>
<data name="miFontXxLarge.Caption" xml:space="preserve">
<value>XXL - Segoe UI 12pt</value>
<comment>@Invariant</comment>
</data>
<data name="mnuHelp.Caption" xml:space="preserve">
<value>&amp;Help</value>
@@ -812,8 +838,8 @@
<assembly alias="DevExpress.XtraBars.v23.1" name="DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="barManager1.Categories" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz
LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe
@@ -822,8 +848,8 @@
</data>
<data name="barManager1.Categories1" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz
LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw
@@ -832,8 +858,8 @@
</data>
<data name="barManager1.Categories2" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz
LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu
@@ -842,8 +868,8 @@
</data>
<data name="barManager1.Categories3" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz
LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC
X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc
@@ -852,8 +878,8 @@
</data>
<data name="barManager1.Categories4" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v23.1" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy
LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz
LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAADUFjY2Vzc2liaWxpdHkE/P///wtTeXN0ZW0uR3VpZAsA
AAACX2ECX2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICeIvz
@@ -1178,6 +1204,7 @@
</data>
<data name="txtSetSlot.Properties.Mask.EditMask" xml:space="preserve">
<value>\d{1,4}</value>
<comment>@Invariant</comment>
</data>
<data name="txtSetSlot.Properties.Mask.MaskType" type="DevExpress.XtraEditors.Mask.MaskType, DevExpress.XtraEditors.v23.1">
<value>RegEx</value>
@@ -1240,7 +1267,7 @@
<value>gviewLeft</value>
</data>
<data name="&gt;&gt;gviewLeft.Type" xml:space="preserve">
<value>ChanSort.XGridView, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null</value>
<value>ChanSort.XGridView, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;colIndex1.Name" xml:space="preserve">
<value>colIndex1</value>
@@ -1324,13 +1351,13 @@
<value>globalImageCollection1</value>
</data>
<data name="&gt;&gt;globalImageCollection1.Type" xml:space="preserve">
<value>ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null</value>
<value>ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gviewRight.Name" xml:space="preserve">
<value>gviewRight</value>
</data>
<data name="&gt;&gt;gviewRight.Type" xml:space="preserve">
<value>ChanSort.XGridView, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null</value>
<value>ChanSort.XGridView, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;colIndex.Name" xml:space="preserve">
<value>colIndex</value>
@@ -1818,6 +1845,12 @@
<data name="&gt;&gt;miSpanish.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;miLangIt.Name" xml:space="preserve">
<value>miLangIt</value>
</data>
<data name="&gt;&gt;miLangIt.Type" xml:space="preserve">
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;miHungarian.Name" xml:space="preserve">
<value>miHungarian</value>
</data>
@@ -2125,7 +2158,7 @@
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="SharedImageCollection.Timestamp" type="System.DateTime, mscorlib">
<value>01/04/2023 13:23:37</value>
<value>08/13/2023 10:51:28</value>
</data>
<data name="SharedImageCollection.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
@@ -2904,6 +2937,7 @@
</data>
<data name="colPcrPid.Caption" xml:space="preserve">
<value>PCR\nPID</value>
<comment>@Invariant</comment>
</data>
<data name="colPcrPid.ToolTip" xml:space="preserve">
<value>Program Clock Reference Packet-ID</value>
@@ -3008,7 +3042,7 @@
<value>gridRight</value>
</data>
<data name="&gt;&gt;gridRight.Type" xml:space="preserve">
<value>ChanSort.XGridControl, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null</value>
<value>ChanSort.XGridControl, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gridRight.Parent" xml:space="preserve">
<value>grpInputList</value>
@@ -3296,18 +3330,18 @@
<value>0</value>
</data>
<metadata name="popupContext.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>614, 17</value>
<value>611, 17</value>
</metadata>
<metadata name="timerEditDelay.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>744, 17</value>
<value>742, 17</value>
</metadata>
<metadata name="popupInputSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>875, 17</value>
<value>873, 17</value>
</metadata>
<metadata name="popupFavList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1029, 17</value>
<value>1026, 17</value>
</metadata>
<metadata name="timerSelectFocusedRow.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1153, 17</value>
<value>1151, 17</value>
</metadata>
</root>

View File

@@ -627,4 +627,64 @@ furnizor specific, satelit sau liste de țări.</value>
<data name="colAudioPid.Caption" xml:space="preserve">
<value>Audio\nPID</value>
</data>
<data name="miFavASet.Caption" xml:space="preserve">
<value>&amp;A</value>
</data>
<data name="miFavBSet.Caption" xml:space="preserve">
<value>&amp;B</value>
</data>
<data name="miFavCSet.Caption" xml:space="preserve">
<value>&amp;C</value>
</data>
<data name="miFavDSet.Caption" xml:space="preserve">
<value>&amp;D</value>
</data>
<data name="miFavESet.Caption" xml:space="preserve">
<value>&amp;E</value>
</data>
<data name="miFavAUnset.Caption" xml:space="preserve">
<value>&amp;A</value>
</data>
<data name="miFavBUnset.Caption" xml:space="preserve">
<value>&amp;B</value>
</data>
<data name="miFavCUnset.Caption" xml:space="preserve">
<value>&amp;C</value>
</data>
<data name="miFavDUnset.Caption" xml:space="preserve">
<value>&amp;D</value>
</data>
<data name="miFavEUnset.Caption" xml:space="preserve">
<value>&amp;E</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>&amp;Limba</value>
</data>
<data name="miEnglish.Caption" xml:space="preserve">
<value>&amp;Engleză</value>
</data>
<data name="miGerman.Caption" xml:space="preserve">
<value>&amp;Deutsch</value>
</data>
<data name="miPortuguese.Caption" xml:space="preserve">
<value>Português</value>
</data>
<data name="miRussian.Caption" xml:space="preserve">
<value>русский</value>
</data>
<data name="miCzech.Caption" xml:space="preserve">
<value>Česky</value>
</data>
<data name="miRomână.Caption" xml:space="preserve">
<value>Română</value>
</data>
<data name="mnuInputSource.Caption" xml:space="preserve">
<value>mnuInputSource</value>
</data>
<data name="miGotoLeftFilter.Caption" xml:space="preserve">
<value>Filtru de listă &amp;stânga</value>
</data>
<data name="txtSetSlot.Properties.Mask.EditMask" xml:space="preserve">
<value>\d{1,4}</value>
</data>
</root>

View File

@@ -714,4 +714,7 @@
<data name="miFontXxLarge.Caption" xml:space="preserve">
<value>XXL - Segoe UI 12пт</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>Язык</value>
</data>
</root>

View File

@@ -138,4 +138,7 @@
<data name="rbSortByNumber.Properties.Caption" xml:space="preserve">
<value>Číslo</value>
</data>
<data name="fontEdit1.EditValue" xml:space="preserve">
<value>Tahoma</value>
</data>
</root>

View File

@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="labelControl1.Text" xml:space="preserve">
<value>Ordina per:</value>
</data>
<data name="rbSortByNumber.Properties.Caption" xml:space="preserve">
<value>Numero </value>
</data>
<data name="rbSortByName.Properties.Caption" xml:space="preserve">
<value>Nome </value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>Carattere:</value>
</data>
<data name="fontEdit1.EditValue" xml:space="preserve">
<value>Tahoma</value>
</data>
<data name="btnPreview.Text" xml:space="preserve">
<value>Anteprima…</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Annulla</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Opzioni di stampa</value>
</data>
</root>

View File

@@ -138,4 +138,7 @@
<data name="$this.Text" xml:space="preserve">
<value>Opțiunile de imprimare</value>
</data>
<data name="fontEdit1.EditValue" xml:space="preserve">
<value>Tahoma</value>
</data>
</root>

View File

@@ -269,7 +269,7 @@ Sollen die Programmnummern in fortlaufende Zahlen umgeändert werden?</value>
Mögliche Ursachen sind USB-Sticks, die mit NTFS formatiert sind (FAT32 sollte immer funktionieren) oder ein am TV durchgeführtes Firmwareupdate, ohne einen anschließenden neuen Suchlauf. Dabei kann dann unter Umständen die neue Firmware die alten Daten nicht korrekt exportieren.</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antenne,Kabel,Sat,IP,Analog,DVB,TV,Radio,Daten</value>
<value>Antenne,Kabel,Sat,IP,Analog,Digital,TV,Radio,Daten</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>Wie soll vorgegangen werden, wenn eine Pr# bereits vergeben ist?</value>

View File

@@ -250,7 +250,7 @@ o bien se ha actualizado el firmware sin hacer una nueva búsqueda de canales.
(El nuevo firmware de la TV puede ser incapáz de procesar los datos existentes de canales durante la exportación.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antena,Cable,Sat,IP,Analógico,DVB,TV,Radio,Data</value>
<value>Antena,Cable,Sat,IP,Analógico,Digital,TV,Radio,Data</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>¿Cómo desea proceder cuando un Pr# ya exista en la lista de destino?</value>

View File

@@ -259,7 +259,7 @@ A tipikus ok, ha az USB memóriakártya NTFS fájlrendszerű (próbáljon inkáb
(Előfordulhat, hogy az új szoftver a TV-ben nem tudja feldolgozni a régi csatornaadatokat az exportálás során.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antenna,Kábel,Műhold,IP,Analóg,DVB,TV,Rádió,Adat</value>
<value>Antenna,Kábel,Műhold,IP,Analóg,Digitális,TV,Rádió,Adat</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>Hogyan szeretné kezelni, ha egy Pr# már szerepel a céllistában?</value>

View File

@@ -0,0 +1,296 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MainForm_LoadTll_SourceTllNotFound" xml:space="preserve">
<value>Impossibile trovare il TLL di origine:
'{0}'</value>
</data>
<data name="MainForm_LoadTll_Exception" xml:space="preserve">
<value>Si è verificato un errore durante il caricamento del file di dati della TV: {0}</value>
</data>
<data name="MainForm_FileDialog_OpenFileFilter" xml:space="preserve">
<value>File supportato|{0}|Tutti i File (*.*)|*</value>
</data>
<data name="MainForm_FileDialog_SaveFileFilter" xml:space="preserve">
<value>{0}-File|*{0}|Tutti i File (*.*)|*</value>
</data>
<data name="MainForm_TryExecute_Exception" xml:space="preserve">
<value>Si è verificato un errore imprevisto:
{0}</value>
</data>
<data name="MainForm_SaveTllFile_Exception" xml:space="preserve">
<value>Si è verificato un errore durante la scrittura del file dati TV:
{0}</value>
</data>
<data name="MainForm_SaveTllFile_Success" xml:space="preserve">
<value>Il file di dati TV ordinato è stato creato correttamente.</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Question" xml:space="preserve">
<value>Vuoi quindi salvare le tue modifiche?</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Save" xml:space="preserve">
<value>Salvare le modifiche</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Discard" xml:space="preserve">
<value>Non salvare le modifiche</value>
</data>
<data name="MainForm_LoadTll_SerializerNotFound" xml:space="preserve">
<value>Nessun plugin trovato per leggere/scrivere {0} file.</value>
</data>
<data name="MainForm_LoadFiles_IOException" xml:space="preserve">
<value>Errore durante il caricamento del file</value>
</data>
<data name="MainForm_LoadFiles_ValidationWarningMsg" xml:space="preserve">
<value>Il contenuto del file mostra alcune anomalie ed è probabilmente corrotto.</value>
</data>
<data name="MainForm_LoadFiles_ValidationWarningCap" xml:space="preserve">
<value>Convalida dei dati</value>
</data>
<data name="MainForm_RestoreScanOrder_Message" xml:space="preserve">
<value>Tutta la memorizzazione personalizzata andrà persa.
Sei sicuro di voler ripristinare l'ordine dai canali?</value>
</data>
<data name="MainForm_RestoreScanOrder_Caption" xml:space="preserve">
<value>Ripristina l'ordine dalla scansione dei canali</value>
</data>
<data name="MainForm_LoadFiles_DupeWarningMsg" xml:space="preserve">
<value>Il file di input contiene più record che utilizzano lo stesso
numero di programma. È possibile che la TV non accetti
le modifiche apportate da ChanSort.
Ciò è in genere causato dall'esecuzione di una scansione manuale del transponder.
Si consiglia di utilizzare un file di input pulito per eventuali modifiche.
Per fare ciò, disattiva la modalità Hotel, reimposta la TV su
impostazioni di fabbrica, eseguire una nuova scansione dei canali ciechi e girare
Riattiva la modalità hotel, quindi esporta un nuovo file TLL pulito.</value>
</data>
<data name="MainForm_btnResetChannelData_Click_Message" xml:space="preserve">
<value>ATTENZIONE: tutti i dati di canali e transponder analogici, DVB-C/T e DVB-S verranno cancellati.
Dovrai eseguire una scansione completa dei canali dopo aver caricato questo file nella tua TV.
Procedere?</value>
</data>
<data name="MainForm_btnResetChannelData_Click_Caption" xml:space="preserve">
<value>Cancella tutti i dati del canale</value>
</data>
<data name="MainForm_miRestoreOriginal_Message" xml:space="preserve">
<value>Impossibile copiare il file .bak in {0}</value>
</data>
<data name="MainForm_miRestoreOriginal_ItemClick_NoBackup" xml:space="preserve">
<value>Nessun file di backup trovato: {0}</value>
</data>
<data name="MainForm_miRestoreOriginal_ItemClick_Confirm" xml:space="preserve">
<value>Stai per ripristinare il file di backup. Tutte le modifiche andranno perse!
Vuoi continuare?</value>
</data>
<data name="MainForm_SaveFiles_ErrorMsg" xml:space="preserve">
<value>Si è verificato un errore durante il salvataggio del file. Per favore assicurati che
- hai i permessi di scrittura sul file
- il file non è aperto in un altro programma
Il messaggio di errore è:</value>
</data>
<data name="MainForm_SaveFiles_ErrorTitle" xml:space="preserve">
<value>Errore di scrittura del file</value>
</data>
<data name="UpdateCheck_NotifyAboutNewVersion_Message" xml:space="preserve">
<value>È disponibile una versione più recente: v{0}.
Vuoi aprire il sito Web di download?</value>
</data>
<data name="UpdateCheck_NotifyAboutNewVersion_Caption" xml:space="preserve">
<value>Nuova versione</value>
</data>
<data name="MainForm_InitInitialChannelOrder_Question" xml:space="preserve">
<value>Come vorresti modificare il tuo elenco di canali?</value>
</data>
<data name="MainForm_InitInitialChannelOrder_EmptyList" xml:space="preserve">
<value>Crea nuovo elenco: inizia con un elenco vuoto e aggiungi i canali nell'ordine desiderato</value>
</data>
<data name="MainForm_InitInitialChannelOrder_CurrentList" xml:space="preserve">
<value>Modifica elenco corrente: inizia con l'elenco corrente e modificalo secondo necessità</value>
</data>
<data name="MainForm_InitInitialChannelOrder_ReferenceList" xml:space="preserve">
<value>Copia elenco canali: ordina i canali come in un elenco di riferimento</value>
</data>
<data name="MainForm_PromptHandlingOfUnsortedChannels_Question" xml:space="preserve">
<value>Cosa dovrebbe accadere ai canali non ordinati?</value>
</data>
<data name="MainForm_PromptHandlingOfUnsortedChannels_Append" xml:space="preserve">
<value>Aggiungi i canali non ordinati alla fine dell'elenco</value>
</data>
<data name="MainForm_PromptHandlingOfUnsortedChannels_Delete" xml:space="preserve">
<value>Elimina i canali non ordinati dall'elenco</value>
</data>
<data name="MainForm_Cancel" xml:space="preserve">
<value>Annulla</value>
</data>
<data name="MainForm_LoadTvDataFile_FileNotFound_Caption" xml:space="preserve">
<value>Fine non trovato</value>
</data>
<data name="MainForm_LoadTvDataFile_FileNotFound_Message" xml:space="preserve">
<value>Il file {0} non esiste</value>
</data>
<data name="MainForm_ExportExcelList_Message" xml:space="preserve">
<value>L'elenco dei canali è stato copiato negli appunti
e può essere incollato in Excel o in qualsiasi editor di testo.</value>
</data>
<data name="MainForm_HandleChannelNumberGaps" xml:space="preserve">
<value>La tua TV potrebbe non essere in grado di funzionare correttamente quando ci sono delle lacune nei numeri dei canali.
Vuoi che i numeri dei canali vengano riordinati consecutivamente?</value>
</data>
<data name="MainForm_LoadFiles_AllZero" xml:space="preserve">
<value>Il contenuto del file non è valido. Ha dimensione 0 o tutti i suoi byte hanno il valore 0.
Le cause tipiche sono le chiavette USB con un file system NTFS (prova invece a utilizzare FAT32)
o aggiornamenti del firmware senza eseguire una nuova scansione dei canali.
(Il nuovo software del televisore potrebbe non essere in grado di elaborare i vecchi dati del canale durante l'esportazione.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antenna,CavoSat,IP,Analogico,Digitale,TV,Radio</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>Come vuoi gestirlo quando un Pr # è già presente nell'elenco dei target?</value>
</data>
<data name="ReferenceListForm_btnApply_Click_Clear" xml:space="preserve">
<value>Cancella l'elenco degli obiettivi prima di applicare l'elenco di riferimento</value>
</data>
<data name="ReferenceListForm_btnApply_Click_Overwrite" xml:space="preserve">
<value>Sovrascrivi Pr# con il canale dalla lista di riferimento</value>
</data>
<data name="ReferenceListForm_btnApply_Click_Keep" xml:space="preserve">
<value>Mantieni il canale corrente al Pr#</value>
</data>
<data name="MainForm_SwapChannels_RowCountMsg" xml:space="preserve">
<value>Per scambiare i canali è necessario selezionare un numero uguale di righe nella tabella di sinistra e di destra.</value>
</data>
<data name="MainForm_SwapChannels_RowCountTitle" xml:space="preserve">
<value>Scambia canali</value>
</data>
<data name="ReferenceListForm_ShowOpenFileDialog_Title" xml:space="preserve">
<value>Seleziona un elenco di riferimento da importare</value>
</data>
<data name="MainForm_ShowOpenReferenceFileDialog_Filter" xml:space="preserve">
<value>ChanSort Lista di riferimento|*.csv|SamToolBox Lista di riferimento|*.chl|Tutte le liste di riferimento|*.csv;*.chl</value>
</data>
<data name="MainForm_ShowOpenReferenceFileDialog_Title" xml:space="preserve">
<value>Apri l'elenco dei riferimenti</value>
</data>
<data name="MainForm_LoadTll_InvalidZip" xml:space="preserve">
<value>Il file non è un archivio .zip valido.
I televisori spesso esportano file danneggiati su chiavette USB formattate con il file system NTFS.
Prova ad esportare su una chiavetta formattata con FAT32</value>
</data>
</root>

View File

@@ -252,7 +252,7 @@ lub aktualizacje oprogramowania układowego bez uruchamiania nowego skanowania k
(Nowe oprogramowanie w telewizorze może nie być w stanie przetworzyć danych starego kanału podczas eksportu.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antena, telewizja kablowa, satelitarna, IP, analogowa, DVB, TV, radio, dane</value>
<value>Antena, telewizja kablowa, satelitarna, IP, analogowa, cyfrowa, TV, radio, dane</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>Jak chcesz sobie z tym poradzić, gdy Pr# jest już zajęty na liście docelowej?</value>

View File

@@ -232,7 +232,7 @@ Do you want to open the download website?</value>
<value>Modify current list: Start with current list and modify it as needed</value>
</data>
<data name="MainForm_InitInitialChannelOrder_ReferenceList" xml:space="preserve">
<value>Apply template: Order the channels the same way as in another list</value>
<value>Copy channel list: Order the channels the same way as in a reference list</value>
</data>
<data name="MainForm_PromptHandlingOfUnsortedChannels_Question" xml:space="preserve">
<value>What should happen to unsorted channels?</value>
@@ -267,7 +267,7 @@ or firmware upgrades without running a new channel scan.
(The new software in the TV might be unable to process the old channel data during the export.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antenna,Cable,Sat,IP,Analog,DVB,TV,Radio,Data</value>
<value>Antenna,Cable,Sat,IP,Analog,Digital,TV,Radio,Data</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>How do you want to handle it when a Pr# is already taken in the target list?</value>

View File

@@ -261,7 +261,7 @@ sau actualizări ale firmware-ului fără a efectua o nouă scanare a canalelor.
(Noul software din televizor ar putea să nu poată procesa datele vechi ale canalului în timpul exportului.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Antenă, Cablu, Sat, IP, analog, DVB, TV, radio, data</value>
<value>Antenă, Cablu, Sat, IP, analog, digital, TV, radio, data</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>Cum doriți să o gestionați atunci când un Pr # este deja luat în lista țintă?</value>

View File

@@ -259,7 +259,7 @@ veya yeni bir kanal taraması yapmadan ürün yazılımını güncelleyin.
(TV'deki yeni yazılım dışa aktarma sırasında eski kanal verilerini işleyemeyebilir.)</value>
</data>
<data name="ReferenceListForm_AntennaCableSatIPAnalogDigitalTVRadio" xml:space="preserve">
<value>Anten,Kablo,Uydu,IP,Analog,DVB,TV,Radyo,Veri</value>
<value>Anten,Kablo,Uydu,IP,Analog,Digital,TV,Radyo,Veri</value>
</data>
<data name="ReferenceListForm_btnApply_ConflictHandling" xml:space="preserve">
<value>Hedef listesinden bir Pr# alındığında bunu nasıl ele almak istersiniz?</value>

View File

@@ -0,0 +1,5 @@
DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="labelControl1.Text" xml:space="preserve">
<value>File elenco di riferimento:</value>
</data>
<data name="edFile.EditValue" xml:space="preserve">
<value>← premere il pulsante per selezionare un file</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>Scegli un file che contenga l'ordine dei canali che desideri applicare all'elenco corrente.
Puoi utilizzare uno degli elenchi predefiniti di ChanSort (TXT, CHL, CSV)
o un file di dati da un'altra TV (SCM, TLL, DB, BIN, …)</value>
</data>
<data name="rbAuto.Properties.Caption" xml:space="preserve">
<value>Riordina automaticamente tutti gli elenchi nel file TV</value>
</data>
<data name="rbManual.Properties.Caption" xml:space="preserve">
<value>Riordino avanzato</value>
</data>
<data name="labelControl3.Text" xml:space="preserve">
<value>Lista di referenze:</value>
</data>
<data name="labelControl4.Text" xml:space="preserve">
<value>Elenco degli obiettivi:</value>
</data>
<data name="cbTv.Properties.Caption" xml:space="preserve">
<value>TV</value>
</data>
<data name="cbRadio.Properties.Caption" xml:space="preserve">
<value>Radio</value>
</data>
<data name="labelControl5.Text" xml:space="preserve">
<value>Inizia da Pr#:</value>
</data>
<data name="labelControl6.Text" xml:space="preserve">
<value>(ad es. lasciare che i canali radio inizino a 5000 per evitare conflitti con i numeri dei canali TV)</value>
</data>
<data name="comboPrNr.EditValue" xml:space="preserve">
<value>1</value>
</data>
<data name="comboPrNr.Properties.Items" xml:space="preserve">
<value>1</value>
</data>
<data name="comboPrNr.Properties.Items1" xml:space="preserve">
<value>100</value>
</data>
<data name="comboPrNr.Properties.Items2" xml:space="preserve">
<value>500</value>
</data>
<data name="comboPrNr.Properties.Items3" xml:space="preserve">
<value>1000</value>
</data>
<data name="comboPrNr.Properties.Items4" xml:space="preserve">
<value>2000</value>
</data>
<data name="comboPrNr.Properties.Items5" xml:space="preserve">
<value>5000</value>
</data>
<data name="comboPrNr.Properties.Items6" xml:space="preserve">
<value>7000</value>
</data>
<data name="cbConsecutive.Properties.Caption" xml:space="preserve">
<value>Utilizzare numeri consecutivi (rimuovere gli spazi dalla lista di riferimento Pr#)</value>
</data>
<data name="cbIp.Properties.Caption" xml:space="preserve">
<value>IP (rete)</value>
</data>
<data name="cbSat.Properties.Caption" xml:space="preserve">
<value>Satellite</value>
</data>
<data name="labelControl11.Text" xml:space="preserve">
<value>Ingresso:</value>
</data>
<data name="cbAntenna.Properties.Caption" xml:space="preserve">
<value>Antenna</value>
</data>
<data name="cbCable.Properties.Caption" xml:space="preserve">
<value>Cavo</value>
</data>
<data name="labelControl9.Text" xml:space="preserve">
<value>Tipo di segnale</value>
</data>
<data name="cbAnalog.Properties.Caption" xml:space="preserve">
<value>Analogico</value>
</data>
<data name="cbDigital.Properties.Caption" xml:space="preserve">
<value>Digitale</value>
</data>
<data name="labelControl7.Text" xml:space="preserve">
<value>Tipo di canale</value>
</data>
<data name="btnApply.Text" xml:space="preserve">
<value>Applica</value>
</data>
<data name="grpManual.Text" xml:space="preserve">
<value>grpManuale</value>
</data>
<data name="btnOk.Text" xml:space="preserve">
<value>Ok</value>
</data>
<data name="btnClose.Text" xml:space="preserve">
<value>Chiudi/Annulla</value>
</data>
<data name="linkWiki.Text" xml:space="preserve">
<value>Apri ChanSort Wiki per ulteriori informazioni e per scaricare le liste di riferimento</value>
</data>
<data name="groupControl1.Text" xml:space="preserve">
<value>1. Selezionare il file dell'elenco di riferimento</value>
</data>
<data name="labelControl10.Text" xml:space="preserve">
<value>Se la TV e il file di riferimento contengono più elenchi o utilizzano un raggruppamento diverso, è possibile applicare parti selezionate dell'elenco di riferimento a un elenco di destinazione.
Questo passaggio può essere ripetuto secondo necessità.</value>
</data>
<data name="labelControl8.Text" xml:space="preserve">
<value>Questa opzione è disponibile solo quando il file TV e l'elenco di riferimento sono organizzati allo stesso modo.
(vale a dire gli stessi sottoelenchi per le combinazioni di Antenna/Cavo/Sat, TV/Radio, Analogico/Digitale)</value>
</data>
<data name="groupControl2.Text" xml:space="preserve">
<value>2. Metti ordine nel tuo file TV</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Applica elenco di riferimento</value>
</data>
</root>

View File

@@ -761,7 +761,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)</value>
<value>204, 84</value>
</data>
<data name="cbDigital.Properties.Caption" xml:space="preserve">
<value>DVB</value>
<value>Digital</value>
</data>
<data name="cbDigital.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 18</value>
@@ -1127,4 +1127,16 @@ This step can be repeated as needed.</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="edFile.Properties.Buttons8" xml:space="preserve">
<value></value>
</data>
<data name="groupControl1.Text" xml:space="preserve">
<value>1. Select reference list file</value>
</data>
<data name="groupControl2.Text" xml:space="preserve">
<value>2. Bring order to your TV file</value>
</data>
<data name="checkEdit1.Properties.Caption" xml:space="preserve">
<value>Data/Other</value>
</data>
</root>

View File

@@ -123,4 +123,10 @@
<data name="progressPanel1.Description" xml:space="preserve">
<value>Vytváří se datový soubor televizoru...</value>
</data>
<data name="progressPanel1.Text" xml:space="preserve">
<value>progressPanel1</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Form1</value>
</data>
</root>

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="progressPanel1.Description" xml:space="preserve">
<value>Generazione file dati TV...</value>
</data>
<data name="progressPanel1.Text" xml:space="preserve">
<value>Pannelloavanzamento1</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Forma 1</value>
</data>
<data name="progressPanel1.Caption" xml:space="preserve">
<value>Per favore sii paziente</value>
</data>
</root>

View File

@@ -123,4 +123,10 @@
<data name="progressPanel1.Caption" xml:space="preserve">
<value>Te rog ai rabdare</value>
</data>
<data name="progressPanel1.Text" xml:space="preserve">
<value>progressPanel1</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Form1</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

View File

@@ -16,6 +16,7 @@
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<None Include="PhilipsXmlStatsCollector.cs" />
<None Include="WebOs5StatsCollector.cs" />
</ItemGroup>
<ItemGroup>
@@ -24,10 +25,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<Compile Remove="PhilipsXmlStatsCollector.cs" />
<Compile Remove="WebOs5StatsCollector.cs" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,119 @@
using System;
using System.IO;
using System.Text;
namespace Spike.Technisat
{
internal class TechnisatDecrypt
{
static void Main()
{
var file = @"C:\Sources\ChanSort\TestFiles\TestFiles_Div\TechniSat\thenicnic\database.cdp";
var original = File.ReadAllBytes(file);
var decrypted = CdpDecrypt(original);
File.WriteAllText($"{file}.txt", decrypted.Replace("\0", ""), encoding);
var reencrypted = CdpEncrypt(decrypted);
File.WriteAllBytes($"{file}.enc", reencrypted);
// validate that decrypt + encrypt produces the original data
if (reencrypted.Length != original.Length)
throw new Exception("Incorrect file length");
for (int i = 0; i < original.Length; i++)
{
if (reencrypted[i] != original[i])
throw new Exception("Data corrupted at index " + i);
}
}
static readonly Encoding encoding = Encoding.GetEncoding(1252);
const uint InitSeed = 0xAC15FF4B;
private const uint Polynomial = 0x80000062;
private static string CdpDecrypt(byte[] data)
{
uint state = InitSeed;
var sb = new StringBuilder(data.Length);
foreach (var b in data)
{
var o = 0;
for (int i = 0; i < 8; i++)
{
if ((state & 0x01) != 0)
{
state = (state ^ Polynomial) >> 1 | 0x80000000;
o ^= 1 << i;
}
else
state >>= 1;
}
o ^= b;
if (o == 0)
state = InitSeed;
sb.Append((char)o);
}
return sb.ToString();
}
private static byte[] CdpEncrypt(string text)
{
uint state = InitSeed;
var strm = new MemoryStream(text.Length);
foreach (var b in encoding.GetBytes(text))
{
var o = 0;
for (int i = 0; i < 8; i++)
{
if ((state & 0x01) != 0)
{
state = (state ^ Polynomial) >> 1 | 0x80000000;
o ^= 1 << i;
}
else
state >>= 1;
}
strm.WriteByte((byte)(o ^ b));
if (b == 0)
state = InitSeed;
}
var data = new byte[strm.Length];
Array.Copy(strm.GetBuffer(), data, strm.Length);
return data;
}
#if false
static readonly byte[] XorKey = { 255, 255, 255, 157, 27, 90, 156, 151, 214, 128, 125, 141, 0, 6, 245, 171 };
private static int k = 0;
private static byte XorDecode(byte b)
{
b ^= XorKey[k];
k = (k + 1) & 0x0F;
var o = 0;
if ((b & 0x80) != 0) o |= 0x01;
if ((b & 0x40) != 0) o |= 0x02;
if ((b & 0x20) != 0) o |= 0x04;
if ((b & 0x10) != 0) o |= 0x08;
if ((b & 0x08) != 0) o |= 0x10;
if ((b & 0x04) != 0) o |= 0x20;
if ((b & 0x02) != 0) o |= 0x40;
if ((b & 0x01) != 0) o |= 0x80;
return (byte)o;
}
#endif
}
}

Binary file not shown.

View File

@@ -1,8 +1,11 @@
ChanSort Change Log
===================
2023-08-13
2023-08-14
- added italian translation
- update polish translation
- added support for a Hisense HIS_SVL.BIN variant with different data layout
- Samsung .zip: allow editing stream and logo URLs for IP-channels
2023-06-01
- Panasonic LS 500 / LX 700 series: support for new firmware which doesn't export a hotel.bin file.

View File

@@ -3,7 +3,7 @@ setlocal
setlocal enabledelayedexpansion
cd /d %~dp0
set languages=cs de es hu pl pt ro ru tr
set languages=cs de es hu it pl pt ro ru tr
set curdate=%date:~6,4%-%date:~3,2%-%date:~0,2%
set target=%cd%\..\..\ChanSort_%curdate%
set DXversion=23.1
@@ -101,11 +101,11 @@ goto:eof
:copyLangDll
set source="C:\Program Files\DevExpress %DXversion%\Components\Bin\Framework\%2\DevExpress.%1.v%DXversion%.resources.dll"
if exist %source% xcopy /idy %source% "%target%\%2"
set source="d:\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.resources.dll"
set source="c:\daten\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.resources.dll"
if exist %source% xcopy /idy %source% "%target%\%2"
set source="C:\Program Files\DevExpress %DXversion%\Components\Bin\Framework\%2\DevExpress.%1.v%DXversion%.Core.resources.dll"
if exist %source% xcopy /idy %source% "%target%\%2"
set source="d:\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.Core.resources.dll"
set source="c:\daten\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.Core.resources.dll"
if exist %source% xcopy /idy %source% "%target%\%2"
goto:eof