CUETools & CUERipper: Local metadata cache implemented

CUETools: register qaac.exe in external encoders
CUERipper: hopefully fixed problems with Matrox desktop manager
CUERipper: now remembers the drive which was last used
CUERipper: added a way to reload metadata
taglib-sharp: fixed incompatibility with tags produced by qaac.exe
This commit is contained in:
chudov
2010-05-02 17:04:51 +00:00
parent 382ca8a67b
commit 691cc51ee8
18 changed files with 1287 additions and 750 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

View File

@@ -745,7 +745,19 @@ namespace JDP {
if (_batchPaths.Count == 0 && action == CUEAction.Encode)
{
if (checkBoxUseFreeDb.Checked || checkBoxUseMusicBrainz.Checked)
releases = cueSheet.LookupAlbumInfo(checkBoxUseFreeDb.Checked, checkBoxUseMusicBrainz.Checked);
releases = cueSheet.LookupAlbumInfo(checkBoxUseFreeDb.Checked, checkBoxUseMusicBrainz.Checked, true);
}
else // if checkBoxUseMetadataCache.Checked
{
try
{
CUEMetadata cache = CUEMetadata.Load(cueSheet.TOC.TOCID);
if (cache != null)
cueSheet.CopyMetadata(cache);
}
catch
{
}
}
this.Invoke((MethodInvoker)delegate()

View File

@@ -82,10 +82,12 @@ namespace JDP
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "eac3.ico");
this.imageList1.Images.SetKeyName(1, "freedb.ico");
this.imageList1.Images.SetKeyName(2, "musicbrainz.ico");
this.imageList1.Images.SetKeyName(3, "cue3.ico");
this.imageList1.Images.SetKeyName(0, "eac");
this.imageList1.Images.SetKeyName(1, "freedb");
this.imageList1.Images.SetKeyName(2, "musicbrainz");
this.imageList1.Images.SetKeyName(3, "cue");
this.imageList1.Images.SetKeyName(4, "tags");
this.imageList1.Images.SetKeyName(5, "local");
//
// textBox1
//

View File

@@ -8,8 +8,6 @@ using System.IO;
using System.Windows.Forms;
using CUETools.CDImage;
using CUETools.Processor;
using MusicBrainz;
using Freedb;
namespace JDP
{
@@ -43,38 +41,26 @@ namespace JDP
item.Tag = pic;
listChoices.Items.Add(item);
}
else if (i is MusicBrainz.Release)
else if (i is CUEMetadataEntry)
{
ReleaseInfo r = new ReleaseInfo(CUE, i as MusicBrainz.Release);
ListViewItem item = new ListViewItem(r.Text, 2);
item.Tag = r;
listChoices.Items.Add(item);
}
else if (i is Freedb.CDEntry)
{
ReleaseInfo r = new ReleaseInfo(CUE, i as Freedb.CDEntry);
ListViewItem item = new ListViewItem(r.Text, 1);
item.Tag = r;
CUEMetadataEntry entry = i as CUEMetadataEntry;
ListViewItem item = new ListViewItem(entry.ToString(), entry.ImageKey);
item.Tag = entry;
listChoices.Items.Add(item);
// check if the entry contains non-iso characters,
// and add a second one if it does
ReleaseInfo r2 = new ReleaseInfo(CUE, i as Freedb.CDEntry);
r2.FixEncoding();
if (!r.Equals(r2))
if (entry.ImageKey == "freedb")
{
item = new ListViewItem(r2.Text, 1);
item.Tag = r2;
listChoices.Items.Add(item);
// check if the entry contains non-iso characters,
// and add a second one if it does
CUEMetadata copy = new CUEMetadata(entry.metadata);
if (copy.FreedbToEncoding())
{
entry = new CUEMetadataEntry(copy, entry.TOC, entry.ImageKey);
item = new ListViewItem(entry.ToString(), entry.ImageKey);
item.Tag = entry;
listChoices.Items.Add(item);
}
}
return;
}
else if (i is CUESheet)
{
ReleaseInfo r = new ReleaseInfo(CUE);
ListViewItem item = new ListViewItem(r.Text, 3);
item.Tag = r;
listChoices.Items.Add(item);
}
else
{
@@ -88,8 +74,6 @@ namespace JDP
{
set
{
if (CUE != null)
AddItem(CUE);
foreach (object i in value)
AddItem(i);
if (CUE != null)
@@ -133,12 +117,12 @@ namespace JDP
}
}
private ReleaseInfo ChosenRelease
private CUEMetadataEntry ChosenRelease
{
get
{
object o = ChosenObject;
return o != null && o is ReleaseInfo ? o as ReleaseInfo : null;
return o != null && o is CUEMetadataEntry ? o as CUEMetadataEntry : null;
}
}
@@ -152,10 +136,11 @@ namespace JDP
private void frmChoice_FormClosing(object sender, FormClosingEventArgs e)
{
ReleaseInfo ri = ChosenRelease;
CUEMetadataEntry ri = ChosenRelease;
if (e.CloseReason != CloseReason.None || DialogResult != DialogResult.OK || ri == null || CUE == null)
return;
CUE.CopyMetadata(ri.metadata);
ri.metadata.Save();
}
private void AutoResizeTracks()
@@ -176,7 +161,7 @@ namespace JDP
TagLib.IPicture picture = item as TagLib.IPicture;
using (MemoryStream imageStream = new MemoryStream(picture.Data.Data, 0, picture.Data.Count))
try { pictureBox1.Image = Image.FromStream(imageStream); }
catch { }
catch { }
textBox1.Hide();
pictureBox1.Show();
tableLayoutPanel1.SetRowSpan(pictureBox1, 4);
@@ -185,17 +170,17 @@ namespace JDP
{
textBox1.Text = (item as CUEToolsSourceFile).contents.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
}
else if (item != null && item is ReleaseInfo)
else if (item != null && item is CUEMetadataEntry)
{
ReleaseInfo r = (item as ReleaseInfo);
CUEMetadataEntry r = (item as CUEMetadataEntry);
listTracks.Items.Clear();
foreach (TrackInfo track in r.metadata.Tracks)
foreach (CUETrackMetadata track in r.metadata.Tracks)
{
listTracks.Items.Add(new ListViewItem(new string[] {
track.Title,
(listTracks.Items.Count + 1).ToString(),
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].StartMSF,
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].LengthMSF
r.TOC[listTracks.Items.Count + r.TOC.FirstAudio].StartMSF,
r.TOC[listTracks.Items.Count + r.TOC.FirstAudio].LengthMSF
}));
}
AutoResizeTracks();
@@ -237,7 +222,7 @@ namespace JDP
private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
ReleaseInfo ri = ChosenRelease;
CUEMetadataEntry ri = ChosenRelease;
if (ri != null && e.Label != null)
ri.metadata.Tracks[e.Item].Title = e.Label;
}
@@ -246,13 +231,13 @@ namespace JDP
{
if (e.KeyCode == Keys.Enter)
{
if (listTracks.FocusedItem.Index + 1 < listTracks.Items.Count) // && e.editing
{
listTracks.FocusedItem.Selected = false;
listTracks.FocusedItem = listTracks.Items[listTracks.FocusedItem.Index + 1];
listTracks.FocusedItem.Selected = true;
listTracks.FocusedItem.BeginEdit();
}
if (listTracks.FocusedItem.Index + 1 < listTracks.Items.Count) // && e.editing
{
listTracks.FocusedItem.Selected = false;
listTracks.FocusedItem = listTracks.Items[listTracks.FocusedItem.Index + 1];
listTracks.FocusedItem.Selected = true;
listTracks.FocusedItem.BeginEdit();
}
}
}
@@ -270,13 +255,13 @@ namespace JDP
private void listMetadata_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
ListViewItem item = ChosenItem;
ReleaseInfo r = ChosenRelease;
CUEMetadataEntry r = ChosenRelease;
if (e.Label != null && item != null && r != null)
{
switch (e.Item)
{
case 0:
foreach (TrackInfo track in r.metadata.Tracks)
foreach (CUETrackMetadata track in r.metadata.Tracks)
if (track.Artist == r.metadata.Artist)
track.Artist = e.Label;
r.metadata.Artist = e.Label;
@@ -287,7 +272,7 @@ namespace JDP
case 4: r.metadata.DiscNumber = e.Label; break;
case 5: r.metadata.TotalDiscs = e.Label; break;
}
item.Text = r.Text;
item.Text = r.ToString();
}
}
@@ -297,67 +282,4 @@ namespace JDP
PictureBoxSizeMode.CenterImage : PictureBoxSizeMode.Zoom;
}
}
sealed class ReleaseInfo
{
public CUESheet metadata;
public ReleaseInfo(CUESheet cue)
{
metadata = new CUESheet(cue.Config);
metadata.TOC = cue.TOC;
metadata.CopyMetadata(cue);
}
public ReleaseInfo(CUESheet cue, Freedb.CDEntry release)
{
metadata = new CUESheet(cue.Config);
metadata.TOC = cue.TocFromCDEntry(release);
metadata.FillFromFreedb(release);
}
public ReleaseInfo(CUESheet cue, MusicBrainz.Release release)
{
metadata = new CUESheet(cue.Config);
metadata.TOC = cue.TOC;
metadata.FillFromMusicBrainz(release);
}
private string FixEncoding(string src)
{
Encoding iso = Encoding.GetEncoding("iso-8859-1");
return Encoding.Default.GetString(iso.GetBytes(src));
}
public string Text
{
get
{
return string.Format("{0}: {1} - {2}",
metadata.Year == "" ? "YYYY" : metadata.Year,
metadata.Artist == "" ? "Unknown Artist" : metadata.Artist,
metadata.Title == "" ? "Unknown Title" : metadata.Title);
}
}
public void FixEncoding()
{
metadata.Artist = FixEncoding(metadata.Artist);
metadata.Title = FixEncoding(metadata.Title);
foreach (TrackInfo track in metadata.Tracks)
{
track.Title = FixEncoding(track.Title);
track.Artist = FixEncoding(track.Artist);
}
}
public bool Equals(ReleaseInfo r)
{
bool equal = metadata.Title == r.metadata.Title && metadata.Artist == r.metadata.Artist;
for (int t = 0; t < metadata.TrackCount; t++)
if (r.metadata.Tracks[t].Title != metadata.Tracks[t].Title || r.metadata.Tracks[t].Artist != metadata.Tracks[t].Artist)
equal = false;
return equal;
}
}
}
}

View File

@@ -166,83 +166,119 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACg
EQAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8ALgADAgEDAxQBHAMw
AUwDRAF5A1ABmgNQAaQDUAGaA0QBeQMwAUwDFAEcAwMBBAgAA5YB/wEfAgAB/wEfAgAB/wEfAgAB/wEf
AgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEf
AgAB/wEfAgAB/wQAAVIBzAL/AR8CmQH/AR8CmQH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/
AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/EAADAgEDAxQBHAMwAUwDRAF5A1ABmgNQ
AaQDUAGaA0QBeQMwAUwDFAEcAwMBBBAAAwQBBgMkATYDUwGwAWMCXgHlAXwCZAH7AbMCqQH/AXwCbQH7
A2AB6wNaAdMDUwGsA0cBggMoATwDBwEJBAABzAKZAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8D6gH/
A+oB/wPqAf8BgAIAAf8D6gH/A+oB/wPqAf8BgAIAAf8BgAIAAf8BUgIAAf8BHwIAAf8BHwKZAf8DAAH/
AxUB/wM5Af8DAAH/AwgB/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFS
AcwC/wFSAcwC/wFSAcwC/wgAAwQBBgMkATYDUwGwAWMCXgHlAXwCZAH7AbMCqQH/AXwCbQH7A2AB6wNa
AdMDUwGsA0cBggMoATwDBwEJCAADAgEDAzEBTwNcAeoBzwK0Av8C3QL/AuIC/wLoAv8C7gL/AvMB/wPP
Af8DXwHzA1gBxgNMAZIDKAE8AwMBBAHMApkB/wGAAgAB/wGAAgAB/wGAAgAB/wPxAf8BgAIAAf8BgAIA
Af8D8QH/AYACAAH/A/EB/wGAAgAB/wGAAgAB/wPxAf8BgAIAAf8BgAIAAf8BHwIAAf8DAAH/A8wN/wM5
Af8DCAH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/
BAADAgEDAzEBTwNcAeoBzwK0Av8C3QL/AuIC/wLoAv8C7gL/AvMB/wPPAf8DXwHzA1gBxgNMAZIDKAE8
AwMBBAQAAyYBOANtAfcB9QLHAv8C0gL/AtgC/wLdAv8C4gL/AugC/wL0Bf8D9QH/A4UB+wNYAcYDRwGC
AxQBHAHMApkB/wGZAQABHwH/AYACAAH/AYACAAX/AYACAAH/AYACAAX/AYACAAX/AYACAAH/AYACAAX/
AYACAAH/AYACAAH/AR8CAAH/AwAB/wPMEf8DAAH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/
AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/BAADJgE4A20B9wH1AscC/wLSAv8C2AL/At0C/wLiAv8C6AL/
AvQF/wP1Af8DhQH7A1gBxgNHAYIDFAEcAwcBCQNeAd0B9QLNAv8CzwL/As0C/wLSAv8C2AL/At0C/wLi
Av8C+gn/A/UB/wNfAfMDUwGsAzABTAHMApkB/wGZAQABHwH/AYACAAH/AYACAAH/AYACAA3/AYACAA3/
AYACAAH/AYACAAH/AYACAAH/AR8CAAH/AR8CmQH/AwgB/wNjAf8DwAH/A8AB/wPMAf8DAAH/AxUB/wMA
Af8DAAH/AwAB/wMAAf8DFQH/AVIBzAL/AVIBzAL/AVIBzAL/AwcBCQNeAd0B9QLNAv8CzwL/As0C/wLS
Av8C2AL/At0C/wLiAv8C+gn/A/UB/wNfAfMDUwGsAzABTAM+AWoBxgKxAv8C2QL/AtQC/wLPAv8CzQL/
AdQB2wL/AdcB4gL/AeQB6hH/AdICzAH/A1oB0wNDAXcBzAKZAf8BmQEAAR8B/wGAAgAB/wGAAgAB/wGA
AgAB/wGAAgAB/wGAAgAF/wGAAgAF/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wEfAgAB/wFS
AcwC/wEfApkB/wMIAf8DAAH/AwAF/wMAAf8DCAH/AaQCoAn/A5kB/wMVAf8DFQH/AVIBzAL/AVIBzAL/
Az4BagHGArEC/wLZAv8C1AL/As8C/wLNAv8B1AHbAv8B1wHiAv8B5AHqEf8B0gLMAf8DWgHTA0MBdwNW
AbYB/wLjAf8BAAEaARsB/wEAARoBGwH/AQABGgEbAv8B3gHnAf8BAAEaARsC/wHRAfMB/wEAARoBGwL/
AfgC/wFaAmAB/wEAARoBGwH/AVoCYAH/AcwCmQH/AVwCVQHqA04BlAHMApkB/wGZAQABHwH/AYACAAH/
AYACAAH/AYACAAH/AYACAAH/AYACAAX/AYACAAX/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/
AR8CAAH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AwAF/wMAAf8DFRH/A8wB/wMAAf8BUgHMAv8BUgHM
Av8DVgG2Af8C4wH/AVoCYAH/AQABGgEbAf8BWgJgAv8B3gHnAf8BWgJgAf8BAAEaARsB/wFaAmAC/wH4
Av8BAAEaARsB/wEAARoBGwH/AQABGgEbAf8BzAKZAf8BXAJVAeoDTgGUA2EB4gH/AucB/wEAARoBGwL/
At4C/wLgAv8B7wH8Af8BAAEaARsC/wHiAfwB/wEAARoBGwH/AfwB8AH5Af8BAAEaARsB/wHMApkB/wEA
ARoBGwH/AcwCmQH/AW0CbAH3A1EBoQHMApkB/wGZAQABHwH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/
AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AR8CAAH/
AZkCUgH/AZkCUgH/AZkCUgH/AZkCUgH/AwAF/wMAAf8DAAH/AzkB/wPMDf8DAAH/AZkCUgH/AZkCUgH/
A2EB4gH/AucB/wEAARoBGwL/At4B/wEAARoBGwL/Ae8B/AH/AQABGgEbAv8B4gH8Af8BAAEaARsB/wH8
AfAB+QH/AQABGgEbAf8BzAKZAf8BzAKZAf8BzAKZAf8BbQJsAfcDUQGhAZ4CjAH/AekCvgH/AQABGgEb
Af8BAAEaARsB/wH5AtYC/wHpAfMB/wEAARoBGwH/AQABGgEbAf8BAAEaARsB/wH5AegB7AH/AQABGgEb
Af8B5gK6Af8B5gK9Af8B5gLAAf8BpgKUAf8DTgGUNP8D8QH/A+oB/wOAAf8BmQJSAf8BmQJSAf8BmQJS
Af8BmQJSAf8DAAX/AwAB/wNBAf8DCAH/AwAB/wMAAf8DAAX/AwAB/wGZAlIB/wGZAlIB/wGeAowB/wHp
Ar4B/wEAARoBGwH/AfMCxQH/AfkC1gL/AekB8wH/AQABGgEbAv8B6QHzAf8BAAEaARsB/wH5AegB7AH/
AQABGgEbAf8BAAEaARsB/wHmAr0B/wHmAsAB/wGmApQB/wNOAZQDXQHSAdsCqAH/AQABGgEbAf8B6gK3
Af8B8wLNAv8B7gH8Af8BAAEaARsC/wHSAfUB/wEAARoBGwL/AfQB/AH/AQABGgEbAv8C2AH/AQABGgEb
Av8C4gH/A2IB9gNDAXcE/wGZAQABHwn/AYACAA3/AYACAAH/AYACAA3/AYACAAH/AYACAAH/A4AB/wGZ
AlIB/wGZAlIB/wGZAlIB/wGZAlIB/wMABf8DCAH/AwAB/wMVAf8DQQH/A0EB/wMABf8DAAH/AZkCUgH/
AZkCUgH/A10B0gHbAqgB/wEAARoBGwH/AeoCtwH/AQABGgEbAv8B7gH8Af8BAAEaARsC/wHSAfUB/wEA
ARoBGwL/AfQB/AH/AQABGgEbAv8C2AL/At0C/wLiAf8DYgH2A0MBdwNWAbEB1QKiAf8BAAEaARsB/wEA
ARoBGwH/AQABGgEbAv8B9gL/AVoCYAH/AQABGgEbAf8BWgJgAv8B4AHnAf8BWgJgAf8BAAEaARsB/wFa
AmAC/wLdAf8DWgHkAzABTAT/AZkBAAEfCf8BgAIACf8BgAIAEf8BgAIAAf8D8QH/A+oB/wOAAf8BmQJS
Af8BmQJSAf8BmQJSAf8BmQJSAf8DAAn/A5kB/wMVAf8DAAH/AwgB/wMABf8DAAH/AZkCUgH/AZkCUgH/
A1YBsQHVAqIB/wFaAmAB/wEAARoBGwH/AVoCYAL/AfYC/wEAARoBGwL/AdIB9QH/AQABGgEbAv8B4AHn
Af8BAAEaARsB/wEAARoBGwH/AQABGgEbAv8C3QH/A1oB5AMwAUwDMgFQAcMCvxL/AewB8QL/AdsB5wL/
AdkB3gL/AtQC/wLPAv8CzQL/AtIB/wHGAq0B/wNTAawDFAEbBP8BmQEAAR8J/wGAAgAJ/wGAAgAB/wGA
AgAB/wGAAgAB/wGAAgAF/wGAAgAB/wGAAgAB/wGAAgAB/wEfAgAB/wGZAlIB/wGZAlIB/wGZAlIB/wGZ
AlIB/wMAAf8DwA3/A8wB/wNLAf8DAAX/AwAB/wGZAlIB/wGZAlIB/wMyAVABwwK/Ev8B7AHxAv8B2wHn
Av8B2QHeAv8C1AL/As8C/wLNAv8C0gH/AcYCrQH/A1MBrAMUARsEAANaAcAD9Qr/Av4C/wLnAv8C4wL/
At4C/wLZAv8C1AL/As8B/wH1AscB/wNfAeMDIwE0AwIBAwT/AZkBAAEfAf8BgAIABf8BgAIACf8BgAIA
Cf8BgAIABf8BgAIAAf8D8QH/A+oB/wEfAgAB/wGZAlIB/wGZAlIB/wGZAlIB/wGZAlIB/wMVAf8DOQH/
A8AZ/wMAAf8BmQJSAf8BmQJSAf8EAANaAcAD9Qr/Av4C/wLnAv8C4wL/At4C/wLZAv8C1AL/As8B/wH1
AscB/wNfAeMDIwE0AwIBAwQAAxcBIANiAe8D9Qb/AvgC/wLsAv8C5wL/AuMC/wLeAv8C2QH/AfUCzQH/
A20B9wMwAU0DBAEGBAAE/wGZAh8J/wGAAgAB/wGAAgAJ/wGAAgAB/wGAAgAN/wGAAgAB/wGAAgAB/wOG
Af8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8DFQH/AwAB/wMVAf8DmRH/AwAB/wGZAlIB/wGZ
AlIB/wQAAxcBIANiAe8D9Qb/AvgC/wLsAv8C5wL/AuMC/wLeAv8C2QH/AfUCzQH/A20B9wMwAU0DBAEG
DAADFwEgA1oBwAPGAv8C9wL/AvIC/wLsAv8C5wL/AuMB/wHGArEB/wNeAdADJAE2AwIBAwgABP8BmQIf
Lf8D8QH/A+oB/wOGAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8DFQH/
AwAB/wMIAf8DYwH/A8wF/wMAAf8BmQJSAf8BmQJSAf8IAAMXASADWgHAA8YC/wL3Av8C8gL/AuwC/wLn
Av8C4wH/AcYCsQH/A14B0AMkATYDAgEDGAADMgFQA1EBogNdAdIBjAKJAf8DYAHUA1QBpgM3AVoDBQEH
EAAI/wHMApkt/wPxAf8DwAH/BAABmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJS
Af8BmQJSAf8BmQJSAf8DCAH/AwAB/wM5Af8DFQH/AZkCUgH/FAADMgFQA1EBogNdAdIBjAKJAf8DYAHU
A1QBpgM3AVoDBQEHEAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAeABAwIA
AYABAQHgAQMBwAEBBAABwAEBAYAFAAGAAQABgAUAAYBBAAGABQABgAEAAYABAQQAAYABAQHAAQMEAAHA
AQMB8AEPAgABgAEBAfABDws=
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC
GgAAAk1TRnQBSQFMAgEBBgEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIB4AAh4BHQEqAj8BNwF3Ah4BHQEq8AACHgEdASkCQgE6AXQC/wHwAf8CQgE6
AXQCHgEdASnoAAIeAR0BKAJGAT4BcQL/AfAB/wLpAdoD/wHxAf8CRgE+AXECHgEdASggAAI2ATIBWQJA
ATcBdgJAATcBdgIvASwBSwQAAi8BLAFLAkABNwF2AkABNwF2AkABNwF2AkABNwF2Ai8BLAFLBAACLwEs
AUsCQAE3AXYCQAE3AXYCNgEyAVmAAAIeAR0BJwJIAUEBbwL/AfAB/wHrAd0BsQH/AfcBwQE4Af8B7QHf
AbMD/wHyAf8CSAFBAW8CHgEdASccAAJFAT0BcgL5AekB/wLzAeMB/wJzAWUBtQI9ATQBeAKLAX0BwwLz
AeMB/wLzAeMB/wLzAeMB/wLzAeMB/wKLAX0BwwI9ATQBeAJzAWUBtQLzAeMB/wL5AekB/wJFAT0BcoAA
AkkBQQFuAv8B8AH/AukB2gH/AecBqwEiAf8B5wGrASIB/wHnAasBIgH/AeoB2wGwA/8B9AH/AkkBQQFu
Ah4BHQEnGAACSAFBAW8C9AHmAf8C6QHaAf8C7wHgAf8C9AHmAf8C7wHgAf8C6QHaAf8C6QHaAf8C6QHa
Af8C6QHaAf8C7wHgAf8C9AHmAf8C7wHgAf8C6QHaAf8C9AHmAf8CSAFBAW+AAAIeAR0BJwJKAUIBbQL/
AfEB/wHnAdcBqwH/AdcBlgENAf8B1wGWAQ0B/wHXAZYBDQH/AegB2AGuA/8B9QH/AkoBQgFtAh4BHQEn
FAACSQFCAW4C9gHoAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHe
Af8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C9gHoAf8CSQFCAW6EAAIdARwBJgJKAUMBbAL/AfIB/wHl
AdQBqQH/Ac0BiQEAAf8BzQGJAQAB/wHNAYkBAAH/AegB1wGvA/8B9wH/AkoBQwFsAh0BHAEmEAACSgFD
AW0C9wHsAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHj
Af8C7gHjAf8C7gHjAf8C7gHjAf8C9wHsAf8CSgFDAW2IAAIdARwBJgJKAUMBawL/AfQB/wHnAdYBrAH/
AdEBjgEFAf8B0QGOAQUB/wHRAY4BBQH/AewB2wGzA/8B+AH/AkoBQwFrAh0BHAEmDAACSgFDAWsC+QHv
Af8C8QHoAf8C8QHoAf8C8QHoAf8C8QHoAf8C8QHoAf8DAAH/AVABhQGTAf8BuALLAf8C8QHoAf8C8QHo
Af8C8QHoAf8C8QHoAf8C+QHvAf8CSgFDAWuMAAIdARwBJgJLAUQBawL/AfUB/wHrAdwBswH/Ad8BoQEY
Af8B3wGhARgB/wHfAaEBGAH/AfEB4gG7A/8B+gH/AksBRAFrAx0BJggAAksBRAFqAvoB8wH/AvUB7gH/
AvUB7gH/AvUB7gH/AvUB7gH/AvUB7gH/AXsBsQHAAf8B2QH0Av8BPgGcAasB/wG1AdMB1AH/AvUB7gH/
AvUB7gH/AvUB7gH/AvoB8wH/AksBRAFqkAADHQEmAkwBRQFqAv8B9wH/AfIB5AG7Af8B8AG4AS8B/wHw
AbgBLwH/AfABuAEvAf8C+AH0A/8B+wH/AkwBRQFqAh0BHAElBAACTAFFAWkC/AH3Af8C+AHzAf8C+AHz
Af8C+AHzAf8C+AHzAf8C+AHzAf8B1AHmAecB/wFIAbQBwwH/AXgB5gH3Af8BPwGdAa0B/wG2AdUB1wH/
AvgB8wH/AvgB8wH/AvwB9wH/AkwBRQFplAACHQEcASUCTAFFAWkC/wH4Af8B9wHqAcMB/wH9AckBQAH/
AfkB7AHHAf8C+wH3Af8C/AH5A/8B/AH/AkwBRQFpAh0BHAElAkwBRQFoAv0B+gH/AvsB9wH/AvsB9wH/
AvsB9wH/AvsB9wH/AvsB9wH/AvsB9wH/Ab4B5QHoAf8BSQG1AcUB/wF4AeYB9wH/AUABngGuAf8BuQHY
AdsB/wL7AfcB/wL9AfoB/wJMAUUBaJgAAh0BHAElAkwBRQFoAv8B+gH/AvgB9AH/AvsB9wH/AugB3gH/
AtgByQH/AugB3gP/Af4B/wJMAUUBaAJNAUcBaAL+Af0B/wL9AfsB/wL9AfsB/wL9AfsB/wL9AfsB/wL9
AfsB/wL9AfsB/wL9AfsB/wHAAeYB6wH/AUoBtQHGAf8BeAHmAfcB/wFAAZ4BrwH/Ab4B2AHcAf8C/gH9
Af8CTQFHAWicAAIdARwBJQJNAUYBaAL/AfsB/wL8AfkB/wLLAbsB/wQAAssBvAP/Af4B/wJNAUYBaAJO
AUcBZyT/AcEB6AHuAf8BSgG2AccB/wF4AeYB9wH/A5MB/wPVAf8CTgFHAWegAAIdARwBJQJNAUYBZwL/
AfwB/wLUAcoB/wKvAZ8B/wLUAcsD/wH+Af8CTQFGAWcCOwE3AU0CTgFHAWYCTgFHAWYCTgFHAWYCTgFH
AWYCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYBVQFmAWABjAJeAVgBpwP3Af8CSQFY
AbsCRgFVAXqkAAMcASQCTgFHAWcC/wH+A/8B/gP/Af4F/wJOAUcBZzAAAxsBJAJBAU4BfAKAAv8CJwGM
AcGoAAMcASQCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYCOwE4AU00AAImASwBOQItAZUBrwInATQBQIwA
AwIBAwMUARwDMAFMA0QBeQNQAZoDUAGkA1ABmgNEAXkDMAFMAxQBHAMDAQQIAAOWAf8BHgIAAf8BHgIA
Af8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIA
Af8BHgIAAf8BHgIAAf8BHgIAAf8EAAFRAcwC/wEeApkB/wEeApkB/wFRAcwC/wFRAcwC/wFRAcwC/wFR
AcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/xAAAwIBAwMUARwDMAFM
A0QBeQNQAZoDUAGkA1ABmgNEAXkDMAFMAxQBHAMDAQQQAAMEAQYDJAE2A1MBsAFjAl4B5QF5AmIB+wGz
AqkB/wF5AmoB+wNgAesDWgHTA1MBrANHAYIDKAE8AwcBCQQAAcwCmQH/AYACAAH/AYACAAH/AYACAAH/
AYACAAH/A+oB/wPqAf8D6gH/AYACAAH/A+oB/wPqAf8D6gH/AYACAAH/AYACAAH/AVECAAH/AR4CAAH/
AR4CmQH/AwAB/wMUAf8DOAH/AwAB/wMHAf8BUQHMAv8BUQHMAv8BUQHMAv8BUQHMAv8BUQHMAv8BUQHM
Av8BUQHMAv8BUQHMAv8BUQHMAv8BUQHMAv8IAAMEAQYDJAE2A1MBsAFjAl4B5QF5AmIB+wGzAqkB/wF5
AmoB+wNgAesDWgHTA1MBrANHAYIDKAE8AwcBCQgAAwIBAwMxAU8DXAHqAc8CtAL/At0C/wLiAv8C6AL/
Au4C/wLzAf8DzwH/A18B8wNYAcYDTAGSAygBPAMDAQQBzAKZAf8BgAIAAf8BgAIAAf8BgAIAAf8D8QH/
AYACAAH/AYACAAH/A/EB/wGAAgAB/wPxAf8BgAIAAf8BgAIAAf8D8QH/AYACAAH/AYACAAH/AR4CAAH/
AwAB/wPMDf8DOAH/AwcB/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFR
AcwC/wFRAcwC/wQAAwIBAwMxAU8DXAHqAc8CtAL/At0C/wLiAv8C6AL/Au4C/wLzAf8DzwH/A18B8wNY
AcYDTAGSAygBPAMDAQQEAAMmATgDbQH3AfUCxwL/AtIC/wLYAv8C3QL/AuIC/wLoAv8C9AX/A/UB/wOE
AfsDWAHGA0cBggMUARwBzAKZAf8BmQEAAR4B/wGAAgAB/wGAAgAF/wGAAgAB/wGAAgAF/wGAAgAF/wGA
AgAB/wGAAgAF/wGAAgAB/wGAAgAB/wEeAgAB/wMAAf8DzBH/AwAB/wFRAcwC/wFRAcwC/wFRAcwC/wFR
AcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wQAAyYBOANtAfcB9QLHAv8C0gL/AtgC/wLd
Av8C4gL/AugC/wL0Bf8D9QH/A4QB+wNYAcYDRwGCAxQBHAMHAQkDXgHdAfUCzQL/As8C/wLNAv8C0gL/
AtgC/wLdAv8C4gL/AvoJ/wP1Af8DXwHzA1MBrAMwAUwBzAKZAf8BmQEAAR4B/wGAAgAB/wGAAgAB/wGA
AgAN/wGAAgAN/wGAAgAB/wGAAgAB/wGAAgAB/wEeAgAB/wEeApkB/wMHAf8DYgH/A8AB/wPAAf8DzAH/
AwAB/wMUAf8DAAH/AwAB/wMAAf8DAAH/AxQB/wFRAcwC/wFRAcwC/wFRAcwC/wMHAQkDXgHdAfUCzQL/
As8C/wLNAv8C0gL/AtgC/wLdAv8C4gL/AvoJ/wP1Af8DXwHzA1MBrAMwAUwDPgFqAcYCsQL/AtkC/wLU
Av8CzwL/As0C/wHUAdsC/wHXAeIC/wHkAeoR/wHSAswB/wNaAdMDQwF3AcwCmQH/AZkBAAEeAf8BgAIA
Af8BgAIAAf8BgAIAAf8BgAIAAf8BgAIABf8BgAIABf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIA
Af8BHgIAAf8BUQHMAv8BHgKZAf8DBwH/AwAB/wMABf8DAAH/AwcB/wGkAqAJ/wOZAf8DFAH/AxQB/wFR
AcwC/wFRAcwC/wM+AWoBxgKxAv8C2QL/AtQC/wLPAv8CzQL/AdQB2wL/AdcB4gL/AeQB6hH/AdICzAH/
A1oB0wNDAXcDVgG2Af8C4wH/AQABGQEaAf8BAAEZARoB/wEAARkBGgL/Ad4B5wH/AQABGQEaAv8B0QHz
Af8BAAEZARoC/wH4Av8BWQJfAf8BAAEZARoB/wFZAl8B/wHMApkB/wFcAlUB6gNOAZQBzAKZAf8BmQEA
AR4B/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAF/wGAAgAF/wGAAgAB/wGAAgAB/wGAAgAB/wGA
AgAB/wGAAgAB/wEeAgAB/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wMABf8DAAH/AxQR/wPMAf8DAAH/
AVEBzAL/AVEBzAL/A1YBtgH/AuMB/wFZAl8B/wEAARkBGgH/AVkCXwL/Ad4B5wH/AVkCXwH/AQABGQEa
Af8BWQJfAv8B+AL/AQABGQEaAf8BAAEZARoB/wEAARkBGgH/AcwCmQH/AVwCVQHqA04BlANhAeIB/wLn
Af8BAAEZARoC/wLeAv8C4AL/Ae8B/AH/AQABGQEaAv8B4gH8Af8BAAEZARoB/wH8AfAB+QH/AQABGQEa
Af8BzAKZAf8BAAEZARoB/wHMApkB/wFtAmwB9wNRAaEBzAKZAf8BmQEAAR4B/wGAAgAB/wGAAgAB/wGA
AgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGA
AgAB/wEeAgAB/wGZAlEB/wGZAlEB/wGZAlEB/wGZAlEB/wMABf8DAAH/AwAB/wM4Af8DzA3/AwAB/wGZ
AlEB/wGZAlEB/wNhAeIB/wLnAf8BAAEZARoC/wLeAf8BAAEZARoC/wHvAfwB/wEAARkBGgL/AeIB/AH/
AQABGQEaAf8B/AHwAfkB/wEAARkBGgH/AcwCmQH/AcwCmQH/AcwCmQH/AW0CbAH3A1EBoQGeAowB/wHp
Ar4B/wEAARkBGgH/AQABGQEaAf8B+QLWAv8B6QHzAf8BAAEZARoB/wEAARkBGgH/AQABGQEaAf8B+QHo
AewB/wEAARkBGgH/AeYCugH/AeYCvQH/AeYCwAH/AaYClAH/A04BlDT/A/EB/wPqAf8DgAH/AZkCUQH/
AZkCUQH/AZkCUQH/AZkCUQH/AwAF/wMAAf8DQAH/AwcB/wMAAf8DAAH/AwAF/wMAAf8BmQJRAf8BmQJR
Af8BngKMAf8B6QK+Af8BAAEZARoB/wHzAsUB/wH5AtYC/wHpAfMB/wEAARkBGgL/AekB8wH/AQABGQEa
Af8B+QHoAewB/wEAARkBGgH/AQABGQEaAf8B5gK9Af8B5gLAAf8BpgKUAf8DTgGUA10B0gHbAqgB/wEA
ARkBGgH/AeoCtwH/AfMCzQL/Ae4B/AH/AQABGQEaAv8B0gH1Af8BAAEZARoC/wH0AfwB/wEAARkBGgL/
AtgB/wEAARkBGgL/AuIB/wNiAfYDQwF3BP8BmQEAAR4J/wGAAgAN/wGAAgAB/wGAAgAN/wGAAgAB/wGA
AgAB/wOAAf8BmQJRAf8BmQJRAf8BmQJRAf8BmQJRAf8DAAX/AwcB/wMAAf8DFAH/A0AB/wNAAf8DAAX/
AwAB/wGZAlEB/wGZAlEB/wNdAdIB2wKoAf8BAAEZARoB/wHqArcB/wEAARkBGgL/Ae4B/AH/AQABGQEa
Av8B0gH1Af8BAAEZARoC/wH0AfwB/wEAARkBGgL/AtgC/wLdAv8C4gH/A2IB9gNDAXcDVgGxAdUCogH/
AQABGQEaAf8BAAEZARoB/wEAARkBGgL/AfYC/wFZAl8B/wEAARkBGgH/AVkCXwL/AeAB5wH/AVkCXwH/
AQABGQEaAf8BWQJfAv8C3QH/A1oB5AMwAUwE/wGZAQABHgn/AYACAAn/AYACABH/AYACAAH/A/EB/wPq
Af8DgAH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AwAJ/wOZAf8DFAH/AwAB/wMHAf8DAAX/AwAB/wGZ
AlEB/wGZAlEB/wNWAbEB1QKiAf8BWQJfAf8BAAEZARoB/wFZAl8C/wH2Av8BAAEZARoC/wHSAfUB/wEA
ARkBGgL/AeAB5wH/AQABGQEaAf8BAAEZARoB/wEAARkBGgL/At0B/wNaAeQDMAFMAzIBUAHDAr8S/wHs
AfEC/wHbAecC/wHZAd4C/wLUAv8CzwL/As0C/wLSAf8BxgKtAf8DUwGsAxQBGwT/AZkBAAEeCf8BgAIA
Cf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIABf8BgAIAAf8BgAIAAf8BgAIAAf8BHgIAAf8BmQJRAf8BmQJR
Af8BmQJRAf8BmQJRAf8DAAH/A8AN/wPMAf8DSgH/AwAF/wMAAf8BmQJRAf8BmQJRAf8DMgFQAcMCvxL/
AewB8QL/AdsB5wL/AdkB3gL/AtQC/wLPAv8CzQL/AtIB/wHGAq0B/wNTAawDFAEbBAADWgHAA/UK/wL+
Av8C5wL/AuMC/wLeAv8C2QL/AtQC/wLPAf8B9QLHAf8DXwHjAyMBNAMCAQME/wGZAQABHgH/AYACAAX/
AYACAAn/AYACAAn/AYACAAX/AYACAAH/A/EB/wPqAf8BHgIAAf8BmQJRAf8BmQJRAf8BmQJRAf8BmQJR
Af8DFAH/AzgB/wPAGf8DAAH/AZkCUQH/AZkCUQH/BAADWgHAA/UK/wL+Av8C5wL/AuMC/wLeAv8C2QL/
AtQC/wLPAf8B9QLHAf8DXwHjAyMBNAMCAQMEAAMXASADYgHvA/UG/wL4Av8C7AL/AucC/wLjAv8C3gL/
AtkB/wH1As0B/wNtAfcDMAFNAwQBBgQABP8BmQIeCf8BgAIAAf8BgAIACf8BgAIAAf8BgAIADf8BgAIA
Af8BgAIAAf8DhgH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AxQB/wMAAf8DFAH/A5kR/wMA
Af8BmQJRAf8BmQJRAf8EAAMXASADYgHvA/UG/wL4Av8C7AL/AucC/wLjAv8C3gL/AtkB/wH1As0B/wNt
AfcDMAFNAwQBBgwAAxcBIANaAcADxgL/AvcC/wLyAv8C7AL/AucC/wLjAf8BxgKxAf8DXgHQAyQBNgMC
AQMIAAT/AZkCHi3/A/EB/wPqAf8DhgH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/
AZkCUQH/AxQB/wMAAf8DBwH/A2IB/wPMBf8DAAH/AZkCUQH/AZkCUQH/CAADFwEgA1oBwAPGAv8C9wL/
AvIC/wLsAv8C5wL/AuMB/wHGArEB/wNeAdADJAE2AwIBAxgAAzIBUANRAaIDXQHSAYwCiQH/A2AB1ANU
AaYDNwFaAwUBBxAACP8BzAKZLf8D8QH/A8AB/wQAAZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/
AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AwcB/wMAAf8DOAH/AxQB/wGZAlEB/xQAAzIBUANRAaIDXQHS
AYwCiQH/A2AB1ANUAaYDNwFaAwUBBxAAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYA
A/8BAAHjA/8EAAHBA/8EAAGAAf8BCAEQBQABfwcAAT8HAAEfBgABgAEPBgABwAEHBgAB4AEDBgAB8AEB
BgAB+AcAAfwHAAH+AQgGAAH/BwAB/wGAAf8B8AQAAf8BwAH/AfgEAAHgAQMCAAGAAQEB4AEDAcABAQQA
AcABAQGABQABgAEAAYAFAAGAQQABgAUAAYABAAGAAQEEAAGAAQEBwAEDBAABwAEDAfABDwIAAYABAQHw
AQ8L
</value>
</data>
<data name="listChoices.TabIndex" type="System.Int32, mscorlib">