Commit a4f817cd LN

增加亮灯处理。侧挡气缸禁用时不显示。

1 个父辈 2f6820cb
......@@ -104,6 +104,8 @@
<Compile Include="deviceLibrary\IO\IOBase.cs" />
<Compile Include="deviceLibrary\IO\NanjingSDotIO.cs" />
<Compile Include="deviceLibrary\IO\NiRenIO.cs" />
<Compile Include="deviceLibrary\ledLabel\LedLabelController.cs" />
<Compile Include="deviceLibrary\ledLabel\LabelInfo.cs" />
<Compile Include="manager\ProjectorProcess.cs" />
<Compile Include="manager\LedManager.cs" />
<Compile Include="manager\LineWidthManager.cs" />
......@@ -167,7 +169,9 @@
</None>
</ItemGroup>
<ItemGroup>
<Content Include="config\Positions.csv" />
<Content Include="config\Positions.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="config\BOM-US.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
......
......@@ -54,8 +54,11 @@ namespace TSA_V.DeviceLibrary
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 7), "LineOutCheck", "X08_线体出口检测"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 8), "StopCylinder_Up", "X09_挡停气缸上升端"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 9), "StopCylinder_Down", "X10_挡停气缸下降端"));
if (!TSAVBean.DisableSideCylinder)
{
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 10), "SideCylinder_Forward", "X11_侧挡气缸前进端"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 11), "SideCylinder_Back", "X12_侧挡气缸后退端"));
}
if (!TSAVBean.DisableBottomCylinder)
{
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 12), "BottomCylinder_Down1", "X13_底部定位气缸1下降端"));
......@@ -67,8 +70,11 @@ namespace TSA_V.DeviceLibrary
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 3), "SMEMA_Down", "Y04_SMEMA后机送料请求"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 4), "StopCylinder_Up", "Y05_挡停气缸上升SOL"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 5), "StopCylinder_Down", "Y06_挡停气缸下降SOL"));
if (!TSAVBean.DisableSideCylinder)
{
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 6), "SideCylinder_Forward", "Y07_侧挡气缸前进SOL"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 7), "SideCylinder_Back", "Y08_侧挡气缸后退SOL"));
}
if (!TSAVBean.DisableBottomCylinder)
{
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 8), "BottomCylinder_Up", "Y09_底部定位气缸上升SOL"));
......
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TSA_V.DeviceLibrary
{
public class LabelInfo
{
//public string lblPos="位置:";
//public string lblNum = "库存数量:";
//public string lblPn = "物料编码:";
//public string lblDes = "描述:";
//public string lblNotes = "注意事项:";
public LabelInfo() { }
public LabelInfo(string pos, string num, string pn, string des, string notes, string ip, string mac, bool led)
{
this.pos = pos;
this.num = num;
this.pn = pn;
this.des = des;
this.notes = notes;
this.ip = ip;
this.mac = mac;
this.openLed = led;
}
public string ip="";
public string mac="";
public string pos="";
public string num = "";
public string pn = "";
public string des = "";
public string notes = "";
public bool openLed;
public Dictionary<string,object> toMap()
{
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("lblPos", ResourceControl.GetString("Label_lblPos", "位置:"));
map.Add("lblNum", ResourceControl.GetString("Label_lblNum", "库存数量:"));
map.Add("lblPn", ResourceControl.GetString("Label_lblPn", "物料编码:"));
map.Add("lblDes", ResourceControl.GetString("Label_lblDes", "描述:"));
map.Add("lblNotes", ResourceControl.GetString("Label_lblNotes", "注意事项:"));
map.Add("pos", pos);
map.Add("num", num);
map.Add("pn", pn);
map.Add("des", des);
map.Add("notes", notes);
map.Add("styleid", 47);
string ledrgb = openLed ? "ff00" : "0";
map.Add("ledrgb", ledrgb);
map.Add(mac, mac);
return map;
}
// {
// "mac":"99.96.19.64",
// "mappingtype":868,
// "styleid":47,
// "lblPos":"位置:",
// "pos":"1_8",
// "lblNum":"库位数量:",
// "lblPn":"物料编码:",
// "lblDes":"描述:",
// "lblNotes":"注意事项:",
// "num":"234",
// "pn":"R218",
// "des":"描述内容",
// "notes":"注意事项内容",
// "边框":"",
// "边框1":"",
// "边框2":"",
// "边框3":"",
// "边框4":"",
// "边框5":"",
// "边框6":"",
// "边框7":"",
// "边框8":"",
// "边框9":"",
// "ledrgb":"ff00",
// "ledstate":"0",
// "outtime":"0"
//}
//[{"mac":"99.96.19.64","mappingtype":868,"styleid":47,"lblPos":"位置:","pos":"1_8","lblNum":"库位数量:","lblPn":"物料编码:","lblDes":"描述:","lblNotes":"注意事项:","num":"234","pn":"R218","des":"描述内容","notes":"注意事项内容","边框":"","边框1":"","边框2":"","边框3":"","边框4":"","边框5":"","边框6":"","边框7":"","边框8":"","边框9":"","ledrgb":"ff00","ledstate":"0","outtime":"0"}]
}
}
using System.Collections.Generic;
using System.Net.Http;
using TSA_V.Common;
using TSA_V.LoadCSVLibrary;
namespace TSA_V.DeviceLibrary
{
public class LedLabelController
{
public static void OpenAll()
{
OpenOrCloseAll(true);
}
public static void CloseAll()
{
OpenOrCloseAll(false);
}
private static void OpenOrCloseAll(bool open)
{
List<TSAVPosition> positions = CSVPositionReader<TSAVPosition>.getPositionList();
List<string> macs = new List<string>();
List<bool> ledvs = new List<bool>();
string ip = "";
foreach (var pos in positions)
{
if (pos.PositionType.Equals(2))
{
ip = pos.DeviceIP;
macs.Add(pos.Leds);
ledvs.Add(open);
}
}
if (macs.Count > 0)
{
string url = $"http://{ip}/wms/associate/lightTagsLed";
string json = JsonHelper.SerializeObject(getLedMaps(macs, ledvs));
Post(url, json);
}
}
public static LabelInfo GetLabel(TSAVPosition position, ComponetInfo com, bool opendLed = false)
{
if (com == null)
{
com = new ComponetInfo();
}
if (position == null)
{
position = new TSAVPosition();
}
if (!position.PositionType.Equals(2))
{
return new LabelInfo();
}
LabelInfo label = new LabelInfo(position.PositionName, com.ComCount, com.PN, com.ComponentDes, com.Notes, position.DeviceIP, position.Leds, opendLed);
return label;
}
public static void OpenLed(string ip, string mac)
{
controlLed(ip, mac, true);
}
public static void CloseLed(string ip, string mac)
{
controlLed(ip, mac, false);
}
private static List<Dictionary<string, object>> getLedMaps(List<string> mac, List<bool> ledrgb)
{
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
for (int i = 0; i < mac.Count; i++)
{
if (ledrgb.Count > i)
{
string rgb = ledrgb[i] ? "ff00" : "0";
list.Add(getLedMap(mac[i], rgb));
}
}
return list;
}
private static Dictionary<string, object> getLedMap(string mac, string ledrgb)
{
Dictionary<string, object> keyValuePairss = new Dictionary<string, object>{
{ "mac", mac },//标签地址
{ "lednum", 255 },
{ "timeout", 0 },
{ "ledrgb", ledrgb },
{ "ledmode", 0 },
{ "reserve", "reserve" },
{ "cmdtoken", "Inve123ntec" }};
return keyValuePairss;
}
private static void controlLed(string ip, string mac, bool openLed)
{
if (ip == "")
{
return;
}
string ledrgb = openLed ? "ff00" : "0";
string url = $"http://{ip}/wms/associate/lightTagsLed";
Dictionary<string, object> keyValuePairss = getLedMap(mac, ledrgb);
string json = JsonHelper.SerializeObject(keyValuePairss);
string value = $"[{json}]";
Post(url, value);
}
public static void UpdateScreen(LabelInfo label)
{
if (label.ip == "")
{
return;
}
string url = $"http://{label.ip}/wms/associate/updateScreen";
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("mac", label.mac);
dic.Add("mappingtype", "868");
dic.Add("styleid", 47);
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("outtime", "0");
Dictionary<string, object> lmap = label.toMap();
foreach (string key in lmap.Keys)
{
if (dic.ContainsKey(key))
{
dic[key] = lmap[key];
}
else
{
dic.Add(key, lmap[key]);
}
}
string json = JsonHelper.SerializeObject(dic);
string value = $"[{json}]";
Post(url, value);
}
public static async void Post(string url, string json)
{
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Post, url))
{
var contents = new StringContent($"{json}", null, "application/json");
request.Content = contents;
using (HttpResponseMessage response = await client.SendAsync(request) )
{
if (response.IsSuccessStatusCode)
{
string jsonResponse = response.Content.ReadAsStringAsync().Result;
LogUtil.info($"电子屏 {url} 发送{json} 结果 {response.IsSuccessStatusCode}: " + jsonResponse);
}
else
{
string jsonResponse = response.Content.ReadAsStringAsync().Result;
LogUtil.info($"电子屏{url} 发送{json} 结果 {response.IsSuccessStatusCode}: " + jsonResponse);
}
}
}
}
}
// {
// "mac":"99.96.19.64",
// "mappingtype":868,
// "styleid":47,
// "lblPos":"位置:",
// "pos":"1_8",
// "lblNum":"库位数量:",
// "lblPn":"物料编码:",
// "lblDes":"描述:",
// "lblNotes":"注意事项:",
// "num":"234",
// "pn":"R218",
// "des":"描述内容",
// "notes":"注意事项内容",
// "ledrgb":"ff00",
// "ledstate":"0",
// "outtime":"0"
//}
//private static void controlLed(string ip, string mac, bool openLed)
//{
// string ledrgb = openLed ? "ff00" : "0";
// using (var client = new HttpClient())
// {
// string url = $"http://{ip}/wms/associate/lightTagsLed";
// using (var requests = new HttpRequestMessage(HttpMethod.Post, url))
// {
// Dictionary<string, object> keyValuePairss = getLedMap(mac, ledrgb);
// string json = JsonHelper.SerializeObject(keyValuePairss);
// var contents = new StringContent($"[{json}]", null, "application/json");
// LogUtil.info($"电子屏 {ip}-{mac} : {(openLed ? "开灯" : "关灯")} url:{url}, 发送内容:{json}");
// requests.Content = contents;
// using (HttpResponseMessage response = client.SendAsync(requests).Result)
// {
// if (response.IsSuccessStatusCode)
// {
// string jsonResponse = response.Content.ReadAsStringAsync().Result;
// LogUtil.info($"电子屏 {ip}-{mac} : {(openLed ? "开灯" : "关灯")} 结果: " + jsonResponse);
// }
// else
// {
// LogUtil.info($"电子屏 {ip}-{mac} : {(openLed ? "开灯" : "关灯")} 结果: " + response.RequestMessage.ToString());
// }
// }
// requests.Dispose();
// }
// }
//}
//public static void UpdateScreen(LabelInfo label)
//{
// string ledrgb = label.openLed ? "ff00" : "0";
// using (var client = new HttpClient())
// {
// string url = $"http://{label.ip}/wms/associate/updateScreen";
// using (var request = new HttpRequestMessage(HttpMethod.Post, url))
// {
// Dictionary<string, object> dic = new Dictionary<string, object>();
// dic.Add("mac", label.mac);
// dic.Add("mappingtype", "868");
// dic.Add("styleid", 47);
// dic.Add("ledrgb", "0");
// dic.Add("ledstate", "0");
// dic.Add("outtime", "0");
// Dictionary<string, object> lmap = label.toMap();
// foreach (string key in lmap.Keys)
// {
// if (dic.ContainsKey(key))
// {
// dic[key] = lmap[key];
// }
// else
// {
// dic.Add(key, lmap[key]);
// }
// }
// string json = JsonHelper.SerializeObject(dic);
// var contents = new StringContent($"[{json}]", null, "application/json");
// LogUtil.info($"电子屏 {label.ip}-{label.mac} : 更改屏幕内容 url:{url}, 发送内容:{json}");
// request.Content = contents;
// using (HttpResponseMessage response = client.SendAsync(request).Result)
// {
// if (response.IsSuccessStatusCode)
// {
// string jsonResponse = response.Content.ReadAsStringAsync().Result;
// LogUtil.info($"电子屏 {label.ip}-{label.mac} : 更改屏幕结果: " + jsonResponse);
// }
// else
// {
// LogUtil.info($"电子屏 {label.ip}-{label.mac} : 更改屏幕失败: " + response.RequestMessage.ToString());
// }
// }
// }
// }
//}
}
}
using ExcelDataReader;
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using TSA_V.Common;
using TSA_V.LoadCSVLibrary;
namespace TSA_V.DeviceLibrary.manager
{
public class ScanRequestLabel
{
private static Dictionary<string,string> lastPirs = new Dictionary<string,string>();
/// <summary>
/// 开灯、记录地址信息
/// </summary>
/// <param name="position"></param>
/// <param name="count"></param>
/// <param name="name"></param>
/// <param name="ComponentDes"></param>
/// <param name="dic"></param>
public static void RequestPost(TSAVPosition position,string count,string name,string ComponentDes,out Dictionary<string, string> dic)
{
Dictionary<string, string> pairs = new Dictionary<string, string>();
try
{
#region
////不为空时,关闭上一个指示灯
//if (pairs.Count>=3)
//{
// DataModel data = new DataModel()
// {
// ip = pairs["Ip"],
// mac = pairs["Mac"],
// PNum = pairs["PNum"],
// count=count,
// name= pairs["Name"],
// ComponentDes = pairs["ComponentDes"]
// };
// //关灯操作
// LogUtil.info($"电子屏关灯:{data.ip},{data.mac},{false},上一个电子屏信息:{data.mac}");
// lightTagsLed(data.ip, data.mac, false);
// UpdateQty(data);
// pairs.Clear();
//}
#endregion
if (!string.IsNullOrWhiteSpace(position.DeviceIP))
{
//开灯
LogUtil.info($"电子屏开灯:{position.PositionNum} {position.DeviceIP},{position.Leds},{true}");
lightTagsLed(position.DeviceIP, position.Leds, true);
pairs.Add("Ip", position.DeviceIP);
pairs.Add("Mac", position.Leds);
pairs.Add("PNum", position.PositionNum);//库位编号
pairs.Add("Count",count);
pairs.Add("ComponentDes", ComponentDes);
pairs.Add("Name", name);
LogUtil.info($"{ComponentDes};{name};");
}
else
{
pairs.Clear();
}
}
catch (Exception)
{
}
dic = pairs;
lastPirs = pairs;
}
/// <summary>
/// 关灯
/// </summary>
/// <param name="pairs"></param>
public static void Turnoffthelights(Dictionary<string,string> pairs)
{
DataModel data = new DataModel()
{
ip = pairs["Ip"],
mac = pairs["Mac"],
PNum = pairs["PNum"],
count = pairs["Count"],
name = pairs["Name"],
ComponentDes = pairs["ComponentDes"]
};
//关灯操作
LogUtil.info($"电子屏关灯:{data.ip},{data.mac},{false},上一个电子屏信息:{data.mac}");
lightTagsLed(data.ip, data.mac, false);
UpdateQty(data);
pairs.Clear();
}
/// <summary>
/// 请求标签,关灯、开灯
/// </summary>
/// <param name="ip"></param>
/// <param name="mac">标签地址</param>
/// <param name="isled">true=亮灯</param>
public static void lightTagsLed(string ip,string mac,bool isled)
{
string ledrgb=isled?"ff00":"0";
var client = new HttpClient();
var requests = new HttpRequestMessage(HttpMethod.Post, $"http://{ip}/wms/associate/lightTagsLed");
Dictionary<string, object> keyValuePairss = new Dictionary<string, object>{
{ "mac", mac },//标签地址
{ "lednum", 255 },
{ "timeout", 0 },
{ "ledrgb", ledrgb },
{ "ledmode", 0 },
{ "reserve", "reserve" },
{ "cmdtoken", "Inve123ntec" }};
string json= JsonHelper.SerializeObject(keyValuePairss);
var contents = new StringContent($"[{json}]", null, "application/json");
requests.Content = contents;
client.SendAsync(requests);
}
public static void Switchlanguage(int idenx)
{
if (idenx>1)
{
return;
}
//查询出所有的mac数据
var list=CSVPositionReader<TSAVPosition>.getPositionList();
var entity= list.Where(a => a.PositionType == 2).ToList();
if (entity == null)
return;
List<string> strings=new List<string>();
foreach (var item in entity)
{
var dic = dictionry(idenx);
dic["mac"] = item.Leds.ToString();
dic["lot"] = item.PositionNum.ToString();
dic["desc"] = null;
dic["PN"] = null;
dic["QTY"] = null;
string str=JsonHelper.SerializeObject(dic);
dic.Clear();
strings.Add(str);
}
string jsons = "";
foreach (var item in strings)
{
jsons += item + ",";
}
var client = new HttpClient();
var requests = new HttpRequestMessage(HttpMethod.Post, $"http://{entity[0].DeviceIP}/wms/associate/updateScreen");
string json = JsonHelper.SerializeObject(strings);
string aaa = $"[{jsons.Substring(0,jsons.Length - 1)}]";
var contents = new StringContent($"[{jsons.Substring(0,jsons.Length-1)}]", null, "application/json");
requests.Content = contents;
client.SendAsync(requests);
}
/// <summary>
/// 修改样式模板
/// </summary>
/// <param name="ip">ip地址</param>
/// <param name="mac">mac地址</param>
/// <param name="count">物料数量</param>
/// <param name="pnname">物料名称</param>
/// <param name="PN">库位编号位置名称</param>
public static void UpdateQty(DataModel data)
{
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, $"http://{data.ip}/wms/associate/updateScreen");
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("Count", "Qty:");
dic.Add("Describe", "Desc:");
dic.Add("PN", data.name);
dic.Add("PartNumber", "Name:");
dic.Add("QRcode", "123456");
dic.Add("QTY", $"{int.Parse(data.count)-1}");
dic.Add("Striptype", "----------------------------------------");
dic.Add("desc", data.ComponentDes);
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("location", "Lot.:");
dic.Add("logo", "neotel12");
dic.Add("logoname", "NEO LABEL");
dic.Add("lot", data.PNum);
dic.Add("mac", data.mac);
dic.Add("mappingtype",538);
dic.Add("outtime", "0");
dic.Add("styleid", 53);
string json = JsonHelper.SerializeObject(dic);
var contents = new StringContent($"[{json}]", null, "application/json");
request.Content = contents;
client.SendAsync(request);
}
public static Dictionary<string, object> dictionry(int idenx)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
//中文请求
if (idenx == 0)
{
dic.Add("Count", "数量:");
dic.Add("Describe", "物料描述:");
dic.Add("PartNumber", "名称:");
dic.Add("QRcode", "123456");
dic.Add("Striptype", "----------------------------------------");
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("location", "库位编号:");
dic.Add("logo", "neotel12");
dic.Add("logoname", "NEO LABEL");
dic.Add("mappingtype", 538);
dic.Add("outtime", "0");
dic.Add("styleid", 53);
dic.Add("mac", null);
dic.Add("PN", null);
dic.Add("QTY", $"{null}");
dic.Add("lot", null);
dic.Add("desc", null);
}
else if (idenx == 1)//英文请求
{
dic.Add("Count", "Qty:");
dic.Add("Describe", "Desc:");
dic.Add("PartNumber", "Name:");
dic.Add("QRcode", "123456");
dic.Add("Striptype", "----------------------------------------");
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("location", "Lot.:");
dic.Add("logo", "neotel12");
dic.Add("logoname", "NEO LABEL");
dic.Add("mappingtype", 538);
dic.Add("outtime", "0");
dic.Add("styleid", 53);
dic.Add("mac", null);
dic.Add("PN", null);
dic.Add("QTY", $"{null}");
dic.Add("lot", null);
dic.Add("desc", null);
}
return dic;
}
//public static DataTable GetData(string filePath)
//{
// // 设置文件路径和工作表名称
// //string filePath = "path/to/your/excel/file.xlsx";
// string worksheetName = "Sheet1";
// // 创建ExcelDataReader对象并打开工作簿
// using (var reader = ExcelReaderFactory.CreateReader(filePath))
// {
// reader.IsFirstRowAsColumnNames = true; // 将第一行作为列名
// var result = reader.AsDataSet(new ExcelDataSetConfiguration()
// {
// ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
// {
// UseHeaderRow = true // 使用标题行作为列名
// }
// });
// // 获取指定工作表的数据表
// DataTable dt = result.Tables[worksheetName];
// // 在此处使用数据表进行处理
// }
//}
public class DataModel
{
/// <summary>
/// ip地址
/// </summary>
public string ip { get; set; }
/// <summary>
/// mac地址
/// </summary>
public string mac { get; set; }
/// <summary>
/// 记录上一个库位编号
/// </summary>
public string PNum { get; set; }
/// <summary>
/// 元器件数量
/// </summary>
public string count { get; set; }
/// <summary>
/// 元器件名称
/// </summary>
public string name { get; set; }
/// <summary>
/// 元器件描述
/// </summary>
public string ComponentDes { get; set; }
}
}
}
......@@ -929,6 +929,8 @@ namespace TSA_V.DeviceLibrary
}
}
}
LedLabelController.CloseAll();
}
private static void CheckWorkWait()
{
......
......@@ -5,7 +5,6 @@ using System.Drawing;
using System.Linq;
using System.Threading;
using TSA_V.Common;
using TSA_V.DeviceLibrary.manager;
using TSA_V.LoadCSVLibrary;
namespace TSA_V.DeviceLibrary
......@@ -33,6 +32,7 @@ namespace TSA_V.DeviceLibrary
public DateTime endWorkTime = DateTime.Now;
public DateTime LastSetpTime = DateTime.Now;
public uint PreNodeId = 0;
public LabelInfo PreLabel = null ;
public List<SMTPointInfo> needWorkSmtList = new List<SMTPointInfo>();
//开始工作后共工作了几块电路板``````
public int BoardCount = 0;
......@@ -291,13 +291,17 @@ namespace TSA_V.DeviceLibrary
}
public void MoveToBag(TSAVPosition position)
{
Dictionary<string,string> pairs = new Dictionary<string,string>();
if (pairs.Count!=0)
//Dictionary<string,string> pairs = new Dictionary<string,string>();
//if (pairs.Count!=0)
//{
// //关灯
// LogUtil.info($"{pairs.ToString()}");
// ScanRequestLabel.Turnoffthelights(pairs);
// pairs.Clear();
//}
if (PreLabel != null)
{
//关灯
LogUtil.info($"{pairs.ToString()}");
ScanRequestLabel.Turnoffthelights(pairs);
pairs.Clear();
LedLabelController.CloseLed(PreLabel.ip, PreLabel.mac);
}
//LedManager.LedOFFALL();
if (position.PositionType.Equals(1))
......@@ -326,16 +330,21 @@ namespace TSA_V.DeviceLibrary
{
var smtPoint=TSAVBean.Work.currPoint;
ComponetInfo com = CSVBomManager.GetCom(BoardManager.CurrBoard.bomName, smtPoint);
string count=null;
string pnname = null;
string ComponentDes=null;
if (com!=null)
{
count = com.ComCount.ToString();
pnname=com.PN.ToString();
ComponentDes=com.ComponentDes.ToString();
}
ScanRequestLabel.RequestPost(position, count, pnname, ComponentDes ,out pairs);
LabelInfo label = LedLabelController.GetLabel(position, com, true);
LedLabelController.OpenLed(label.ip, label.mac);
LedLabelController.UpdateScreen(label);
PreLabel = label;
//string count=null;
//string pnname = null;
//string ComponentDes=null;
//if (com!=null)
//{
// count = com.ComCount.ToString();
// pnname=com.PN.ToString();
// ComponentDes=com.ComponentDes.ToString();
//}
//ScanRequestLabel.RequestPost(position, count, pnname, ComponentDes ,out pairs);
}
#endregion
else
......
......@@ -61,10 +61,9 @@
//
this.lblMoveStr.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMoveStr.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblMoveStr.Location = new System.Drawing.Point(542, 276);
this.lblMoveStr.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblMoveStr.Location = new System.Drawing.Point(406, 219);
this.lblMoveStr.Name = "lblMoveStr";
this.lblMoveStr.Size = new System.Drawing.Size(173, 92);
this.lblMoveStr.Size = new System.Drawing.Size(130, 73);
this.lblMoveStr.TabIndex = 294;
this.lblMoveStr.Text = "移动中";
this.lblMoveStr.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
......@@ -73,10 +72,9 @@
//
this.lblLeftInfo.AutoSize = true;
this.lblLeftInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblLeftInfo.Location = new System.Drawing.Point(301, 546);
this.lblLeftInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblLeftInfo.Location = new System.Drawing.Point(226, 437);
this.lblLeftInfo.Name = "lblLeftInfo";
this.lblLeftInfo.Size = new System.Drawing.Size(54, 20);
this.lblLeftInfo.Size = new System.Drawing.Size(44, 17);
this.lblLeftInfo.TabIndex = 293;
this.lblLeftInfo.Text = "编号:";
//
......@@ -84,10 +82,9 @@
//
this.lblEndInfo.AutoSize = true;
this.lblEndInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblEndInfo.Location = new System.Drawing.Point(111, 546);
this.lblEndInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblEndInfo.Location = new System.Drawing.Point(83, 437);
this.lblEndInfo.Name = "lblEndInfo";
this.lblEndInfo.Size = new System.Drawing.Size(54, 20);
this.lblEndInfo.Size = new System.Drawing.Size(44, 17);
this.lblEndInfo.TabIndex = 292;
this.lblEndInfo.Text = "编号:";
//
......@@ -95,10 +92,9 @@
//
this.btnSaveCount.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnSaveCount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSaveCount.Location = new System.Drawing.Point(542, 368);
this.btnSaveCount.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.btnSaveCount.Location = new System.Drawing.Point(406, 292);
this.btnSaveCount.Name = "btnSaveCount";
this.btnSaveCount.Size = new System.Drawing.Size(173, 38);
this.btnSaveCount.Size = new System.Drawing.Size(130, 33);
this.btnSaveCount.TabIndex = 291;
this.btnSaveCount.TabStop = true;
this.btnSaveCount.Text = "保存数量";
......@@ -110,10 +106,9 @@
this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
this.label4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label4.Location = new System.Drawing.Point(4, 92);
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label4.Location = new System.Drawing.Point(3, 73);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(171, 92);
this.label4.Size = new System.Drawing.Size(128, 73);
this.label4.TabIndex = 289;
this.label4.Text = "位号:";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
......@@ -122,10 +117,9 @@
//
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCancel.Location = new System.Drawing.Point(472, 470);
this.btnCancel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnCancel.Location = new System.Drawing.Point(354, 376);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(171, 62);
this.btnCancel.Size = new System.Drawing.Size(128, 50);
this.btnCancel.TabIndex = 288;
this.btnCancel.Text = "结束";
this.btnCancel.UseVisualStyleBackColor = true;
......@@ -135,10 +129,9 @@
//
this.btnNext.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnNext.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnNext.Location = new System.Drawing.Point(289, 470);
this.btnNext.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnNext.Location = new System.Drawing.Point(217, 376);
this.btnNext.Name = "btnNext";
this.btnNext.Size = new System.Drawing.Size(171, 62);
this.btnNext.Size = new System.Drawing.Size(128, 50);
this.btnNext.TabIndex = 287;
this.btnNext.Text = "下一个元器件";
this.btnNext.UseVisualStyleBackColor = true;
......@@ -148,10 +141,9 @@
//
this.btnPre.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnPre.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnPre.Location = new System.Drawing.Point(107, 470);
this.btnPre.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnPre.Location = new System.Drawing.Point(80, 376);
this.btnPre.Name = "btnPre";
this.btnPre.Size = new System.Drawing.Size(171, 62);
this.btnPre.Size = new System.Drawing.Size(128, 50);
this.btnPre.TabIndex = 286;
this.btnPre.Text = "上一个元器件";
this.btnPre.UseVisualStyleBackColor = true;
......@@ -162,10 +154,9 @@
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label1.Location = new System.Drawing.Point(4, 276);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Location = new System.Drawing.Point(3, 219);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(171, 92);
this.label1.Size = new System.Drawing.Size(128, 73);
this.label1.TabIndex = 78;
this.label1.Text = "料盘位置:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
......@@ -175,10 +166,9 @@
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label3.Location = new System.Drawing.Point(4, 368);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Location = new System.Drawing.Point(3, 292);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(171, 38);
this.label3.Size = new System.Drawing.Size(128, 33);
this.label3.TabIndex = 76;
this.label3.Text = "数量:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
......@@ -188,10 +178,9 @@
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label2.Location = new System.Drawing.Point(4, 0);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Location = new System.Drawing.Point(3, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(171, 92);
this.label2.Size = new System.Drawing.Size(128, 73);
this.label2.TabIndex = 73;
this.label2.Text = "物料编号:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
......@@ -201,10 +190,9 @@
this.label5.Dock = System.Windows.Forms.DockStyle.Fill;
this.label5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label5.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label5.Location = new System.Drawing.Point(4, 184);
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label5.Location = new System.Drawing.Point(3, 146);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(171, 92);
this.label5.Size = new System.Drawing.Size(128, 73);
this.label5.TabIndex = 295;
this.label5.Text = "描述:";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
......@@ -217,15 +205,14 @@
0,
0,
0});
this.numCount.Location = new System.Drawing.Point(183, 372);
this.numCount.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.numCount.Location = new System.Drawing.Point(137, 295);
this.numCount.Maximum = new decimal(new int[] {
1410065408,
2,
0,
0});
this.numCount.Name = "numCount";
this.numCount.Size = new System.Drawing.Size(217, 34);
this.numCount.Size = new System.Drawing.Size(163, 29);
this.numCount.TabIndex = 297;
//
// lblPN
......@@ -235,10 +222,9 @@
this.lblPN.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPN.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblPN.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblPN.Location = new System.Drawing.Point(183, 0);
this.lblPN.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPN.Location = new System.Drawing.Point(137, 0);
this.lblPN.Name = "lblPN";
this.lblPN.Size = new System.Drawing.Size(532, 92);
this.lblPN.Size = new System.Drawing.Size(399, 73);
this.lblPN.TabIndex = 298;
this.lblPN.Text = "移动中";
this.lblPN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
......@@ -248,10 +234,9 @@
this.tableLayoutPanel1.SetColumnSpan(this.lblTagNo, 2);
this.lblTagNo.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblTagNo.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblTagNo.Location = new System.Drawing.Point(183, 92);
this.lblTagNo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblTagNo.Location = new System.Drawing.Point(137, 73);
this.lblTagNo.Name = "lblTagNo";
this.lblTagNo.Size = new System.Drawing.Size(532, 92);
this.lblTagNo.Size = new System.Drawing.Size(399, 73);
this.lblTagNo.TabIndex = 299;
this.lblTagNo.Text = "移动中";
this.lblTagNo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
......@@ -261,10 +246,9 @@
this.tableLayoutPanel1.SetColumnSpan(this.lblDes, 2);
this.lblDes.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblDes.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblDes.Location = new System.Drawing.Point(183, 184);
this.lblDes.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblDes.Location = new System.Drawing.Point(137, 146);
this.lblDes.Name = "lblDes";
this.lblDes.Size = new System.Drawing.Size(532, 92);
this.lblDes.Size = new System.Drawing.Size(399, 73);
this.lblDes.TabIndex = 300;
this.lblDes.Text = "移动中";
this.lblDes.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
......@@ -274,10 +258,9 @@
this.lblPosition.AutoSize = true;
this.lblPosition.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPosition.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblPosition.Location = new System.Drawing.Point(183, 276);
this.lblPosition.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPosition.Location = new System.Drawing.Point(137, 219);
this.lblPosition.Name = "lblPosition";
this.lblPosition.Size = new System.Drawing.Size(351, 92);
this.lblPosition.Size = new System.Drawing.Size(263, 73);
this.lblPosition.TabIndex = 301;
this.lblPosition.Text = "移动中";
this.lblPosition.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
......@@ -301,30 +284,29 @@
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 4);
this.tableLayoutPanel1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tableLayoutPanel1.Location = new System.Drawing.Point(28, 31);
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.tableLayoutPanel1.Location = new System.Drawing.Point(21, 25);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 38F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(719, 406);
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(539, 325);
this.tableLayoutPanel1.TabIndex = 302;
//
// FrmBoardPutCom
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(788, 610);
this.ClientSize = new System.Drawing.Size(591, 488);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.lblLeftInfo);
this.Controls.Add(this.lblEndInfo);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnNext);
this.Controls.Add(this.btnPre);
this.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.Name = "FrmBoardPutCom";
this.Text = "备料";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmPutCom_FormClosing);
......
......@@ -162,6 +162,18 @@ namespace TSA_V
ComponetInfo com = comList[currIndex];
com.ComCount = newCount.ToString();
CSVBomManager.UpdateComponet(bomName, com);
try
{
TSAVPosition position = null;
position = CSVPositionReader<TSAVPosition>.GetPositonByNum(com.PositionNum);
LabelInfo label = LedLabelController.GetLabel(position, com, true);
LedLabelController.UpdateScreen(label);
}
catch(Exception ex)
{
LogUtil.error("备料后更新电子屏出错:" + ex.ToString());
}
}
private void btnNext_Click(object sender, EventArgs e)
{
......
......@@ -54,7 +54,7 @@ namespace TSA_V
}
internal void LoadComList()
{
List<string> keyList =new List<string> ( LoadCSVLibrary.CSVBomManager.allComMap.Keys);
List<string> keyList = new List<string>(LoadCSVLibrary.CSVBomManager.allComMap.Keys);
this.cmbList.Items.Clear();
foreach (string key in keyList)
{
......@@ -85,7 +85,7 @@ namespace TSA_V
}
}
private void UpdateGridList(List<ComponetInfo > list)
private void UpdateGridList(List<ComponetInfo> list)
{
this.dgvList.Rows.Clear();
foreach (ComponetInfo com in list)
......@@ -147,12 +147,12 @@ namespace TSA_V
if (obj == null)
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC,"请选择元器件!"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC, "请选择元器件!"));
return;
}
if (cmbPositionNumList.SelectedIndex < 0)
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectCPosition,"请选择元器件位置!"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectCPosition, "请选择元器件位置!"));
cmbPositionNumList.Focus();
return;
}
......@@ -169,18 +169,18 @@ namespace TSA_V
if (obj.PN.Equals(""))
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComName,"请输入元器件名称!"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComName, "请输入元器件名称!"));
txtName.Focus();
return;
}
if (int.Parse(obj.ComCount)<=0)
if (int.Parse(obj.ComCount) <= 0)
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComNum,"请输入元器件数量!"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComNum, "请输入元器件数量!"));
txtCount.Focus();
return;
}
if (obj.PositionNum.Equals(oldPosition).Equals(false) &&(!String.IsNullOrEmpty(obj.TagNo)))
if (obj.PositionNum.Equals(oldPosition).Equals(false) && (!String.IsNullOrEmpty(obj.TagNo)))
{
List<ComponetInfo> list = CSVBomManager.GetComList(cmbList.Text);
List<ComponetInfo> objs = (from m in list where m.Id.Equals(obj.Id).Equals(false) && m.PN.Equals(obj.PN) && m.PositionNum.Equals(obj.PositionNum) select m).ToList();
......@@ -189,7 +189,7 @@ namespace TSA_V
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComExists, "元器件已存在"));
}
}
if (obj.TagNo.Equals(oldTagNo).Equals(false) &&( !String.IsNullOrEmpty(obj.TagNo)))
if (obj.TagNo.Equals(oldTagNo).Equals(false) && (!String.IsNullOrEmpty(obj.TagNo)))
{
List<ComponetInfo> list = CSVBomManager.GetComList(cmbList.Text);
List<ComponetInfo> objs = (from m in list where (!String.IsNullOrEmpty(m.TagNo)) && m.TagNo.Equals(obj.TagNo) select m).ToList();
......@@ -312,8 +312,8 @@ namespace TSA_V
}
point.TagNo = row.Cells[this.Column_partNumber.Name].Value.ToString();
point.PN = row.Cells[this.Column_PN.Name].Value.ToString();
point.PositionX =Convert.ToDouble( row.Cells[this.Column_X.Name].Value.ToString());
point.PositionY =Convert.ToDouble( row.Cells[this.Column_Y.Name].Value.ToString());
point.PositionX = Convert.ToDouble(row.Cells[this.Column_X.Name].Value.ToString());
point.PositionY = Convert.ToDouble(row.Cells[this.Column_Y.Name].Value.ToString());
point.ComponentDes = row.Cells[this.Column_description.Name].Value.ToString();
point.Notes = row.Cells[this.Column_Notes.Name].Value.ToString();
point.PositionNum = row.Cells[this.Column_Position.Name].Value.ToString();
......@@ -323,8 +323,8 @@ namespace TSA_V
}
catch (Exception ex)
{
LogUtil.error( "保存数据出错:" + ex.ToString());
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CheckComNum,"请检查元器件数据是否正确!"));
LogUtil.error("保存数据出错:" + ex.ToString());
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CheckComNum, "请检查元器件数据是否正确!"));
return null;
}
return point;
......@@ -333,7 +333,7 @@ namespace TSA_V
private void btnNewCom_Click(object sender, EventArgs e)
{
IsNew = true;
txtPartNum.Text="";
txtPartNum.Text = "";
txtName.Text = "";
txtDes.Text = "";
txtCount.Text = "";
......@@ -344,15 +344,17 @@ namespace TSA_V
btnNewCom.Visible = false;
groupInfo.Text = ResourceCulture.GetString(ResourceCulture.NewCom, "新增元器件");
}
private ComponetInfo selCom = null;
private void showDetail(int rowIndex)
{
DataGridViewRow row = dgvList.Rows[rowIndex];
ComponetInfo obj = getRowPointInfo(row);
if (obj == null)
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceCom,"请选择元器件!"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceCom, "请选择元器件!"));
return;
}
selCom = obj;
IsNew = false;
txtPartNum.Tag = obj;
txtName.Text = obj.PN;
......@@ -368,7 +370,7 @@ namespace TSA_V
{
txtPartNum.Enabled = false;
}
btnNewCom.Visible = true ;
btnNewCom.Visible = true;
txtId.Text = obj.Id.ToString();
//txtPosition.Text = obj.PositionNum;
......@@ -384,12 +386,12 @@ namespace TSA_V
break;
}
}
if (selPosIndex >= 0&&this.cmbPositionNumList.Items.Count>0)
if (selPosIndex >= 0 && this.cmbPositionNumList.Items.Count > 0)
{
this.cmbPositionNumList.SelectedIndex = selPosIndex;
}
groupInfo.Text = ResourceCulture.GetString( ResourceCulture.ComInfo, "元器件【{ 0}】的基本信息",obj.TagNo+" "+obj.PN);
groupInfo.Text = ResourceCulture.GetString(ResourceCulture.ComInfo, "元器件【{ 0}】的基本信息", obj.TagNo + " " + obj.PN);
}
private void DeleteCom(int rowIndex)
{
......@@ -416,7 +418,7 @@ namespace TSA_V
}
else
{
List<ComponetInfo> newlist= CSVBomManager.RemoveCom(cmbList.Text, obj);
List<ComponetInfo> newlist = CSVBomManager.RemoveCom(cmbList.Text, obj);
if (newlist == null)
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SaveError, "保存失败!"));
......@@ -466,7 +468,7 @@ namespace TSA_V
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
sfd.FileName = ResourceCulture.GetString( "元器件库模板");
sfd.FileName = ResourceCulture.GetString("元器件库模板");
sfd.Filter = @"csv|*.csv";
DialogResult result = sfd.ShowDialog();
......@@ -482,7 +484,7 @@ namespace TSA_V
}
//复制文件
File.Copy(sourcePath, filePath);
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.DemoSave,"模板已保存在:" )+ filePath);
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.DemoSave, "模板已保存在:") + filePath);
}
}
}
......@@ -504,7 +506,7 @@ namespace TSA_V
}
else
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceLibrary,"请先选择一个元器件库"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceLibrary, "请先选择一个元器件库"));
}
}
......@@ -519,13 +521,13 @@ namespace TSA_V
{
if (board.bomName.Equals(bomName))
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CanotDelC,"元器件库【{0}】在程序【{1}】中使用,不能删除!",bomName,board.boardName));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CanotDelC, "元器件库【{0}】在程序【{1}】中使用,不能删除!", bomName, board.boardName));
return;
}
}
if (MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SureDeleteC,"确认要删除元器件库【{0}】吗?",bomName),
ResourceCulture.GetString(ResourceCulture.MsgTitle,"提示"),
if (MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SureDeleteC, "确认要删除元器件库【{0}】吗?", bomName),
ResourceCulture.GetString(ResourceCulture.MsgTitle, "提示"),
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question) != DialogResult.OK)
......@@ -546,7 +548,7 @@ namespace TSA_V
}
else
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC,"请先选择一个元器件库"));
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC, "请先选择一个元器件库"));
}
}
......@@ -583,31 +585,46 @@ namespace TSA_V
linkLabel1.Visible = true;
linkLabel2.Visible = true;
}
else{
else
{
linkLabel1.Visible = false ;
linkLabel2.Visible = false ;
linkLabel1.Visible = false;
linkLabel2.Visible = false;
}
}
private LabelInfo PreLabel = null;
private void CloseLed()
{
if (PreLabel != null)
{
LedLabelController.CloseLed(PreLabel.ip, PreLabel.mac);
PreLabel = null;
}
}
Dictionary<string, string> pairs = new Dictionary<string, string>();
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
CloseLed();
string pNum = cmbPositionNumList.Text;
TSAVPosition position = CSVPositionReader<TSAVPosition>.GetPositonByNum(pNum);
if (position != null&&position.PositionType.Equals(2))
if (position != null && position.PositionType.Equals(2))
{
ScanRequestLabel.RequestPost(position, txtCount.Text, txtPartNum.Text, txtDes.Text, out pairs);
LedLabelController.OpenLed(position.DeviceIP, position.Leds);
PreLabel = LedLabelController.GetLabel(position, selCom, true);
LedLabelController.UpdateScreen(PreLabel);
//ScanRequestLabel.RequestPost(position, txtCount.Text, txtPartNum.Text, txtDes.Text, out _);
}
}
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (pairs.Count != 0)
{
ScanRequestLabel.Turnoffthelights(pairs);
pairs.Clear();
}
CloseLed();
//if (pairs.Count != 0)
//{
// ScanRequestLabel.Turnoffthelights(pairs);
// pairs.Clear();
//}
}
}
}
......@@ -9,7 +9,6 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TSA_V.Common;
using TSA_V.DeviceLibrary.manager;
namespace TSA_V
{
......
......@@ -68,7 +68,7 @@ namespace TSA_V
this.lblVersion.Name = "lblVersion";
this.lblVersion.Size = new System.Drawing.Size(65, 17);
this.lblVersion.TabIndex = 11;
this.lblVersion.Text = "版本号 3.0";
this.lblVersion.Text = "版本号 4.1";
//
// btnExit
//
......
......@@ -109,7 +109,7 @@ namespace TSA_V
string time = GetVersion(true);
System.Reflection.AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName();
lblVersion.Text = "V" + assemblyName.Version.ToString();
lblVersion.Text = "V3.0";
lblVersion.Text = "V4.0";
//lblVersion.Text = "V" + assemblyName.Version.ToString() + "(" + time + ")";
LblUserName.Text = FormManager.UserInfo.Name + "/" + FormManager.UserInfo.Limit;
......
......@@ -123,395 +123,395 @@
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnWork.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAARUAAAFKCAYAAAAzNsvAAAAABGdBTUEAALGPC/xhBQAAWt1JREFUeF7t
3cvTdVt13/f8N7Y4MRVBSZVKQ6iTqpB0k64waabSCVaFTiqKUhUprahhSJyLL8KSkS2RcrCMLVkxQsKS
kaxrLDmxFfkioQsHOBwOHDgC8WT85hq/sX5zrDHX3uvZzy52FnNXfWvMd69zgM76MNd65vu+/9af+R//
8Gl2e39Wf/0/Lf1Zn239l/5ov/+56H/R/tiz9f9qM/e/7fdtf9lm9JnWt/0Vmx7W0V/d6a9pr679cNGH
dvrr6LM+X316W1t7P7L0Np9t/aNFf+NzFibX0od3+rGiv/n53V75WzZTr/y4Te+VH3+t/br1E7au+sj5
e9v//oVvdKi0G+OD669z87rNvesARNZsAcYwMDyGwOyC4gEPXecACGfOMPm2homvBRFFJZApQTEA2vT1
JVRQBQpSRByYhoisGYEBJN/mve1HDQK0QcXXI0x03WU4NEBs3eKvPSCSQGELKshuKq5HqHCetLd95LUe
ldntdbuTmIYAZoUJyqAwBaVlIGRItAoTFDsUwrKUQWllSLTARNdeBQqqQGG+S1FgiIjuVIjLZqfCApSU
gjLEBBkMmBkSppjougPFy5BoxU14tjY7ldnLlGEBKm1dgYIqUFCFCmYFCqpAQYLKCoutBROuh7sU1sGC
aQGPESwVJqwDZV1nWAIXA2TZpUixS+GUKlTQLiqcniASmHAtmHS4VKCg4iY8XYHKzpa+Na/X30vt0Yg5
Jt2sMNEqUDpYDAHOI6CwDhYD4abdCjIEdFagoAoT1EHC6SkkAkrZ5vHHqzBhG1QshaQov1NpkHA2TOyG
2kMFNxzniWs7le5m0PxGmtfT96y4voGkZRAwQeTPjDDRAhMk6waJ/foKWPQFLXcoMTMmzPAodywlKFaF
CatAYYaJvqDVHQpB6RJMYseSMdGuwaTtUrwOEruWMOE6ZsakrS3Do0GjqHwLgIIuvlMZ3lDevF5/D1AW
VOzGD1yshskyuypQUOxSmOHAmUEZoBIJLkuGQsbEil1LBoUFLMhg2IOlgkQTULoMkBEq3eNPAKJrKaPC
OlDk14JJA8UnUcmtmDDHBGVQvlVQ6d6p+P/zDpvX6++lhkyAsl1vMGFXgYIMgwoTVmGCHJL1Ja2vBZGr
HoFKUGRdwYKGoGCua8ChoOR1YJJriHB6FSZIEckRkRwRSaAAECKyPgKhiUp5g8yO1e1aEia7oLCLsBgM
3KkcAcWb51SkI6B4+Z3KFha7qdocgIKKm/BszXMqqZuvAxBZswUYw8DwGAKzC4oHPHSdAyCcudip+FoQ
UVQCmRIUA6BNX19CBVWgIEXEgWmIyJoRGEAyz6k8dvOcyh3qdicxDQHMChOUQWEKSstAyJBoFSYodij6
CGQwEBAtQ6IFJrr2KlBQBQrzXYoCQ0R0p0JcNjsVFqCkFJQhJshgwMyQMMVE1x0oXoZEK27CszUff+5U
hgWotHUFCqpAQRUqmBUoqAIFCSorLLYWTLge7lJYBwumBTxGsFSYsA6UdZ1hCVwMkHlO5cELVHa29K15
vf5eao9GzDHpZoWJVoHSwWIIcB4BhXWwGAg37VaQIaCzAgVVmKAOEk5PIRFQyjaPP16FCdugYikkRfmd
SoOEs2FiN9QeKrjhOE/cPKdi8yWvbyBpGQRMEJnnVCzDZJ5TOVfznErxnfbs64GK3fiBi9UwWWZXBQqK
XQozHDgzKANUIsFlyVDImFixa8mgsIAFGQx7sFSQaAJKlwEyQmWeU3ns5jkV7dbrVkMmQNmuN5iwq0BB
hkGFCaswQQ7J+pLW14LIVY9AJSiyrmBBQ1Aw1zXgUFDyOjDJNUQ4vQoTpIjkiEiOiCRQAAgRWR+B0ESl
vEFmx+p2LQmTXVDYRVgMBu5UjoDizXMq0hFQvPxOZQuL3VRtDkBBxU14tuY5ldTN1wGIrNkCjGFgeAyB
2QXFAx66zgEQzlzsVHwtiCgqgUwJigHQpq8voYIqUJAi4sA0RGTNCAwgmedUHrt5TuUOdbuTmIYAZoUJ
yqAwBaVlIGRItAoTFDsUfQQyGAiIliHRAhNdexUoqAKF+S5FgSEiulMhLpudCgtQUgrKEBNkMGBmSJhi
ousOFC9DohU34dmajz93KsMCVNq6AgVVoKAKFcwKFFSBggSVFRZbCyZcD3cprIMF0wIeI1gqTFgHyrrO
sAQuBsg8p/LgBSo7W/rWvF5/L7VHI+aYdLPCRKtA6WAxBDiPgMI6WAyEm3YryBDQWYGCKkxQBwmnp5AI
KGWbxx+vwoRtULEUkqL8TqVBwtkwsRtqDxXccJwnbp5TsfmS1zeQtAwCJojMcyqWYTLPqZyreU6l+E57
9vVAxW78wMVqmCyzqwIFxS6FGQ6cGZQBKpHgsmQoZEys2LVkUFjAggyGPVgqSDQBpcsAGaEyz6k8dvOc
inbrdashE6Bs1xtM2FWgIMOgwoRVmCCHZH1J62tB5KpHoBIUWVewoCEomOsacCgoeR2Y5BoinF6FCVJE
ckQkR0QSKACEiKyPQGiiUt4gs2N1u5aEyS4o7CIsBgN3KkdA8eY5FekIKF5+p7KFxW6qNgegoOImPFvz
nErq5usARNZsAcYwMDyGwOyC4gEPXecACGcudiq+FkQUlUCmBMUAaNPXl1BBFShIEXFgGiKyZgQGkMxz
Ko/dPKdyh7rdSUxDALPCBGVQmILSMhAyJFqFCYodij4CGQwERMuQaIGJrr0KFFSBwnyXosAQEd2pEJfN
ToUFKCkFZYgJMhgwMyRMMdF1B4qXIdGKm/BszcefO5VhASptXYGCKlBQhQpmBQqqQEGCygqLrQUTroe7
FNbBgmkBjxEsFSasA2VdZ1gCFwNknlN58AKVnS19a16vv5faoxFzTLpZYaJVoHSwGAKcR0BhHSwGwk27
FWQI6KxAQRUmqIOE01NIBJSyzeOPV2HCNqhYCklRfqfSIOFsmNgNtYcKbjjOEzfPqdh8yesbSFoGARNE
5jkVyzCZ51TO1TynUnynPft6oGI3fuBiNUyW2VWBgmKXwgwHzgzKAJVIcFkyFDImVuxaMigsYEEGwx4s
FSSagNJlgIxQmedUHrt5TkW79brVkAlQtusNJuwqUJBhUGHCKkyQQ7K+pPW1IHLVI1AJiqwrWNAQFMx1
DTgUlLwOTHINEU6vwgQpIjkikiMiCRQAQkTWRyA0USlvkNmxul1LwmQXFHYRFoOBO5UjoHjznIp0BBQv
v1PZwmI3VZsDUFBxE56teU4ldfN1ACJrtgBjGBgeQ2B2QfGAh65zAIQzFzsVXwsiikogU4JiALTp60uo
oAoUpIg4MA0RWTMCA0jmOZXHbp5TuUPd7iSmIYBZYYIyKExBaRkIGRKtwgTFDkUfgQwGAqJlSLTARNde
BQqqQGG+S1FgiIjuVIjLZqfCApSUgjLEBBkMmBkSppjougPFy5BoxU14tubjz53KsACVtq5AQRUoqEIF
swIFVaAgQWWFxdaCCdfDXQrrYMG0gMcIlgoT1oGyrjMsgYsBMs+pPHiBys6WvjWv199L7dGIOSbdrDDR
KlA6WAwBziOgsA4WA+Gm3QoyBHRWoKAKE9RBwukpJAJK2ebxx6swYRtULIWkKL9TaZBwNkzshtpDBTcc
54mb51RsvuT1DSQtg4AJIvOcimWYzHMq52qeUym+0559PVCxGz9wsRomy+yqQEGxS2GGA2cGZYBKJLgs
GQoZEyt2LRkUFrAgg2EPlgoSTUDpMkBGqMxzKo/dPKei3XrdasgEKNv1BhN2FSjIMKgwYRUmyCFZX9L6
WhC56hGoBEXWFSxoCArmugYcCkpeBya5hginV2GCFJEcEckRkQQKACEi6yMQmqiUN8jsWN2uJWGyCwq7
CIvBwJ3KEVC8eU5FOgKKl9+pbGGxm6rNASiouAnP1jynkrr5OgCRNVuAMQwMjyEwu6B4wEPXOQDCmYud
iq8FEUUlkClBMQDa9PUlVFAFClJEHJiGiKwZgQEk85zKYzfPqdyhbncS0xDArDBBGRSmoLQMhAyJVmGC
Yoeij0AGAwHRMiRaYKJrrwIFVaAw36UoMEREdyrEZbNTYQFKSkEZYoIMBswMCVNMdN2B4mVItOImPFvz
8edOZViASltXoKAKFFShglmBgipQkKCywmJrwYTr4S6FdbBgWsBjBEuFCetAWdcZlsDFAJnnVB68QGVn
S9+a1+vvpfZoxByTblaYaBUoHSyGAOcRUFgHi4Fw024FGQI6K1BQhQnqIOH0FBIBpWzz+ONVmLANKpZC
UpTfqTRIOBsmdkPtoYIbjvPEzXMqNl/y+gaSlkHABJF5TsUyTOY5lXM1z6kU32nPvh6o2I0fuFgNk2V2
VaCg2KUww4EzgzJAJRJclgyFjIkVu5YMCgtYkMGwB0sFiSagdBkgI1TmOZXHbp5T0W69bjVkApTteoMJ
uwoUZBhUmLAKE+SQrC9pfS2IXPUIVIIi6woWNAQFc10DDgUlrwOTXEOE06swQYpIjojkiEgCBYAQkfUR
CE1Uyhtkdqxu15Iw2QWFXYTFYOBO5Qgo3jynIh0BxcvvVLaw2E3V5gAUVNyEZ2ueU0ndfB2AyJotwBgG
hscQmF1QPOCh6xwA4czFTsXXgoiiEsiUoBgAbfr6EiqoAgUpIg5MQ0TWjMAAknlO5bGb51TuULc7iWkI
YFaYoAwKU1BaBkKGRKswQbFD0Ucgg4GAaBkSLTDRtVeBgipQmO9SFBgiojsV4rLZqbAAJaWgDDFBBgNm
hoQpJrruQPEyJFpxE56t+fhzpzIsQKWtK1BQBQqqUMGsQEEVKEhQWWGxtWDC9XCXwjpYMC3gMYKlwoR1
oKzrDEvgYoDMcyoPXqCys6Vvzev191J7NGKOSTcrTLQKlA4WQ4DzCCisg8VAuGm3ggwBnRUoqMIEdZBw
egqJgFK2efzxKkzYBhVLISnK71QaJJwNE7uh9lDBDcd54uY5FZsveX0DScsgYILIPKdiGSbznMq5mudU
iu+0Z18PVOzGD1yshskyuypQUOxSmOHAmUEZoBIJLkuGQsbEil1LBoUFLMhg2IOlgkQTULoMkBEq85zK
YzfPqWi3XrcaMgHKdr3BhF0FCjIMKkxYhQlySNaXtL4WRK56BCpBkXUFCxqCgrmuAYeCkteBSa4hwulV
mCBFJEdEckQkgQJAiMj6CIQmKuUNMjtWt2tJmOyCwi7CYjBwp3IEFG+eU5GOgOLldypbWOymanMACipu
wrM1z6mkbr4OQGTNFmAMA8NjCMwuKB7w0HUOgHDmYqfia0FEUQlkSlAMgDZ9fQkVVIGCFBEHpiEia0Zg
AMk8p/LYzXMqd6jbncQ0BDArTFAGhSkoLQMhQ6JVmKDYoegjkMFAQLQMiRaY6NqrQEEVKMx3KQoMEdGd
CnHZ7FRYgJJSUIaYIIMBM0PCFBNdd6B4GRKtuAnP1nz8uVMZFqDS1hUoqAIFVahgVqCgChQkqKyw2Fow
4Xq4S2EdLJgW8BjBUmHCOlDWdYYlcDFA5jmVBy9Q2dnSt+b1+nupPRoxx6SbFSZaBUoHiyHAeQQU1sFi
INy0W0GGgM4KFFRhgjpIOD2FREAp2zz+eBUmbIOKpZAU5XcqDRLOhondUHuo4IbjPHHznIrNl7y+gaRl
EDBBZJ5TsQyTeU7lXM1zKsV32rOvByp24wcuVsNkmV0VKCh2Kcxw4MygDFCJBJclQyFjYsWuJYPCAhZk
MOzBUkGiCShdBsgIlXlO5bGb51S0W69bDZkAZbveYMKuAgUZBhUmrMIEOSTrS1pfCyJXPQKVoMi6ggUN
QcFc14BDQcnrwCTXEOH0KkyQIpIjIjkikkABIERkfQRCE5XyBpkdq9u1JEx2QWEXYTEYuFM5Aoo3z6lI
R0Dx8juVLSx2U7U5AAUVN+HZmudUUjdfByCyZgswhoHhMQRmFxQPeOg6B0A4c7FT8bUgoqgEMiUoBkCb
vr6ECqpAQYqIA9MQkTUjMIBknlN57OY5lTvU7U5iGgKYFSYog8IUlJaBkCHRKkxQ7FD0EchgICBahkQL
THTtVaCgChTmuxQFhojoToW4bHYqLEBJKShDTJDBgJkhYYqJrjtQvAyJVtyEZ2s+/typDAtQaesKFFSB
gipUMCtQUAUKElRWWGwtmHA93KWwDhZMC3iMYKkwYR0o6zrDErgYIPOcyoMXqOxs6Vvzev291B6NmGPS
zQoTrQKlg8UQ4DwCCutgMRBu2q0gQ0BnBQqqMEEdJJyeQiKglG0ef7wKE7ZBxVJIivI7lQYJZ8PEbqg9
VHDDcZ64eU7F5kte30DSMgiYIDLPqViGyTyncq7mOZXiO+3Z1wMVu/EDF6thssyuChQUuxRmOHBmUAao
RILLkqGQMbFi15JBYQELMhj2YKkg0QSULgNkhMo8p/LYzXMq2q3XrYZMgLJdbzBhV4GCDIMKE1ZhghyS
9SWtrwWRqx6BSlBkXcGChqBgrmvAoaDkdWCSa4hwehUmSBHJEZEcEUmgABAisj4CoYlKeYPMjtXtWhIm
u6Cwi7AYDNypHAHFm+dUpCOgePmdyhYWu6naHICCipvwbM1zKqmbrwMQWbMFGMPA8BgCswuKBzx0nQMg
nLnYqfhaEFFUApkSFAOgTV9fQgVVoCBFxIFpiMiaERhAMs+pPHbznMod6nYnMQ0BzAoTlEFhCkrLQMiQ
aBUmKHYo+ghkMBAQLUOiBSa69ipQUAUK812KAkNEdKdCXDY7FRagpBSUISbIYMDMkDDFRNcdKF6GRCtu
wrM1H3/uVIYFqLR1BQqqQEEVKpgVKKgCBQkqKyy2Fky4Hu5SWAcLpgU8RrBUmLAOlHWdYQlcDJB5TuXB
C1R2tvSteb3+XmqPRswx6WaFiVaB0sFiCHAeAYV1sBgIN+1WkCGgswIFVZigDhJOTyERUMo2jz9ehQnb
oGIpJEX5nUqDhLNhYjfUHiq44ThP3DynYvMlr28gaRkETBCZ51Qsw2SeUzlX85xK8Z327OuBit34gYvV
MFlmVwUKil0KMxw4MygDVCLBZclQyJhYsWvJoLCABRkMe7BUkGgCSpcBMkJlnlN57OY5Fe3W61ZDJkDZ
rjeYsKtAQYZBhQmrMEEOyfqS1teCyFWPQCUosq5gQUNQMNc14FBQ8jowyTVEOL0KE6SI5IhIjogkUAAI
EVkfgdBEpbxBZsfqdi0Jk11Q2EVYDAbuVI6A4s1zKtIRULz8TmULi91UbQ5AQcVNeLbmOZXUzdcBiKzZ
AoxhYHgMgdkFxQMeus4BEM5c7FR8LYgoKoFMCYoB0KavL6GCKlCQIuLANERkzQgMIJnnVB67eU7lDnW7
k5iGAGaFCcqgMAWlZSBkSLQKExQ7FH0EMhgIiJYh0QITXXsVKKgChfkuRYEhIrpTIS6bnQoLUFIKyhAT
ZDBgZkiYYqLrDhQvQ6IVN+HZmo8/dyrDAlTaugIFVaCgChXMChRUgYIElRUWWwsmXA93KayDBdMCHiNY
KkxYB8q6zrAELgbIPKfy4AUqO1v61rxefy+1RyPmmHSzwkSrQOlgMQQ4j4DCOlgMhJt2K8gQ0FmBgipM
UAcJp6eQCChlm8cfr8KEbVCxFJKi/E6lQcLZMLEbag8V3HCcJ26eU7H5ktc3kLQMAiaIzHMqlmEyz6mc
q3lOpfhOe/b1QMVu/MDFapgss6sCBcUuhRkOnBmUASqR4LJkKGRMrNi1ZFBYwIIMhj1YKkg0AaXLABmh
Ms+pPHbznIp263WrIROgbNcbTNhVoCDDoMKEVZggh2R9SetrQeSqR6ASFFlXsKAhKJjrGnAoKHkdmOQa
IpxehQlSRHJEJEdEEigAhIisj0BoolLeILNjdbuWhMkuKOwiLAYDdypHQPHmORXpCChefqeyhcVuqjYH
oKDiJjxb85xK6ubrAETWbAHGMDA8hsDsguIBD13nAAhnLnYqvhZEFJVApgTFAGjT15dQQRUoSBFxYBoi
smYEBpDMcyqP3Tyncoe63UlMQwCzwgRlUJiC0jIQMiRahQmKHYo+AhkMBETLkGiBia69ChRUgcJ8l6LA
EBHdqRCXzU6FBSgpBWWICTIYMDMkTDHRdQeKlyHRipvwbM3HnzuVYQEqbV2BgipQUIUKZgUKqkBBgsoK
i60FE66HuxTWwYJpAY8RLBUmrANlXWdYAhcDZJ5TefAClZ0tfWter7+X2qMRc0y6WWGiVaB0sBgCnEdA
YR0sBsJNuxVkCOisQEEVJqiDhNNTSASUss3jj1dhwjaoWApJUX6n0iDhbJjYDbWHCm44zhM3z6nYfMnr
G0haBgETROY5FcswmedUztU8p1J8pz37eqBiN37gYjVMltlVgYJil8IMB84MygCVSHBZMhQyJlbsWjIo
LGBBBsMeLBUkmoDSZYCMUJnnVB67eU5Fu/W61ZAJULbrDSbsKlCQYVBhwipMkEOyvqT1tSBy1SNQCYqs
K1jQEBTMdQ04FJS8DkxyDRFOr8IEKSI5IpIjIgkUAEJE1kcgNFEpb5DZsbpdS8JkFxR2ERaDgTuVI6B4
85yKdAQUL79T2cJiN1WbA1BQcROerXlOJXXzdQAia7YAYxgYHkNgdkHxgIeucwCEMxc7FV8LIopKIFOC
YgC06etLqKAKFKSIODANEVkzAgNI5jmVx26eU7lD3e4kpiGAWWGCMihMQWkZCBkSrcIExQ5FH4EMBgKi
ZUi0wETXXgUKqkBhvktRYIiI7lSIy2anwgKUlIIyxAQZDJgZEqaY6LoDxcuQaMVNeLbm48+dyrAAlbau
QEEVKKhCBbMCBVWgIEFlhcXWggnXw10K62DBtIDHCJYKE9aBsq4zLIGLATLPqTx4gcrOlr41r9ffS+3R
iDkm3aww0SpQOlgMAc4joLAOFgPhpt0KMgR0VqCgChPUQcLpKSQCStnm8cerMGEbVCyFpCi/U2mQcDZM
7IbaQwU3HOeJm+dUbL7k9Q0kLYOACSLznIplmMxzKudqnlMpvtOefT1QsRs/cLEaJsvsqkBBsUthhgNn
BmWASiS4LBkKGRMrdi0ZFBawIINhD5YKEk1A6TJARqjMcyqP3Tynot163WrIBCjb9QYTdhUoyDCoMGEV
JsghWV/S+loQueoRqARF1hUsaAgK5roGHApKXgcmuYYIp1dhghSRHBHJEZEECgAhIusjEJqolDfI7Fjd
riVhsgsKuwiLwcCdyhFQvHlORToCipffqWxhsZuqzQEoqLgJz9Y8p5K6+ToAkTVbgDEMDI8hMLugeMBD
1zkAwpmLnYqvBRFFJZApQTEA2vT1JVRQBQpSRByYhoisGYEBJPOcymM3z6ncoW53EtMQwKwwQRkUpqC0
DIQMiVZhgmKHoo9ABgMB0TIkWmCia68CBVWgMN+lKDBERHcqxGWzU2EBSkpBGWKCDAbMDAlTTHTdgeJl
SLTiJjxb8/HnTmVYgEpbV6CgChRUoYJZgYIqUJCgssJia8GE6+EuhXWwYFrAYwRLhQnrQFnXGZbAxQCZ
51QevEBlZ0vfmtfr76X2aMQck25WmGgVKB0shgDnEVBYB4uBcNNuBRkCOitQUIUJ6iDh9BQSAaVs8/jj
VZiwDSqWQlKU36k0SDgbJnZD7aGCG47zxM1zKjZf8voGkpZBwASReU7FMkzmOZVzNc+pFN9pz74eqNiN
H7hYDZNldlWgoNilMMOBM4MyQCUSXJYMhYyJFbuWDAoLWJDBsAdLBYkmoHQZICNU5jmVx26eU9FuvW41
ZAKU7XqDCbsKFGQYVJiwChPkkKwvaX0tiFz1CFSCIusKFjQEBXNdAw4FJa8Dk1xDhNOrMEGKSI6I5IhI
AgWAEJH1EQhNVMobZHasbteSMNkFhV2ExWDgTuUIKN48pyIdAcXL71S2sNhN1eYAFFTchGdrnlNJ3Xwd
gMiaLcAYBobHEJhdUDzgoescAOHMxU7F14KIohLIlKAYAG36+hIqqAIFKSIOTENE1ozAAJJ5TuWxm+dU
7lC3O4lpCGBWmKAMClNQWgZChkSrMEGxQ9FHIIOBgGgZEi0w0bVXgYIqUJjvUhQYIqI7FeKy2amwACWl
oAwxQQYDZoaEKSa67kDxMiRacROerfn4c6cyLEClrStQUAUKqlDBrEBBFShIUFlhsbVgwvVwl8I6WDAt
4DGCpcKEdaCs6wxL4GKAzHMqD16gsrOlb83r9fdSezRijkk3K0y0CpQOFkOA8wgorIPFQLhpt4IMAZ0V
KKjCBHWQcHoKiYBStnn88SpM2AYVSyEpyu9UGiScDRO7ofZQwQ3HeeLmORWbL3l9A0nLIGCCyDynYhkm
85zKuZrnVIrvtGdfD1Tsxg9crIbJMrsqUFDsUpjhwJlBGaASCS5LhkLGxIpdSwaFBSzIYNiDpYJEE1C6
DJARKvOcymM3z6lot163GjIByna9wYRdBQoyDCpMWIUJckjWl7S+FkSuegQqQZF1BQsagoK5rgGHgpLX
gUmuIcLpVZggRSRHRHJEJIECQIjI+giEJirlDTI7VrdrSZjsgsIuwmIwcKdyBBTv2nMq77Ab/r1//7Wn
H/zUG08f+q03nz72u199+uTvv/X0S3/4J61Pfvqtp4/9y68+fei333z6wV/60tN7f+oLT+/ATX8tJkww
aaBwl4ISJkNQAhOupQoUdgQUL79T2cJiN1WbA1BQcROerXlOJXXzdQAia7YAYxgYHkNgdkHxgIeucwCE
Mxc7FV8LJN/xI68+ve/jrz994vfeevrG0/EP/p1PGDzv+8QXn77zw4bANbAoIg5MQ0TWjMAAknlO5bGb
51TuULc7iWkIYFaYoAwKU1BaBkKGRKswQbFD0Uegzzy968c++/SBX/vy09f+dMHhJT74z/rgr3/56V0/
/rkrdysImCwREd2pEJfNToUFKCkFZYgJMhgwMyRMMdF1B4qXIdGKm/BszcefO5VhASptXYGCKlBQhQpm
BQqqQEGCCnqH3ez/3S++8fSng23JnxgMv//G159+89WvPX3kn3/l6Yd+5UtP3/8Lb7Swxne4hn8G/2z1
wX/2D9jj0Tts51CCgjpQ1nWGJXAxQOY5lQcvUNnZ0rfm9fp7qT0aMcekmxUmWgVKB4uBwHkEFOag/Ac/
/tmnP/ryVgLg8K+/+PWn99sjzCt4+Vq9qEXdi9rPPL1iQL3/57/Y/t0KGPx3vftvf74ABYDk6SkkAkpZ
wwQZBteAgjaoWApJUX6n0iDhbJjYDbWHCm44zhM3z6nYfMnrG0haBgETRL4Z51S+75Nf3LwzweMK3qW8
HVDwPYvh0V7eXgAl/9Tn7YYD3q3kxyn8d36f7Yy2sMxzKmdrnlMpvtOefT1QsRs/cLEaJsvsqkBBsUth
hgNnBmWACvvo73xlucPl89uf/drTO7FLICZW/CQog8ICFmT/boIFvdNu9t/+3Nf8v2X9fPR3v5pQWTDZ
ZICMUJnnVB67eU5Fu/W61ZAJULbrDSbsKlCQAVFhwgpM0C98evtTne/9+OtPbzMkiIj+WHmISgmKrAWW
VwyN7/25L/p/2/LB/4Zf/IM/EVAw1zXgUFDyOjDJNUQ4vQoTpIjkiEiOiCRQAAgRWR+B0ESlvEFmx+p2
LQmTXVDYRVgMCO5UDoDy0X/xlQ6U19/6xtO7f+Jz9jhkGDgmV4HCSlgsASUyPP7Dv/359t/JD1ZtxyKY
NFC4S0EJkyEogQnXUgUKOwKKl9+pbGGxm6rNASiouAnP1jynkrr5OgCRNVuAMQwMjyEwu6B4wEPXOUDC
aeEdin7w05p3ffjV9n5FEVFUApkSFAOgTV9fQgUZLN9tiP3+G/2Llu/7x19aEXFgGiKyZgQGkMxzKo/d
PKdyh7rdSUxDALPCBGVQmILScjRGOSYIP+XJOxSAoudUMiitDIkWmOjaq0BBeNRxWPKO5d3/x+cDEUZE
dKdCXDY7FRagpBSUISbIYMDMkDDFRNcdKF6GRCtuwrM1H3/uVIYFqLR1BQqqQEEVKpgVKMhB+Xa74fOP
jd/9E59tO5S2S2mo2Fow4Xq4S2EdLJgW8BjB4qggPArpB/8b32E3+gKK/TMDWAIXA2SeU3nwApWdLX1r
Xq+/l9qjEXNMullholWgdLAYApw7oCAcbNPPX/j46wHKkoFw024FGQI6K1CQoIK+9+f7R7If+GU8Btk1
B6WlkAgoZZvHH6/ChG1QsRSSovxOpUHC2TCxG2oPFdxwnCdunlOx+ZLXN5C0DAImiNzrnMp3/Y1Xu5Oy
+LHx2/6KXZMdSsyEyb9taPxXn1wOv5U7lhIUq8KEJVReMUD0x8343/quj+AxyGBwQBh3KZFgMs+pPGbz
nErxnfbs64GK3fiBi9UwWWZXBQqKXQozHDgzKI7KB371S367Lgfb3vHDBgR2MLFLYYZCQuXtBgQ+/8xu
+v/4o3ajZ1Q6WJBBsQdLAoW903YWekDug7/x5manMkJlnlN57OY5Fe3W61ZDJkDZrjeYsKtAQYZBhYn3
HR/6THez/uy/easDZX1J62uDRN+lEBV+/uo/ffPp37Wdzz4osq5gQQUsOHnLD/43f+ffNBgMDgUlrwOT
XEOE06swQYpIjojkiEgCBYAQkfURCE1Uyhtkdqxu15Iw2QWFXYTFYOBOpQAFePwX//ALfpvi9/J84+nP
4bEHqFjX/HkqGRV83vr6N57+s5/5wtOfsx3PS+1U0Nt/9NXu9wq97+e+WO5UYr2LCddSBQo7AoqX36ls
YbGbqs0BKKi4Cc/WPKeSuvk6AJE1W4AxDAyPITC7oHjAQ9epT9jOhJ9//frXA5RW7FR87ZAQlhEq/OA9
yHf/rc8JLIbDJVRQAUrL8MBvQuQHO5eGyDyn8v/r5jmVO9TtTmIaApgVJiiDwhSU1oJH1bfbza7nUt7/
s693oAQmvkvRnQpx2UOFH/yJb69g13LNTgVVoHjv/0frT4Lwvx0/XiYiulMhLpudCgtQUgRE22CCDAbM
DAlTTHTdgeJlSLTiJjxb8/HnTmVYgEpbV6CgChRUoYJZoPLn/+5ry91pHzxWvA2IFKissNhaQMH6GlTw
+eJb33h670+91oMygqXAhL3yI/0j0Hv/weuxS1FYAhcDZJ5TefAClZ0tfWter7+X2qMRc0y6WWGiVaB0
sBgCnAUqPyBnU37fHisClBIWg6TYrVyLCj74UTAeif4dvAPBrqUCBRWYtPDv2aOOHt//wXZmZcWkmxkT
tnn88SpM2AYVSyEpyu9UGiScDRO7ofZQwQ3HeeLmORWbL3l9A0nLIGCCyEufU/nQP/2y35pPT7/xmT8J
TI78vT9HUOHnq1//xtNf+y17JAIUR1BBhgr+BDl+/vr//ZUGCOMuJRJM5jmVx2yeUym+0559PVCxGz9w
sRomy+yqQEGxS2GGA6eAgj72/37Vb82np5/4f77S71KQ4LLUg/JcVPjBS9f3/vQXrgcF2a7kI7+z/u/+
2L96K3YqI1TmOZXHbp5T0W69bjVkApTteoMJuwoUZBgkTNgnf2/9yc//8MtvlKCsL2l9bZDw0efIO5W9
z//5b956+i78lOgSLv7480O/tu6wPok/a8XwICh5HZjkGiKcXoUJUkRyRCRHRBIoAISIrI9AaKJS3iCz
Y3W7loTJLijsIiwGA3cqBSr4O3n4+W/+0Rd7VKznnlM5+rGnoae/9JtffnpbBYnmPzr+/k+t74J+6Y8M
lbRTifUuJlxLFSjsCChefqeyhcVuqjYHoKDiJjxb85xK6ubrAETWbAHGMDA8hsDsguIBEF0rKvb/8vxU
qKw7FV87JITlJVD5yd/96tO/j9/Hc2mXgtpOBaisv63gl/4YqCzX4pGHqDgs85zKYzfPqdyhbncS0xDA
rDBBGRSmoLQMhIQJ+3l5/PmhX/7SBpTAxHcpulMhLs9BBedLfv7Tbz39R/gT8xWTS6ig4vGn253IJCpl
AUpKQRliggwGzAwJU0x03YHiZUi04iY8W/Px505lWIBKW1egoAoUVKGCWaCy+6JWUFlhsbWAgvURVPAj
5V//zNee/pOffG3Bw/7dDSiowoQZKtWL2gxL4GKAzHMqD16gsrOlb83r9fdSezRijkk3K0y0CpQOFkOA
s0Bl9CPlGhaDpNitXIMKdia/84WvP/2nP/WF5XwKMLnhnIr+SPlD/+wry/cKiYBStnn88SpM2AYVSyEp
yu9UGiScDRO7ofZQwQ3HeeLmORWbL3l9A0nLIGCCyEufUxkdfnvJcyqf+fKfPv3n//D1FZI2rQoTVoHC
DBU9/Pbf/5MvNUAYdymRYDLPqTxm85xK8Z327OuBit34gYvVMFlmVwUKil0KMxw4BRS0e0x/s1NBPSh7
qHzla994+i/xu4hf8Hcpo1cMiuqY/h4q85zKYzfPqWi3XrcaMgHKdr3BhF0FCjIMEibsmt9QuL6k9bVB
wkef0TuV/9Z2QPHXoJagyLqCBRWgAI/8GwrfaTe2gpLXgUmuIcLpVZggRSRHRHJEJIECQIjI+giEJirl
DTI7VrdrSZjsgsIuwmIwcKdSoAI89v7og6PnVP7ir37p6R348S4w0UpYrGsxYfafnf/og+U9yxaTISiB
CddSBQo7AoqX36lsYbGbqs0BKKi4Cc/WPKeSuvk6AJE1W4AxDAyPITC7oHjAQ9epvT+kad2p+NohISwL
Kp95+uHfevPp37ObdINJA8UwaNPXl1BBFSjW2w2F/Ic0NUQAmcHSHnc8AgNI5jmVx26eU7lD3e4kpiGA
WWGCMihMQWkteIy69MdJrrAsKShRhkQLTHTtVaCgAhS0+eMk7cYmJnmnQlw2OxUWoKQUlCEmyGDAzJAw
xUTXHShehkQrbsKzNR9/7lSGBai0dQUKqkBBFSqYBSgtA6T8g68FlRUWWwsmXLdZgcI6WDAt4DGCpQCl
/oOv7Zo//mRYAhcDZJ5TefAClZ0tfWter7+X2qMRc0y6WWGiVaB0sBgCnANQUP4rOn4Lf0VHQqXtUm7a
rSBDQGcFCkqg1H9FB/9CMU8hEVDKGibIMLgGFLRBxVJIivI7lQYJZ8PEbqg9VHDDcZ64eU7F5kte30DS
MgiYIHKvv/cHjf4yMe5QYmZMmOFR7lhKUKwKE5ZQqf8ysQUT3aEQlC7BZJ5TeczmOZXiO+3Z1wMVu/ED
F6thssyuChQUuxRmaHBmUASVS3/t6ZKhkDGxYteSQWEBCzIo9mBJoOz/taeSATJCZZ5TeezmORXt1utW
QyZA2a43mLCrQEGGQYUJc1RQ9Re0f/eHAYvsVgSRqx6BSlBkXcGCDJTLf0H7qw0OBSWvA5NcQ4TTqzBB
ikiOiOSISAIFgBCR9REITVTKG2R2rG7XkjDZBYVdhMWw4E7lAijsv/5k/6jx+298/eldH37VYTEMHJOr
QGElLI5HgQlB0eP4+HzfP34jMGmgDHYqsd7FhGupAoUdAcXL71S2sNhN1eYAFFTchGdrnlNJ3XwdgMia
LcAYBobHEJhdUDzgoescMOH0PvovvrLZseBRSBFRVAKZEhQDoE1fX0LFwiNP3qF89He/ugLSsn/WZkNE
1ozAAJJ5TuWxm+dU7lC3O4lpCGBWmKAMClNQWo7GKMFE+4VPv9XBgs9f+PjrT68YEMd3KXbTX7FTwR+E
/b0/1++U8L/hF/FHRvoOhrsUBYaI6E6FuGx2KixASSkoQ0yQwYCZIWGKia47ULwMiVbchGdrPv7cqQwL
UGnrChRUgYIqVDArUFABSusv247ld76y3NnywY+b34mb2jAhLsNdCutgwbQAicDyTrvR9cfG/LQdCkEJ
VAjKus6wBC72nzvPqTx4gcrOlr41r9ffS+3RiDkm3aww0SpQOlgMB84joDCDBe9Y8o4Fh9B+9vfeakf0
r9+tIENAp2HydoMBJ2X1YBs++O/8vl98I4ECQPL0FBIBpWzz+ONVmLANKpZCUpTfqTRIOBsmdkPtoYIb
jvPEzXMqNl/y+gaSlkHABJF7nlPR8p+ngp8K5R8344Pfh4Pf4Pf+T3yx/a7kcsdSgPKKYfL+n/9i+3f1
9/Lwg/+ud+OPmlRQApb+Ba3uUAhKl2Ayz6k8ZvOcSvGd9uzrgYrd+IGL1TBZZlcFCopdCjMcODMoA1Qi
weXbf/gz7YCcnrzVD3DAT4rwp7J95J9/5emHfuVLT9//C2+0sMZ3uIZ/poIEH/xn/8AvfenpHbaLKEFB
AkqXATJCZZ5TeezmORXt1utWQyZA2a43mLCrQEGGQoUJqzBBslPRcyrf9WOfffrAr31587hyywf/WR/8
9S8/vevH5e/+GYKCua4Bh4KS14FJriHC6VWYIEUkR0RyRCSBAkCIyPoIhCYq5Q0yO1a3a0mY7ILCLsJi
MHCncgQUb+/PU/mOH3n16X0ff/3pE7+3/SnRNR/8O3iX8j57dPrODxsAe5gwwaSBwl0KSpgMQQlMuJYq
UNgRULz8TmULi91UbQ5AQcVNeLbmOZXUzdcBiKzZAoxhYHgMgdkFxQMeus4BEM5c7FR8zZeyDgvX3243
/J//e689/eCn3nj60G+9+fSx3/3q0yc//Vb7y8rwl3190vD42L/86tOHfvvNpx+0x5v3/tQXnt6BG5+Q
5DImTBFxYBoismYEBpDMcyqP3Tyncoe63UlMQwCzwgRlUJiC0jIQMiRahQmKHYo+Am1BaeWXs1r3kpZr
rwIFVaAw36UoMEREdyrEZbNTYQFKSkEZYoIMBswMCVNMdN2B4mVItOImPFvz8edOZViASltXoKAKFFSh
glmBgipQkKCywmJrwYTrNitQWPrpT4AygqXChHWgrOsMS+BigMxzKg9eoLKzpW/N6/X3Uns0Yo5JNytM
tAqUDhZDgPMIKKyDxUC4abeCDAGdFSiowgR1kHB6ComAUrZ5/PEqTNgGFUshKcrvVBoknA0Tu6H2UMEN
x3ni5jkVmy95fQNJyyBggsg365xKNzMmzPAodywlKFaFCatAYYbJPKdyruY5leI77dnXAxW78QMXq2Gy
zK4KFBS7FGY4cGZQBqhEgsuSoZAxsWLXkkFhAQsyGPZgqSDRBJQuA2SEyjyn8tjNcyrardethkyAsl1v
MGFXgYIMgwoTVmGCHJL1Ja2vBZGrHoFKUGRdwYKGoGCua8ChoOR1YJJriHB6FSZIEckRkRwRSaAAECKy
PgKhiUp5g8yO1e1aEia7oLCLsBgM3KkcAcW75u/92QWFlbBY12LCBJMGCncpKGEyBCUw4VqqQGFHQPHy
O5UtLHZTtTkABRU34dma51RSN18HIPzPclRil+LvVIbA7ILiAQ9d5wAIZy52Kr4WRBSVQKYExQBo09eX
UEEVKEgRcWAaIrJmBAaQzHMqj908p3KHut1JTEMAs8IEZVCYgtIyEDIkWoUJih2KPgIZDAREy5BogYmu
vQoUVIHCfJeiwBAR3akQl81OhQUoKQVliAkyGDAzJEwx0XUHipch0Yqb8GzNx587lWEBKm1dgYIqUFCF
CmYFCqpAQYLKCoutBROuh7sU1sGCaQGPESwVJqwDZV1nWAIXA2SeU3nwApWdLX1rXq+/l9qjEXNMullh
olWgdLAYApxHQGEdLAbCTbsVZAjorEBBFSaog4TTU0gElLLN449XYcI2qFgKSVF+p9Ig4WyY2A21hwpu
OM4TN8+p2HzJ6xtIWgYBE0TmORXLMJnnVM7VPKdSfKc9+3qgYjd+4GI1TJbZVYGCYpfCDAfODMoAlUhw
WTIUMiZW7FoyKCxgQQbDHiwVJJqA0mWAjFCZ51Qeu3lORbv1utWQCVC26w0m7CpQkGFQYcIqTJBDsr6k
9bUgctUjUAmKrCtY0BAUzHUNOBSUvA5Mcg0RTq/CBCkiOSKSIyIJFABCRNZHIDRRKW+Q2bG6XUvCZBcU
dhEWg4E7lStB+dQfvNX+vBOs986p4A9qwgdzCAorYbGuxYQJJg0U7lJQwuQDv/lm+2MX3vMzr3eYfPD/
erP1zXinsoXFbqo2B6Cg4iY8W/OcSurm6wBE1mwBxjAwPLD+no9+/ukD/+RL+/3K9XWwCDD4AJb269ip
+Jo7koRK7F5KUAyANn19CRVUgYIUEQemISJrxg8g0XMq/PSo+HqEia67DIcGiK3nOZVnN8+p3KFudxLT
QMH0XcmnPr3sIF7qM9qt4POBXzV0Yoeij0AGgwPS/rmrdymvPr3n77/29IFf//J1/cZ+7/npLzgsS9yd
cKeCXQo+H7TZ7VL0+wAlpaAMMUEGA2aGhCkmuu5A8TIkWnETnq35+HOnMixApa0dFexUuv7O8heXAxus
q/gog53J9/zka10VKt/zd19b/vmEygqLrQ2R/OiD797z915rjWABFi/1+cBvvOmgrLsXhYWf9/yD5dGH
L2r5aY9EDRH7/hpU0C4qnJ4gEphwLZh0uFSgoOImPF2Bys6WvjWv199L7dGIOSbddFBG4QNUuvcp8l4F
mODzPX9HENEEEwRM8MFs331saYHFcLDw6/bPcJfi4fOpP/yTISrX7FT4qXYnS2+2+Z6ffr0DpZV2KZjV
LuXIZx8VSyEpyu9UGiScDRO7ofZQwQ3HeeLmORWbL3l9A0nLUGCCSD6ngk+HSoBiCFhbVOxaAculDyDh
ToW7FAUFYZeCT8MmgbK+T+G0incp/JTvU1h6Qas7FISXs/i0Rxz7NVHh95h4UdvWf7ysRw0xabsUr4PE
riVMuI6ZMWlry/Bo0Cgq3wKgoHlOpfhOe/b1QMVu/MDFapgss2sXlaUVlc8v0GRQHBXsTFA8LqVfc7fy
gV/tH3tYe0lrYaeCz+YxKGBBBsMAFn5KTJiA0mWAcJeCT3v0cVS6dyz2iPOen1n+vuYGx+HHH8NBgRFM
Gig+iUpuxYQ5JiiD8q2CSvdOxf+fd9i8Xn8vNWQClO16gwmrUBFQOlT0HUrOH4G4YwEm7dcNkeXfx6MP
H3sABxFp71Ls+8h3K91jUAmKrCtU8OshKJjrmjsVBQUfoILv9bGHuxa8U8Fng0qFCVJEckQkR0QSKACE
iKyPQGiiUt4gs2N1u5aEyS4oHj5X71QugNK9pPXv4syKAXP00+1WSlgsAaVDpQIFCSYNFN+l4F1L/vAl
LT9tlwJUDI/DqKAjoHj5ncoWFrup2hyAgoqb8GzNcyqpm68DEFmzBRjDwfAYAYPPVTuV9vhj341gscld
CXBRVD71B7YzEVSwC2F4DGLYyQCSzW4FeAQstr4JlQWRFRZDwnYj/AAOvjsBKggf7GJ4TgURlb1P905l
CIvh0ACx9Tyn8uzmOZU71O1OYhoCmIYH4HjpD8AIVKx41PFfExJ8z5/66DkVvk9pcUfiAZnYqQQmuvaO
ooJ8l6LAAJMGhwGjqACc2KFIRAUvakcFKqNdCt+tZEiYYqLrDhQvQ6IVN+HZmo8/dyrDAlTa2lDBaVnA
kuOn+77tLpb40e8YdjGKCj766MN3KO07A0bPqRATfbeSYenqYMG0AEmChZ8SE9aBsq75buVTggp+DUS6
31AoqDzvRS0zHAIVTk8QCUy4Fkw6XCpQUHETnq5AZWdL35rX6++l9mjEHJNuyqNODgfg8AE43eOPPAat
jz+DF7UExN+nABt+FzsXQNL6jF23xx4kj0BV7adDG1QIikwB5SpUOkg4PQCSUFFItG/WO5UGCWfDxG6o
PVRww3GeuHlOxeZLXt9A0jIUmECi51SACT4dKgGKIXDgnIoiAljwkxzuaLhDweSngoTx+j4oVgLlKlSQ
YXLNORU+/igm3LEc+pFyhUnbpXgdJHYtYcJ1zIxJW1uGR4NGUfkWAAXNcyrFd9qzrwcqduMHLlbDZJna
PipL/YvahElCRWHhh48+DJ8Ghj/25McgIBL/DFHpYEEGwwAWfkpMmIDStYNK9/hjcBAVfKr3Kah7p9Lh
YjgoMIJJA8UnUcmtmDDHBGVQvlVQ6d6p+P/zDpvX6++lhkyAsl1nTBg/I1A6VK48p4L4KIQPUFl2Kstu
BR+A0b1L0SpUSlBkXaGCXw9BwVzXulPJjz/tOwXFu+anP4Blf7fiEZEcEUmgABAisj4CoYlKeYPMjtXt
WhIme6AMdykJlm6ncgUoaLxbWcEAJhUoJSpDWCwBpUOlAgUJJg0U7lKQw9LtVApQlp3KN+edyhYWu6na
HICCipvwbM1zKqmbrwMQWbMFGMPBEFFg+IIWnz1QNqjguxEsnBY/2LHgnQo+hAWfBkZCJZCpUAEeAYut
b0JFEHFg2k5F1qPHn+qcyorKgs0QE113GQ4NEFvPcyrPbp5TuUPd7iSmIYDpmDB+yl1KguXo4w93KURk
/bHylzc7ldihOCaM/0x8Z5jgdyDju0vxg0eYS61//IHD4u29qGWHf6S8wQQZDJgZEqaY6LoDxcuQaMVN
eLbm48+dyrAAlbZ2THSHMgQFVaiMHn+Qg9LtSvBde+RZe/ZPfyx+/5IfwLI+DhkWjgq+x0ffqcxzKg9e
oLKzpW/N6/X3Uns0Yo5JN0eg+PclKALLisr+OZVuh+LfbWF5Pir9+xSZ6fEnqh59UAMkTw+AJFQUEu2b
9U6lQcLZMLEbag8V3HCcJ26eU7H5ktc3kLQMBeaAAJO/SFAyJloDxRCwsEPBDuTSORW8P1FQRn/vD/6z
2sG2/Pjjj0B4LAIo3eG3EhSrwoRVoDDDZO+cCn//T/X4o+dU4sfGikoFS4VJ26V4HSR2LWHCdcyMSVtb
hkeDRlH5FgAFzXMqxXfas68HKnbjBy6WITL/3h9JQOlyVBokmmDSCkB0LWVUWAeK/FowaaD4JCq5FRPm
mKAMyrcKKt07Ff9/3mHzev291JAJULbrDSbsKlCQYVBhwipMkEOi51TaWhDZe2G7D4qsK1jQEBTMdQ04
FJS8DkxyDRFOr8IEKSI5IpIjIgkUAEJE1kcgNFEpb5DZsbpdS8JkFxR2ERaDgTuVI6B4e3/vz1WgsBIW
61pMmGDSQOEuBSVMhqAEJlxLFSjsCChefqeyhcVuqjYHoKDiJjxb85xK6ubrAETWbAHGMDA8hsDsguIB
D13nAAhnLnYqvhZEFJVApgTFAGjT15dQQRUoSBFxYBoismYEBpDkcypbVHw9wkTXXYZDA8TW85zKs5vn
VO5QtzuJaQhgVpigDApTUFoGQoZEqzBBsUPRRyCDgYBoGRItMNG1V4GCKlCY71IUGCKiOxXistmpsAAl
paAMMUEGA2aGhCkmuu5A8TIkWnETnq35+HOnMixApa0rUFAFCqpQwaxAQRUoSFBZYbG1YML1cJfCOlgw
LeAxgqXChHWgrOsMS+BigORzKusuhVOqUEG7qHB6gkhgwrVg0uFSgYKKm/B0BSo7W/rWvF5/L7VHI+aY
dLPCRKtA6WAxBDiPgMI6WAyEm3YryBDQWYGCKkxQBwmnp5AIKGWbxx+vwoRtULEUkqL8TqVBwtkwsRtq
DxXccJwnbp5TsfmS1zeQtAwCJojkv/enLDBBsm6Q2K+vgGV0TqXNjAkzPModSwmKVWHCKlCYYbJ3ToW7
lEgwiR1LxkS7BpO2S/E6SOxawoTrmBmTtrYMjwaNovItAAqa51SK77RnXw9U7MYPXKyGyTK7KlBQ7FKY
4cCZQRmgEgkuS4ZCxsSKXUsGhQUsyGDYg6WCRBNQugyQESrznMpjN8+paLdetxoyAcp2vcGEXQUKMgwq
TFiFCXJI1pe0vhZErnoEKkGRdQULGoKCua4Bh4KS14FJriHC6VWYIEUkR0RyRCSBAkCIyPoIhCYq5Q0y
O1a3a0mY7ILCLsJiMHCncgQUb55TkY6A4uV3KltY7KZqcwAKKm7CszXPqaRuvg5AZM0WYAwDw2MIzC4o
HvDQdQ6AcOZip+JrQURRCWRKUAyANn19CRVUgYIUEQemISJrRmAAyTyn8tjNcyp3qNudxDQEMCtMUAaF
KSgtAyFDolWYoNih6COQwUBAtAyJFpjo2qtAQRUozHcpCgwR0Z0KcdnsVFiAklJQhpgggwEzQ8IUE113
oHgZEq24Cc/WfPy5UxkWoNLWFSioAgVVqGBWoKAKFCSorLDYWjDherhLYR0smBbwGMFSYcI6UNZ1hiVw
MUDmOZUHL1DZ2dK35vX6e6k9GjHHpJsVJloFSgeLIcB5BBTWwWIg3LRbQYaAzgoUVGGCOkg4PYVEQCnb
PP54FSZsg4qlkBTldyoNEs6Gid1Qe6jghuM8cfOcis2XvL6BpGUQMEFknlOxDJN5TuVczXMqxXfas68H
KnbjBy5Ww2SZXRUoKHYpzHDgzKAMUIkElyVDIWNixa4lg8ICFmQw7MFSQaIJKF0GyAiVeU7lsZvnVLRb
r1sNmQBlu95gwq4CBRkGFSaswgQ5JOtLWl8LIlc9ApWgyLqCBQ1BwVzXgENByevAJNcQ4fQqTJAikiMi
OSKSQAEgRGR9BEITlfIGmR2r27UkTHZBYRdhMRi4UzkCijfPqUhHQPHyO5UtLHZTtTkABRU34dma51RS
N18HILJmCzCGgeExBGYXFA946DoHQDhzsVPxtSCiqAQyJSgGQJu+voQKqkBBiogD0xCRNSMwgGSeU3ns
5jmVO9TtTmIaApgVJiiDwhSUloGQIdEqTFDsUPQRyGAgIFqGRAtMdO1VoKAKFOa7FAWGiOhOhbhsdios
QEkpKENMkMGAmSFhiomuO1C8DIlW3IRnaz7+3KkMC1Bp6woUVIGCKlQwK1BQBQoSVFZYbC2YcD3cpbAO
FkwLeIxgqTBhHSjrOsMSuBgg85zKgxeo7GzpW/N6/b3UHo2YY9LNChOtAqWDxRDgPAIK62AxEG7arSBD
QGcFCqowQR0knJ5CIqCUbR5/vAoTtkHFUkiK8juVBglnw8RuqD1UcMNxnrh5TsXmS17fQNIyCJggMs+p
WIbJPKdyruY5leI77dnXAxW78QMXq2GyzK4KFBS7FGY4cGZQBqhEgsuSoZAxsWLXkkFhAQsyGPZgqSDR
BJQuA2SEyjyn8tjNcyrardethkyAsl1vMGFXgYIMgwoTVmGCHJL1Ja2vBZGrHoFKUGRdwYKGoGCua8Ch
oOR1YJJriHB6FSZIEckRkRwRSaAAECKyPgKhiUp5g8yO1e1aEia7oLCLsBgM3KkcAcWb51SkI6B4+Z3K
Fha7qdocgIKKm/BszXMqqZuvAxBZswUYw8DwGAKzC4oHPHSdAyCcudip+FoQUVQCmRIUA6BNX19CBVWg
IEXEgWmIyJoRGEAyz6k8dvOcyh3qdicxDQHMChOUQWEKSstAyJBoFSYodij6CGQwEBAtQ6IFJrr2KlBQ
BQrzXYoCQ0R0p0JcNjsVFqCkFJQhJshgwMyQMMVE1x0oXoZEK27CszUff+5UhgWotHUFCqpAQRUqmBUo
qAIFCSorLLYWTLge7lJYBwumBTxGsFSYsA6UdZ1hCVwMkHlO5cELVHa29K15fZk7tUcj5ph0s8JEq0Dp
YDEEOI+AwjpYDISbdivIENBZgYIqTFAHCaenkAgoZZvHH6/ChG1QsRSSovxOpUHC2TCxG2oPFdxwnCdu
nlOx+ZLXN5C0DAImiMxzKpZhMs+pnKt5TqX4Tnv29UDFbvzAxWqYLLOrAgXFLoUZDpwZlAEqkeCyZChk
TKzYtWRQWMCCDIY9WCpINAGlywAZoTLPqTx285yKdut1qyEToGzXG0zYVaAgw6DChFWYIIdkfUnra0Hk
qkegEhRZV7CgISiY6xpwKCh5HZjkGiKcXoUJUkRyRCRHRBIoAISIrI9AaKJS3iCzY3W7loTJLijsIiwG
A3cqR0Dx5jkV6QgoXn6nsoXFbqo2B6Cg4iY8W/OcSurm6wBE1mwBxjAwPIbA7ILiAQ9d5wAIZy52Kr4W
RBSVQKYExQBo09eXUEEVKEgRcWAaIrJmBAaQzHMqj908p3KHut1JTEMAs8IEZVCYgtIyEDIkWoUJih2K
PgIZDAREy5BogYmuvQoUVIHCfJeiwBAR3akQl81OhQUoKQVliAkyGDAzJEwx0XUHipch0Yqb8GzNx587
lWEBKm1dgYIqUFCFCmYFCqpAQYLKCoutBROuh7sU1sGCaQGPESwVJqwDZV1nWAIXA2SeU3nwApWdLX1r
Xq+/l9qjEXNMullholWgdLAYApxHQGEdLAbCTbsVZAjorEBBFSaog4TTU0gElLLN449XYcI2qFgKSVF+
p9Ig4WyY2A21hwpuOM4TN8+p2HzJ6xtIWgYBE0TmORXLMJnnVM7VPKdSfKc9+3qgYjd+4GI1TJbZVYGC
YpfCDAfODMoAlUhwWTIUMiZW7FoyKCxgQQbDHiwVJJqA0mWAjFCZ51Qeu3lORbv1utWQCVC26w0m7CpQ
kGFQYcIqTJBDsr6k9bUgctUjUAmKrCtY0BAUzHUNOBSUvA5Mcg0RTq/CBCkiOSKSIyIJFABCRNZHIDRR
KW+Q2bG6XUvCZBcUdhEWg4E7lSOgePOcinQEFC+/U9nCYjdVmwNQUHETnq15TiV183UAImu2AGMYGB5D
YHZB8YCHrnMAhDMXOxVfCyKKSiBTgmIAtOnrS6igChSkiDgwDRFZMwIDSOY5lcdunlO5Q93uJKYhgFlh
gjIoTEFpGQgZEq3CBMUORR+BDAYComVItMBE114FCqpAYb5LUWCIiO5UiMtmp8IClJSCMsQEGQyYGRKm
mOi6A8XLkGjFTXi25uPPncqwAJW2rkBBFSioQgWzAgVVoCBBZYXF1oIJ18NdCutgwbSAxwiWChPWgbKu
MyyBiwEyz6k8eIHKzpa+Na/X30vt0Yg5Jt2sMNEqUDpYDAHOI6CwDhYD4abdCjIEdFagoAoT1EHC6Skk
AkrZ5vHHqzBhG1QshaQov1NpkHA2TOyG2kMFNxzniZvnVGy+5PUNJC2DgAki85yKZZjMcyrnap5TKb7T
nn09ULEbP3CxGibL7KpAQbFLYYYDZwZlgEokuCwZChkTK3YtGRQWsCCDYQ+WChJNQOkyQEaozHMqj908
p6Ldet1qyAQo2/UGE3YVKMgwqDBhFSbIIVlf0vpaELnqEagERdYVLGgICua6BhwKSl4HJrmGCKdXYYIU
kRwRyRGRBAoAISLrIxCaqJQ3yOxY3a4lYbILCrsIi8HAncoRULx5TkU6AoqX36lsYbGbqs0BKKi4Cc/W
PKeSuvk6AJE1W4AxDAyPITC7oHjAQ9c5AMKZi52KrwURRSWQKUExANr09SVUUAUKUkQcmIaIrBmBASTz
nMpjN8+p3KFudxLTEMCsMEEZFKagtAyEDIlWYYJih6KPQAYDAdEyJFpgomuvAgVVoDDfpSgwRER3KsRl
s1NhAUpKQRliggwGzAwJU0x03YHiZUi04iY8W/Px505lWIBKW1egoAoUVKGCWYGCKlCQoLLCYmvBhOvh
LoV1sGBawGMES4UJ60BZ1xmWwMUAmedUHrxAZWdL35rX6++l9mjEHJNuVphoFSgdLIYA5xFQWAeLgXDT
bgUZAjorUFCFCeog4fQUEgGlbPP441WYsA0qlkJSlN+pNEg4GyZ2Q+2hghuO88TNcyo2X/L6BpKWQcAE
kXlOxTJM5jmVczXPqRTfac++HqjYjR+4WA2TZXZVoKDYpTDDgTODMkAlElyWDIWMiRW7lgwKC1iQwbAH
SwWJJqB0GSAjVOY5lcdunlPRbr1uNWQClO16gwm7ChRkGFSYsAoT5JCsL2l9LYhc9QhUgiLrChY0BAVz
XQMOBSWvA5NcQ4TTqzBBikiOiOSISAIFgBCR9REITVTKG2R2rG7XkjDZBYVdhMVg4E7lCCjePKciHQHF
y+9UtrDYTdXmABRU3IRna55TSd18HYDImi3AGAaGxxCYXVA84KHrHADhzMVOxdeCiKISyJSgGABt+voS
KqgCBSkiDkxDRNaMwACSeU7lsZvnVO5QtzuJaQhgVpigDApTUFoGQoZEqzBBsUPRRyCDgYBoGRItMNG1
V4GCKlCY71IUGCKiOxXistmpsAAlpaAMMUEGA2aGhCkmuu5A8TIkWnETnq35+HOnMixApa0rUFAFCqpQ
waxAQRUoSFBZYbG1YML1cJfCOlgwLeAxgqXChHWgrOsMS+BigMxzKg9eoLKzpW/N6/X3Uns0Yo5JNytM
tAqUDhZDgPMIKKyDxUC4abeCDAGdFSiowgR1kHB6ComAUrZ5/PEqTNgGFUshKcrvVBoknA0Tu6H2UMEN
x3ni5jkVmy95fQNJyyBggsg8p2IZJvOcyrma51SK77RnXw9U7MYPXKyGyTK7KlBQ7FKY4cCZQRmgEgku
S4ZCxsSKXUsGhQUsyGDYg6WCRBNQugyQESrznMpjN8+paLdetxoyAcp2vcGEXQUKMgwqTFiFCXJI1pe0
vhZErnoEKkGRdQULGoKCua4Bh4KS14FJriHC6VWYIEUkR0RyRCSBAkCIyPoIhCYq5Q0yO1a3a0mY7ILC
LsJiMHCncgQUb55TkY6A4uV3KltY7KZqcwAKKm7CszXPqaRuvg5AZM0WYAwDw2MIzC4oHvDQdQ6AcOZi
p+JrQURRCWRKUAyANn19CRVUgYIUEQemISJrRmAAyTyn8tjNcyp3qNudxDQEMCtMUAaFKSgtAyFDolWY
oNih6COQwUBAtAyJFpjo2qtAQRUozHcpCgwR0Z0KcdnsVFiAklJQhpgggwEzQ8IUE113oHgZEq24Cc/W
fPy5UxkWoNLWFSioAgVVqGBWoKAKFCSorLDYWjDherhLYR0smBbwGMFSYcI6UNZ1hiVwMUDmOZUHL1DZ
2dK35vX6e6k9GjHHpJsVJloFSgeLIcB5BBTWwWIg3LRbQYaAzgoUVGGCOkg4PYVEQCnbPP54FSZsg4ql
kBTldyoNEs6Gid1Qe6jghuM8cfOcis2XvL6BpGUQMEFknlOxDJN5TuVczXMqxXfas68HKnbjBy5Ww2SZ
XRUoKHYpzHDgzKAMUIkElyVDIWNixa4lg8ICFmQw7MFSQaIJKF0GyAiVeU7lsZvnVLRbr1sNmQBlu95g
wq4CBRkGFSaswgQ5JOtLWl8LIlc9ApWgyLqCBQ1BwVzXgENByevAJNcQ4fQqTJAikiMiOSKSQAEgRGR9
BEITlfIGmR2r27UkTHZBYRdhMRi4UzkCijfPqUhHQPHyO5UtLHZTtTkABRU34dma51RSN18HILJmCzCG
geExBGYXFA946DoHQDhzsVPxtSCiqAQyJSgGQJu+voQKqkBBiogD0xCRNSMwgGSeU3ns5jmVO9TtTmIa
ApgVJiiDwhSUloGQIdEqTFDsUPQRyGAgIFqGRAtMdO1VoKAKFOa7FAWGiOhOhbhsdiosQEkpKENMkMGA
mSFhiomuO1C8DIlW3IRnaz7+3KkMC1Bp6woUVIGCKlQwK1BQBQoSVFZYbC2YcD3cpbAOFkwLeIxgqTBh
HSjrOsMSuBgg85zKgxeo7GzpW/N6/b3UHo2YY9LNChOtAqWDxRDgPAIK62AxEG7arSBDQGcFCqowQR0k
nJ5CIqCUbR5/vAoTtkHFUkiK8juVBglnw8RuqD1UcMNxnrh5TsXmS17fQNIyCJggMs+pWIbJPKdyruY5
leI77dnXAxW78QMXq2GyzK4KFBS7FGY4cGZQBqhEgsuSoZAxsWLXkkFhAQsyGPZgqSDRBJQuA2SEyjyn
8tjNcyrardethkyAsl1vMGFXgYIMgwoTVmGCHJL1Ja2vBZGrHoFKUGRdwYKGoGCua8ChoOR1YJJriHB6
FSZIEckRkRwRSaAAECKyPgKhiUp5g8yO1e1aEia7oLCLsBgM3KkcAcWb51SkI6B4+Z3KFha7qdocgIKK
m/BszXMqqZuvAxBZswUYw8DwGAKzC4oHPHSdAyCcudip+FoQUVQCmRIUA6BNX19CBVWgIEXEgWmIyJoR
GEAyz6k8dvOcyh3qdicxDQHMChOUQWEKSstAyJBoFSYodij6CGQwEBAtQ6IFJrr2KlBQBQrzXYoCQ0R0
p0JcNjsVFqCkFJQhJshgwMyQMMVE1x0oXoZEK27CszUff+5UhgWotHUFCqpAQRUqmBUoqAIFCSorLLYW
TLge7lJYBwumBTxGsFSYsA6UdZ1hCVwMkHlO5cELVHa29K15vf5eao9GzDHpZoWJVoHSwWIIcB4BhXWw
GAg37VaQIaCzAgVVmKAOEk5PIRFQyjaPP16FCdugYikkRfmdSoOEs2FiN9QeKrjhOE/cPKdi8yWvbyBp
GQRMEJnnVCzDZJ5TOVfznErxnfbs64GK3fiBi9UwWWZXBQqKXQozHDgzKANUIsFlyVDImFixa8mgsIAF
GQx7sFSQaAJKlwEyQmWeU3ns5jkV7dbrVkMmQNmuN5iwq0BBhkGFCaswQQ7J+pLW14LIVY9AJSiyrmBB
Q1Aw1zXgUFDyOjDJNUQ4vQoTpIjkiEiOiCRQAAgRWR+B0ERlvbFmz67btVSwVJhoF2ExGLhTOQKKN8+p
SEdA8fI7lS0sdlO1OQAFFTfh2ZrnVFI3XwcgsmYLMIaB4TEEZhcUD3joOgdAOHOxU/G1IKKoBDIlKAZA
m76+hAqqQEGKiAPTEJE1IzCAZJ5TeezmOZU71O1OYhoCmBUmKIPCFJSWgZAh0SpMUOxQ9BHIYCAgWoZE
C0x07VWgoAoU5rsUBYaI6E6FuGx2KixASSkoQ0yQwYCZIWGKia47ULwMiVbchGdrPv7cqQwLUGnrChRU
gYIqVDArUFAFChJUVlhsLZhwPdylsA4WTAt4jGCpMGEdKOs6wxK4GCDznMqDF6jsbOlb83r9vdQejZhj
0s0KE60CpYPFEOA8AgrrYDEQbtqtIENAZwUKqjBBHSScnkIioJRtHn+8ChO2QcVSSIryO5UGCWfDxG6o
PVRww3GeuHlOxeZLXt9A0jIImCAyz6lYhsk8p3Ku5jmV4jvt2dcDFbvxAxerYbLMrgoUFLsUZjhwZlAG
qESCy5KhkDGxYteSQWEBCzIY9mCpINEElC4DZITKPKfy2M1zKtqt162GTICyXW8wYVeBggyDChNWYYIc
kvUlra8FkasegUpQZF3BgoagYK5rwKGg5HVgkmuIcHoVJkgRyRGRHBFJoAAQIrI+AqGJSnmDzI7V7VoS
JrugsIuwGAzcqRwBxZvnVKQjoHj5ncoWFrup2hyAgoqb8GzNcyqpm68DEFmzBRjDwPAYArMLigc8dJ0D
IJy52Kn4WhBRVAKZEhQDoE1fX0IFVaAgRcSBaYjImhEYQDLPqTx285zKHep2JzENAcwKE5RBYQpKy0DI
kGgVJih2KPoIZDAQEC1DogUmuvYqUFAFCvNdigJDRHSnQlw2OxUWoKQUlCEmyGDAzJAwxUTXHShehkQr
bsKzNR9/7lSGBai0dQUKqkBBFSqYFSioAgUJKissthZMuB7uUlgHC6YFPEawVJiwDpR1nWEJXAyQeU7l
wQtUdrb0rXm9/l5qj0bMMelmhYlWgdLBYghwHgGFdbAYCDftVpAhoLMCBVWYoA4STk8hEVDKNo8/XoUJ
26BiKSRF+Z1Kg4SzYWI31B4quOE4T9w8p2LzJa9vIGkZBEwQmedULMNknlM5V/OcSvGd9uzrgYrd+IGL
1TBZZlcFCopdCjMcODMoA1QiwWXJUMiYWLFryaCwgAUZDHuwVJBoAkqXATJCZZ5TeezmORXt1utWQyZA
2a43mLCrQEGGQYUJqzBBDsn6ktbXgshVj0AlKLKuYEFDUDDXNeBQUPI6MMk1RDi9ChOkiOSISI6IJFAA
CBFZH4HQRKW8QWbH6nYtCZNdUNhFWAwG7lSOgOLNcyrSEVC8/E5lC4vdVG0OQEHFTXi25jmV1M3XAYis
2QKMYWB4DIHZBcUDHrrOARDOXOxUfC2IKCqBTAmKAdCmry+hgipQkCLiwDREZM0IDCCZ51Qeu3lO5Q51
u5OYhgBmhQnKoDAFpWUgZEi0ChMUOxR9BDIYCIiWIdECE117FSioAoX5LkWBISK6UyEum50KC1BSCsoQ
E2QwYGZImGKi6w4UL0OiFTfh2ZqPP3cqwwJU2roCBVWgoAoVzAoUVIGCBJUVFlsLJlwPdymsgwXTAh4j
WCpMWAfKus6wBC4GyDyn8uAFKjtb+ta8Xn8vtUcj5ph0s8JEq0DpYDEEOI+AwjpYDISbdivIENBZgYIq
TFAHCaenkAgoZZvHH6/ChG1QsRSSovxOpUHC2TCxG2oPFdxwnCdunlOx+ZLXN5C0DAImiMxzKpZhMs+p
nKt5TqX4Tnv29UDFbvzAxWqYLLOrAgXFLoUZDpwZlAEqkeCyZChkTKzYtWRQWMCCDIY9WCpINAGlywAZ
oTLPqTx285yKdut1qyEToGzXG0zYVaAgw6DChFWYIIdkfUnra0HkqkegEhRZV7CgISiY6xpwKCh5HZjk
GiKcXoUJUkRyRCRHRBIoAISIrI9AaKJS3iCzY3W7loTJLijsIiwGA3cqR0Dx5jkV6QgoXn6nsoXFbqo2
B6Cg4iY8W/OcSurm6wBE1mwBxjAwPIbA7ILiAQ9d5wAIZy52Kr4WRBSVQKYExQBo09eXUEEVKEgRcWAa
IrJmBAaQzHMqj908p3KHut1JTEMAs8IEZVCYgtIyEDIkWoUJih2KPgIZDAREy5BogYmuvQoUVIHCfJei
wBAR3akQl81OhQUoKQVliAkyGDAzJEwx0XUHipch0Yqb8GzNx587lWEBKm1dgYIqUFCFCmYFCqpAQYLK
CoutBROuh7sU1sGCaQGPESwVJqwDZV1nWAIXA2SeU3nwApWdLX1rXq+/l9qjEXNMullholWgdLAYApxH
QGEdLAbCTbsVZAjorEBBFSaog4TTU0gElLLN449XYcI2qFgKSVF+p9Ig4WyY2A21hwpuOM4TN8+p2HzJ
6xtIWgYBE0TmORXLMJnnVM7VPKdSfKc9+3qgYjd+4GI1TJbZVYGCYpfCDAfODMoAlUhwWTIUMiZW7Foy
KCxgQQbDHiwVJJqA0mWAjFCZ51Qeu3lORbv1utWQCVC26w0m7CpQkGFQYcIqTJBDsr6k9bUgctUjUAmK
rCtY0BAUzHUNOBSUvA5Mcg0RTq/CBCkiOSKSIyIJFABCRNZHIDRRKW+Q2bG6XUvCZBcUdhEWg4E7lSOg
ePOcinQEFC+/U9nCYjdVmwNQUHETnq15TiV183UAImu2AGMYGB5DYHZB8YCHrnMAhDMXOxVfCyKKSiBT
gmIAtOnrS6igChSkiDgwDRFZMwIDSOY5lcfubR957Rv/H9eK/4pA5akHAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAARUAAAFKCAYAAAAzNsvAAAAABGdBTUEAALGPC/xhBQAAWtdJREFUeF7t
3cuzdd9Z3ff8NzZSrApSQaXSQHRSFZJu0kVWmql0gqmokwohVYG0QsNS4lx8QQYLG5RyZCwbTAwCGSww
1xic2ARfQFwkofvth4ROxph7jmeN+axnrr332eeUdrbmrvrWM9+9fj9JnfXRXOvM933/rT/zP/7B0+r2
/qz/+n869Wf7bOu/9IfH/c9F/4v3Rz2s/1fM3P923Df9ZczoY61v+iuYPa6jv3rQX/M+vvWDRe896K+z
T/T58ac3tXXvh069qc+2/uGiv/HHiFNr630H/UjR3/zkYW/+W5ipN/8oZu/NP/qp9uvWj2Fd9f7H703/
+6e/NqDSboz3bL/OreuYR9cJiK3VCRhgADymwByC0iMevs4REM0cMPmmhklfGyKOSiBTggIA2uzrc6iw
ChTmiHRgGiK2VgKGkHxT700/DAjYDpW+nmHi6yHg0ADBuqVf94hIAkWdUGG4qbSeoaL5oL3p/Z8aUVnd
3rA7iQkEOCtMWAZFOSgtgJAh8SpMWOxQBMupDEorQ+IFJr7uVaCwChTVdykOjBDxnYpw2e1UVICSclCm
mDDAwJkhUY6JrwdQehkSr7gJH63dTmX1MmVYiEpbV6CwChRWocJZgcIqUJihssGCtWGi9XSXogZYOBHx
mMFSYaIGULZ1hiVwASCnXYoVuxRNq0KFHaKi2TNEAhOtDZMBlwoUVtyED1egcrClb63r9fdWezRSHZNh
Vph4FSgDLEBA8xpQ1AALQLhpt8KAgM8KFFZhwgZINHsOiYFStnv86VWYqB0qyCEpyu9UGiSaDRPcUEeo
8IbTfODaTmW4Gbx+I63r6XtVXN9B0gIEyhD5MzNMvMCE2bpBgl9fAIu/oNUOJWbGRAGPcsdSgoIqTFQF
igIm/oLWdygCZcgwiR1LxsS7BJO2S+kNkOBawkTrmBmTtkbAo0HjqHwDgMLOvlOZ3lC9db3+nqCcUMGN
H7ighslpDlWgsNilKOCgmUGZoBIZLqeAQsYExa4lg6ICFgYYjmCpIPEMlCEAMkNlePwJQHxtZVTUAIr9
2jBpoPQpVHIbJqpjwjIo3yioDO9U+v/zTlvX6++thkyAsl/vMFEXgcKAQYWJqjBhHZLtJW1fGyIXPQKV
oNi6goVNQeHc1oTDQcnrwCTXENHsVZgwRyQnRHJCJIFCQITI9gjEFirlDbK6rmHXkjA5BEWdhQUwaKdy
DSi9dU7FugaUXn6nsocFN1WbE1BYcRM+WuucSurm6wTE1uoEDDAAHlNgDkHpEQ9f5wiIZi52Kn1tiDgq
gUwJCgBos6/PocIqUJgj0oFpiNhaCRhCss6p3HfrnMorNOxOYgIBzgoTlkFRDkoLIGRIvAoTFjsUfwQC
DALEy5B4gYmvexUorAJF9V2KAyNEfKciXHY7FRWgpByUKSYMMHBmSJRj4usBlF6GxCtuwkdrPf68UhkW
otLWFSisAoVVqHBWoLAKFGaobLBgbZhoPd2lqAEWTkQ8ZrBUmKgBlG2dYQlcAMg6p3LnBSoHW/rWul5/
b7VHI9UxGWaFiVeBMsACBDSvAUUNsACEm3YrDAj4rEBhFSZsgESz55AYKGW7x59ehYnaoYIckqL8TqVB
otkwwQ11hApvOM0Hbp1TwXzJ6ztIWoBAGSLrnAoCJuucymO1zqkU33nPvh6o4MYPXFDD5DSHKlBY7FIU
cNDMoExQiQyXU0AhY4Ji15JBUQELAwxHsFSQeAbKEACZobLOqdx365yKd+t11JAJUPbrHSbqIlAYMKgw
URUmrEOyvaTta0PkokegEhRbV7CwKSic25pwOCh5HZjkGiKavQoT5ojkhEhOiCRQCIgQ2R6B2EKlvEFW
1zXsWhImh6Cos7AABu1UrgGlt86pWNeA0svvVPaw4KZqcwIKK27CR2udU0ndfJ2A2FqdgAEGwGMKzCEo
PeLh6xwB0czFTqWvDRFHJZApQQEAbfb1OVRYBQpzRDowDRFbKwFDSNY5lftunVN5hYbdSUwgwFlhwjIo
ykFpAYQMiVdhwmKH4o9AgEGAeBkSLzDxda8ChVWgqL5LcWCEiO9UhMtup6IClJSDMsWEAQbODIlyTHw9
gNLLkHjFTfhorcefVyrDQlTaugKFVaCwChXOChRWgcIMlQ0WrA0Trae7FDXAwomIxwyWChM1gLKtMyyB
CwBZ51TuvEDlYEvfWtfr7632aKQ6JsOsMPEqUAZYgIDmNaCoARaAcNNuhQEBnxUorMKEDZBo9hwSA6Vs
9/jTqzBRO1SQQ1KU36k0SDQbJrihjlDhDaf5wK1zKpgveX0HSQsQKENknVNBwGSdU3ms1jmV4jvv2dcD
Fdz4gQtqmJzmUAUKi12KAg6aGZQJKpHhcgooZExQ7FoyKCpgYYDhCJYKEs9AGQIgM1TWOZX7bp1T8W69
jhoyAcp+vcNEXQQKAwYVJqrChHVItpe0fW2IXPQIVIJi6woWNgWFc1sTDgclrwOTXENEs1dhwhyRnBDJ
CZEECgERItsjEFuolDfI6rqGXUvC5BAUdRYWwKCdyjWg9NY5FesaUHr5ncoeFtxUbU5AYcVN+Gitcyqp
m68TEFurEzDAAHhMgTkEpUc8fJ0jIJq52Kn0tSHiqAQyJSgAoM2+PocKq0BhjkgHpiFiayVgCMk6p3Lf
rXMqr9CwO4kJBDgrTFgGRTkoLYCQIfEqTFjsUPwRCDAIEC9D4gUmvu5VoLAKFNV3KQ6MEPGdinDZ7VRU
gJJyUKaYMMDAmSFRjomvB1B6GRKvuAkfrfX480plWIhKW1egsAoUVqHCWYHCKlCYobLBgrVhovV0l6IG
WDgR8ZjBUmGiBlC2dYYlcAEg65zKnReoHGzpW+t6/b3VHo1Ux2SYFSZeBcoACxDQvAYUNcACEG7arTAg
4LMChVWYsAESzZ5DYqCU7R5/ehUmaocKckiK8juVBolmwwQ31BEqvOE0H7h1TgXzJa/vIGkBAmWIrHMq
CJiscyqP1TqnUnznPft6oIIbP3BBDZPTHKpAYbFLUcBBM4MyQSUyXE4BhYwJil1LBkUFLAwwHMFSQeIZ
KEMAZIbKOqdy361zKt6t11FDJkDZr3eYqItAYcCgwkRVmLAOyfaStq8NkYsegUpQbF3BwqagcG5rwuGg
5HVgkmuIaPYqTJgjkhMiOSGSQCEgQmR7BGILlfIGWV3XsGtJmByCos7CAhi0U7kGlN46p2JdA0ovv1PZ
w4Kbqs0JKKy4CR+tdU4ldfN1AmJrdQIGGACPKTCHoPSIh69zBEQzFzuVvjZEHJVApgQFALTZ1+dQYRUo
zBHpwDREbK0EDCFZ51Tuu3VO5RUadicxgQBnhQnLoCgHpQUQMiRehQmLHYo/AgEGAeJlSLzAxNe9ChRW
gaL6LsWBESK+UxEuu52KClBSDsoUEwYYODMkyjHx9QBKL0PiFTfho7Uef16pDAtRaesKFFaBwipUOCtQ
WAUKM1Q2WLA2TLSe7lLUAAsnIh4zWCpM1ADKts6wBC4AZJ1TufMClYMtfWtdr7+32qOR6pgMs8LEq0AZ
YAECmteAogZYAMJNuxUGBHxWoLAKEzZAotlzSAyUst3jT6/CRO1QQQ5JUX6n0iDRbJjghjpChTec5gO3
zqlgvuT1HSQtQKAMkXVOBQGTdU7lsVrnVIrvvGdfD1Rw4wcuqGFymkMVKCx2KQo4aGZQJqhEhsspoJAx
QbFryaCogIUBhiNYKkg8A2UIgMxQWedU7rt1TsW79TpqyAQo+/UOE3URKAwYVJioChPWIdle0va1IXLR
I1AJiq0rWNgUFM5tTTgclLwOTHINEc1ehQlzRHJCJCdEEigERIhsj0BsoVLeIKvrGnYtCZNDUNRZWACD
dirXgNJb51Ssa0Dp5Xcqe1hwU7U5AYUVN+Gjtc6ppG6+TkBsrU7AAAPgMQXmEJQe8fB1joBo5mKn0teG
iKMSyJSgAIA2+/ocKqwChTkiHZiGiK2VgCEk65zKfbfOqbxCw+4kJhDgrDBhGRTloLQAQobEqzBhsUPx
RyDAIEC8DIkXmPi6V4HCKlBU36U4MELEdyrCZbdTUQFKykGZYsIAA2eGRDkmvh5A6WVIvOImfLTW488r
lWEhKm1dgcIqUFiFCmcFCqtAYYbKBgvWhonW012KGmDhRMRjBkuFiRpA2dYZlsAFgKxzKndeoHKwpW+t
6/X3Vns0Uh2TYVaYeBUoAyxAQPMaUNQAC0C4abfCgIDPChRWYcIGSDR7DomBUrZ7/OlVmKgdKsghKcrv
VBokmg0T3FBHqPCG03zg1jkVzJe8voOkBQiUIbLOqSBgss6pPFbrnErxnffs64EKbvzABTVMTnOoAoXF
LkUBB80MygSVyHA5BRQyJih2LRkUFbAwwHAESwWJZ6AMAZAZKuucyn23zql4t15HDZkAZb/eYaIuAoUB
gwoTVWHCOiTbS9q+NkQuegQqQbF1BQubgsK5rQmHg5LXgUmuIaLZqzBhjkhOiOSESAKFgAiR7RGILVTK
G2R1XcOuJWFyCIo6Cwtg0E7lGlB665yKdQ0ovfxOZQ8Lbqo2J6Cw4iZ8tNY5ldTN1wmIrdUJGGAAPKbA
HILSIx6+zhEQzVzsVPraEHFUApkSFADQZl+fQ4VVoDBHpAPTELG1EjCEZJ1Tue/WOZVXaNidxAQCnBUm
LIOiHJQWQMiQeBUmLHYo/ggEGASIlyHxAhNf9ypQWAWK6rsUB0aI+E5FuOx2KipASTkoU0wYYODMkCjH
xNcDKL0MiVfchI/Wevx5pTIsRKWtK1BYBQqrUOGsQGEVKMxQ2WDB2jDRerpLUQMsnIh4zGCpMFEDKNs6
wxK4AJB1TuXOC1QOtvStdb3+3mqPRqpjMswKE68CZYAFCGheA4oaYAEIN+1WGBDwWYHCKkzYAIlmzyEx
UMp2jz+9ChO1QwU5JEX5nUqDRLNhghvqCBXecJoP3DqngvmS13eQtACBMkTWORUETNY5lcdqnVMpvvOe
fT1QwY0fuKCGyWkOVaCw2KUo4KCZQZmgEhkup4BCxgTFriWDogIWBhiOYKkg8QyUIQAyQ2WdU7nv1jkV
79brqCEToOzXO0zURaAwYFBhoipMWIdke0nb14bIRY9AJSi2rmBhU1A4tzXhcFDyOjDJNUQ0exUmzBHJ
CZGcEEmgEBAhsj0CsYVKeYOsrmvYtSRMDkFRZ2EBDNqpXANKb51Tsa4BpZffqexhwU3V5gQUVtyEj9Y6
p5K6+ToBsbU6AQMMgMcUmENQesTD1zkCopmLnUpfGyKOSiBTggIA2uzrc6iwChTmiHRgGiK2VgKGkKxz
KvfdOqfyCg27k5hAgLPChGVQlIPSAggZEq/ChMUOxR+BAIMA8TIkXmDi614FCqtAUX2X4sAIEd+pCJfd
TkUFKCkHZYoJAwycGRLlmPh6AKWXIfGKm/DRWo8/r1SGhai0dQUKq0BhFSqcFSisAoUZKhssWBsmWk93
KWqAhRMRjxksFSZqAGVbZ1gCFwCyzqnceYHKwZa+ta7X31vt0Uh1TIZZYeJVoAywAAHNa0BRAywA4abd
CgMCPitQWIUJGyDR7DkkBkrZ7vGnV2Gidqggh6Qov1NpkGg2THBDHaHCG07zgVvnVDBf8voOkhYgUIbI
OqeCgMk6p/JYrXMqxXfes68HKrjxAxfUMDnNoQoUFrsUBRw0MygTVCLD5RRQyJig2LVkUFTAwgDDESwV
JJ6BMgRAZqiscyr33Tqn4t16HTVkApT9eoeJuggUBgwqTFSFCeuQbC9p+9oQuegRqATF1hUsbAoK57Ym
HA5KXgcmuYaIZq/ChDkiOSGSEyIJFAIiRLZHILZQKW+Q1XUNu5aEySEo6iwsgEE7lWtA6a1zKtY1oPTy
O5U9LLip2pyAwoqb8NFa51RSN18nILZWJ2CAAfCYAnMISo94+DpHQDRzsVPpa0PEUQlkSlAAQJt9fQ4V
VoHCHJEOTEPE1krAEJJ1TuW+W+dUXqFhdxITCHBWmLAMinJQWgAhQ+JVmLDYofgjEGAQIF6GxAtMfN2r
QGEVKKrvUhwYIeI7FeGy26moACXloEwxYYCBM0OiHBNfD6D0MiRecRM+Wuvx55XKsBCVtq5AYRUorEKF
swKFVaAwQ2WDBWvDROvpLkUNsHAi4jGDpcJEDaBs6wxL4AJA1jmVOy9QOdjSt9b1+nurPRqpjskwK0y8
CpQBFiCgeQ0oaoAFINy0W2FAwGcFCqswYQMkmj2HxEAp2z3+9CpM1A4V5JAU5XcqDRLNhgluqCNUeMNp
PnDrnArmS17fQdICBMoQWedUEDBZ51Qeq3VOpfjOe/b1QAU3fuCCGianOVSBwmKXooCDZgZlgkpkuJwC
ChkTFLuWDIoKWBhgOIKlgsQzUIYAyAyVdU7lvlvnVLxbr6OGTICyX+8wUReBwoBBhYmqMGEdku0lbV8b
Ihc9ApWg2LqChU1B4dzWhMNByevAJNcQ0exVmDBHJCdEckIkgUJAhMj2CMQWKuUNsrquYdeSMDkERZ2F
BTBop3INKL11TsW6BpRefqeyhwU3VZsTUFhxEz5a65xK6ubrBMTW6gQMMAAeU2AOQekRD1/nCIhmLnYq
fW2IOCqBTAkKAGizr8+hwipQmCPSgWmI2FoJGEKyzqncd+ucyis07E5iAgHOChOWQVEOSgsgZEi8ChMW
OxR/BAIMAsTLkHiBia97FSisAkX1XYoDI0R8pyJcdjsVFaCkHJQpJgwwcGZIlGPi6wGUXobEK27CR2s9
/rxSGRai0tYVKKwChVWocFagsAoUZqhssGBtmGg93aWoARZORDxmsFSYqAGUbZ1hCVwAyDqncucFKgdb
+ta6Xn9vtUcj1TEZZoWJV4EywAIENK8BRQ2wAISbdisMCPisQGEVJmyARLPnkBgoZbvHn16FidqhghyS
ovxOpUGi2TDBDXWECm84zQdunVPBfMnrO0hagEAZIuucCgIm65zKY7XOqRTfec++Hqjgxg9cUMPkNIcq
UFjsUhRw0MygTFCJDJdTQCFjgmLXkkFRAQsDDEewVJB4BsoQAJmhss6p3HfrnIp363XUkAlQ9usdJuoi
UBgwqDBRFSasQ7K9pO1rQ+SiR6ASFFtXsLApKJzbmnA4KHkdmOQaIpq9ChPmiOSESE6IJFAIiBDZHoHY
QqW8QVbXNexaEiaHoKizsAAG7VSuAaW3zqlY14DSy+9U9rDgpmpzAgorbsJHa51TSd18nYDYWp2AAQbA
YwrMISg94uHrHAHRzMVOpa8NEUclkClBAQBt9vU5VFgFCnNEOjANEVsrAUNI1jmV+26dU3mFht1JTCDA
WWHCMijKQWkBhAyJV2HCYofij0CAQYB4GRIvMPF1rwKFVaCovktxYISI71SEy26nogKUlIMyxYQBBs4M
iXJMfD2A0suQeMVN+Gitx59XKsNCVNq6AoVVoLAKFc4KFFaBwgyVDRasDROtp7sUNcDCiYjHDJYKEzWA
sq0zLIELAFnnVO68QOVgS99a1+vvrfZopDomw6ww8SpQBliAgOY1oKgBFoBw026FAQGfFSiswoQNkGj2
HBIDpWz3+NOrMFE7VJBDUpTfqTRINBsmuKGOUOENp/nArXMqmC95fQdJCxAoQ2SdU0HAZJ1TeazWOZXi
O+/Z1wMV3PiBC2qYnOZQBQqLXYoCDpoZlAkqkeFyCihkTFDsWjIoKmBhgOEIlgoSz0AZAiAzVNY5lftu
nVPxbr2OGjIByn69w0RdBAoDBhUmqsKEdUi2l7R9bYhc9AhUgmLrChY2BYVzWxMOByWvA5NcQ0SzV2HC
HJGcEMkJkQQKAREi2yMQW6iUN8jquoZdS8LkEBR1FhbAoJ3KNaD01jkV6xpQevmdyh4W3FRtTkBhxU34
aK1zKqmbrxMQW6sTMMAAeEyBOQSlRzx8nSMgmrnYqfS1IeKoBDIlKACgzb4+hwqrQGGOSAemIWJrJWAI
yTqnct+tcyqv0LA7iQkEOCtMWAZFOSgtgJAh8SpMWOxQ/BEIMAgQL0PiBSa+7lWgsAoU1XcpDowQ8Z2K
cNntVFSAknJQppgwwMCZIVGOia8HUHoZEq+4CR+t9fjzSmVYiEpbV6CwChRWocJZgcIqUJihssGCtWGi
9XSXogZYOBHxmMFSYaIGULZ1hiVwASDrnMqdF6gcbOlb63r9vdUejVTHZJgVJl4FygALENC8BhQ1wAIQ
btqtMCDgswKFVZiwARLNnkNioJTtHn96FSZqhwpySIryO5UGiWbDBDfUESq84TQfuHVOBfMlr+8gaQEC
ZYiscyoImKxzKo/VOqdSfOc9+3qgghs/cEENk9McqkBhsUtRwEEzgzJBJTJcTgGFjAmKXUsGRQUsDDAc
wVJB4hkoQwBkhso6p3LfrXMq3q3XUUMmQNmvd5ioi0BhwKDCRFWYsA7J9pK2rw2Rix6BSlBsXcHCpqBw
bmvC4aDkdWCSa4ho9ipMmCOSEyI5IZJAISBCZHsEYguV8gZZXdewa0mYHIKizsICGLRTuQaU3jqnYl0D
Si+/U9nDgpuqzQkorLgJH611TiV183UCYmt1AgYYAI8pMIeg9IiHr3MERDMXO5W+NkQclUCmBAUAtNnX
51BhFSjMEenANERsrQQMIVnnVO67dU7lFRp2JzGBAGeFCcugKAelBRAyJF6FCYsdij8CAQYB4mVIvMDE
170KFFaBovouxYERIr5TES67nYoKUFIOyhQTBhg4MyTKMfH1AEovQ+IVN+GjtR5/XqkMC1Fp6woUVoHC
KlQ4K1BYBQozVDZYsDZMtJ7uUtQACyciHjNYKkzUAMq2zrAELgBknVO58wKVgy19a12vv7fao5HqmAyz
wsSrQBlgAQKa14CiBlgAwk27FQYEfFagsAoTNkCi2XNIDJSy3eNPr8JE7VBBDklRfqfSINFsmOCGOkKF
N5zmA7fOqWC+5PUdJC1AoAyRdU4FAZN1TuWxWudUiu+8Z18PVHDjBy6oYXKaQxUoLHYpCjhoZlAmqESG
yymgkDFBsWvJoKiAhQGGI1gqSDwDZQiAzFBZ51Tuu3VOxbv1OmrIBCj79Q4TdREoDBhUmKgKE9Yh2V7S
9rUhctEjUAmKrStY2BQUzm1NOByUvA5Mcg0RzV6FCXNEckIkJ0QSKAREiGyPQGyhUt4gq+sadi0Jk0NQ
1FlYAIN2KteA0lvnVKxrQOnldyp7WHBTtTkBhRU34aO1zqmkbr5OQGytTsAAA+AxBeYQlB7x8HWOgGjm
YqfS14aIoxLIlKAAgDb7+hwqrAKFOSIdmIaIrZWAISTrnMp9t86pvELD7iQmEOCsMGEZFOWgtABChsSr
MGGxQ/FHIMAgQLwMiReY+LpXgcIqUFTfpTgwQsR3KsJlt1NRAUrKQZliwgADZ4ZEOSa+HkDpZUi84iZ8
tNbjzyuVYSEqbV2BwipQWIUKZwUKq0BhhsoGC9aGidbTXYoaYOFExGMGS4WJGkDZ1hmWwAWArHMqd16g
crClb63r9fdWezRSHZNhVph4FSgDLEBA8xpQ1AALQLhpt8KAgM8KFFZhwgZINHsOiYFStnv86VWYqB0q
yCEpyu9UGiSaDRPcUEeo8IbTfODWORXMl7y+g6QFCJQhss6pIGCyzqk8VuucSvGd9+zrgQpu/MAFNUxO
c6gChcUuRQEHzQzKBJXIcDkFFDImKHYtGRQVsDDAcARLBYlnoAwBkBkq65zKfbfOqXi3XkcNmQBlv95h
oi4ChQGDChNVYcI6JNtL2r42RC56BCpBsXUFC5uCwrmtCYeDkteBSa4hotmrMGGOSE6I5IRIAoWACJHt
EYgtVMobZHVdw64lYXIIijoLC2DQTuUaUHrrnIp1DSi9/E5lDwtuqjYnoLDiJny01jmV1M3XCYit1QkY
YAA8psAcgtIjHr7OERDNXOxU+toQcVQCmRIUANBmX59DhVWgMEekA9MQsbUSMIRknVO579Y5lVdo2J3E
BAKcFSYsg6IclBZAyJB4FSYsdij+CAQYBIiXIfECE1/3KlBYBYrquxQHRoj4TkW47HYqKkBJOShTTBhg
4MyQKMfE1wMovQyJV9yEj9Z6/HmlMixEpa0rUFgFCqtQ4axAYRUozFDZYMHaMNF6uktRAyyciHjMYKkw
UQMo2zrDErgAkHVO5c4LVA629K11vf7eao9GqmMyzAoTrwJlgAUIaF4DihpgAQg37VYYEPBZgcIqTNgA
iWbPITFQynaPP70KE7VDBTkkRfmdSoNEs2GCG+oIFd5wmg/cOqeC+ZLXd5C0AIEyRNY5FQRM1jmVx2qd
Uym+8559PVDBjR+4oIbJaQ5VoLDYpSjgoJlBmaASGS6ngELGBMWuJYOiAhYGGI5gqSDxDJQhADJDZZ1T
ue/WORXv1uuoIROg7Nc7TNRFoDBgUGGiKkxYh2R7SdvXhshFj0AlKLauYGFTUDi3NeFwUPI6MMk1RDR7
FSbMEckJkZwQSaAQECGyPQKxhUp5g6yua9i1JEwOQVFnYQEM2qlcA0rv0nMqb8UN/86//6mn7//I557e
+5tffPrg73z56cO/98bTL/7Bn7Q+/NE3nj74L7/89N7f+uLT9//i55/e+ROffnorb/pLMVGGSQNFuxSW
MJmCEphobVWgqGtA6eV3KntYcFO1OQGFFTfho7XOqaRuvk5AbK1OwAAD4DEF5hCUHvHwdY6AaOZip9LX
Bsm3/NDHn77rpz/z9KHffePpa0/Xf/jvfAjwfNeHPvv0re8DApfA4oh0YBoitlYChpCscyr33Tqn8goN
u5OYQICzwoRlUJSD0gIIGRKvwoTFDsUfgT729PYf+cTTu3/1C09f+dMTDi/x4X/We37tC09v/9E/vnC3
wojJKSHiOxXhstupqAAl5aBMMWGAgTNDohwTXw+g9DIkXnETPlrr8eeVyrAQlbauQGEVKKxChbMChVWg
MEOFvRU3+3/3C597+tPJtuRPAMPvfe6rT7/x8a88vf+ff+npB37580/f+/Ofa3HN73iN/wz/2erD/+zv
w+PRW7FzKEFhAyjbOsMSuACQdU7lzgtUDrb0rXW9/t5qj0aqYzLMChOvAmWABSBoXgOK6qD8Bz/6iac/
/MJeAuLwrz/71ad34RHmzXz5Wr2oZcOL2o89vRlAvevnPtv+3QoY/nd9x9/+ZAEKAcmz55AYKGUNEwYM
LgGF7VBBDklRfqfSINFsmOCGOkKFN5zmA7fOqWC+5PUdJC1AoAyRr8c5le/58Gd370z4uMJ3KW8hFHrP
Ajzay9szoOSf+rwFOPDdSn6c4n/n92BntIdlnVN5tNY5leI779nXAxXc+IELapic5lAFCotdigIOmhmU
CSrqA7/9pdMdbp/f+sRXnt7GXYIwQfGToAyKClgY/t0EC3sbbvbf+uOv9P+W7fOB3/lyQuWEyS4AMkNl
nVO579Y5Fe/W66ghE6Ds1ztM1EWgMABRYaIKTNjPf3T/U53v/unPPL0JSAgR/7HyFJUSFFsbLG8GGt/9
s5/t/22nD/83/MLv/4mBwrmtCYeDkteBSa4hotmrMGGOSE6I5IRIAoWACJHtEYgtVMobZHVdw64lYXII
ijoLC4DQTuUKUD7wL740gPKZN7729B0/9sd4HAIGHZOLQFElLMhAiYDHf/i3P9n+O/Xhqu1YDJMGinYp
LGEyBSUw0dqqQFHXgNLL71T2sOCmanMCCituwkdrnVNJ3XydgNhanYABBsBjCswhKD3i4escIdFEfIfi
H/605u3v+3h7v+KIOCqBTAkKAGizr8+hwgDLtwOx3/vc+KLle/7x5zdEOjANEVsrAUNI1jmV+26dU3mF
ht1JTCDAWWHCMijKQWl1NGZ1TBh/ypN3KATFz6lkUFoZEi8w8XWvAoXxUafDkncs3/F/fDIQUULEdyrC
ZbdTUQFKykGZYsIAA2eGRDkmvh5A6WVIvOImfLTW488rlWEhKm1dgcIqUFiFCmcFCuugfDNu+Pxj4+/4
sU+0HUrbpTRUsDZMtJ7uUtQACyciHjNYOiqMj0L+4f/Gt+JGP4GCf2YCS+ACQNY5lTsvUDnY0rfW9fp7
qz0aqY7JMCtMvAqUARYgoHkACuPBNv/8hZ/+TIByCiDctFthQMBnBQozVNh3/9z4SPZ9v8THIFzroLQc
EgOlbPf406swUTtUkENSlN+pNEg0Gya4oY5Q4Q2n+cCtcyqYL3l9B0kLEChD5LXOqXzb3/j4cFKWPzZ+
01/BNduhxEyY/NtA47/68OnwW7ljKUFBFSYqofJmAOI/bub/1re/n49BgKEDorRLiQyTdU7lPlvnVIrv
vGdfD1Rw4wcuqGFymkMVKCx2KQo4aGZQOirv/pXP99v1dLDtrT8IILiDiV2KAgoJlbcACH7+GW76//gD
uNEzKgMsDFAcwZJAUW/DzsIPyL3n17+426nMUFnnVO67dU7Fu/U6asgEKPv1DhN1ESgMGFSY9L7lvR8b
btaf+TdvDKBsL2n7GpD4uxShos9f/adffPp3sfM5BsXWFSysgIUnb/Xh/+Zv/ZuAAXA4KHkdmOQaIpq9
ChPmiOSESE6IJFAIiBDZHoHYQqW8QVbXNexaEiaHoKizsAAG7VQKUIjHf/EPP91vU/5enq89/Tk+9hAV
dMmfp5JR4eeNr37t6T/7qU8//TnseF5qp8Le8sMfH36v0Hf97GfLnUqsDzHR2qpAUdeA0svvVPaw4KZq
cwIKK27CR2udU0ndfJ2A2FqdgAEGwGMKzCEoPeLh69SHsDPR519/5qsBSit2Kn3dIREsM1T04XuQb/9b
f2ywAIdzqLAClBbw4G9C1Ic7l4bIOqfy/+vWOZVXaNidxAQCnBUmLIOiHJTWCY+qb8bN7udS3vUznxlA
CUz6LsV3KsLlCBV9+Ce+vZm7lkt2KqwCpfeuf7T9JIj/2/njZSHiOxXhstupqAAlJUC8HSYMMHBmSJRj
4usBlF6GxCtuwkdrPf68UhkWotLWFSisAoVVqHAWqPz5v/up092JDx8r3kREClQ2WLA2ULi+BBV+PvvG
157e+ROfGkGZwVJgot78Q+Mj0Dv/wWdil+KwBC4AZJ1TufMClYMtfWtdr7+32qOR6pgMs8LEq0AZYAEC
mgUq32dnU34PjxUBSgkLICl2K5eiwg9/FMxHon+H70C4a6lAYQUmLf57eNTx4/vf386sbJgMM2Oido8/
vQoTtUMFOSRF+Z1Kg0SzYYIb6ggV3nCaD9w6p4L5ktd3kLQAgTJEXvqcynv/6Rf6rfn09Osf+5PA5Jq/
9+caVPT58le/9vTXfhOPRITiGlQYUOGfIKfPX/+/v9QAUdqlRIbJOqdyn61zKsV33rOvByq48QMX1DA5
zaEKFBa7FAUcNA0U9sH/98v91nx6+rH/50vjLoUZLqdGUJ6Lij586frOn/z05aAw7Ere/9vb/+4P/qs3
YqcyQ2WdU7nv1jkV79brqCEToOzXO0zURaAwYJAwUR/+3e0nP//DL32uBGV7SdvXgESPPte8Uzn6/J//
5o2nb+NPic7h0h9/fuBXtx3Wh/lnrQAPgZLXgUmuIaLZqzBhjkhOiOSESAKFgAiR7RGILVTKG2R1XcOu
JWFyCIo6Cwtg0E6lQIV/J48+/80/+uyICnruOZVrP3gaevpLv/GFpzdVkHj9R8ff+5HtXdAv/iFQSTuV
WB9iorVVgaKuAaWX36nsYcFN1eYEFFbchI/WOqeSuvk6AbG1OgEDDIDHFJhDUHoExNeOCv5fXp8KlW2n
0tcdEsHyEqj8+O98+enf5+/jObdLYW2nQlS231bwi39EVE7X4pFHqHRY1jmV+26dU3mFht1JTCDAWWHC
MijKQWkBhISJ+jl7/PmBX/r8DpTApO9SfKciXJ6DCs+X/NxH33j6j/gn5jsm51BhxePPsDuxKVTKApSU
gzLFhAEGzgyJckx8PYDSy5B4xU34aK3Hn1cqw0JU2roChVWgsAoVzgKVwxe1hsoGC9YGCtfXoMIfKf/a
x77y9J/8+KdOeODf3YHCKkwUUKle1GZYAhcAss6p3HmBysGWvrWu199b7dFIdUyGWWHiVaAMsAABzQKV
2Y+Ua1gASbFbuQQV7kx++9NfffpPf+LTp/MpxOSGcyr+I+X3/rMvnb53SAyUst3jT6/CRO1QQQ5JUX6n
0iDRbJjghjpChTec5gO3zqlgvuT1HSQtQKAMkZc+pzI7/PaS51Q+9oU/ffrP/+FnNkjaRBUmqgJFARU/
/Pbf/5PPN0CUdimRYbLOqdxn65xK8Z337OuBCm78wAU1TE5zqAKFxS5FAQdNA4UdHtPf7VTYCMoRKl/6
ytee/kv+LuIX/F3K7M2Aojqmf4TKOqdy361zKt6t11FDJkDZr3eYqItAYcAgYaIu+Q2F20vavgYkevSZ
vVP5b7EDir8GtQTF1hUsrACFeOTfUPg23NgOSl4HJrmGiGavwoQ5IjkhkhMiCRQCIkS2RyC2UClvkNV1
DbuWhMkhKOosLIBBO5UCFeJx9EcfXHtO5S/+yuef3sof7xITr4QFXYqJwn92/qMPTu9Z9phMQQlMtLYq
UNQ1oPTyO5U9LLip2pyAwoqb8NFa51RSN18nILZWJ2CAAfCYAnMISo94+Dp19Ic0bTuVvu6QCJYTKh97
+sHf/OLTv4ebdIdJAwUYtNnX51BhFSjoLUAh/yFNDRFCBlja405PwBCSdU7lvlvnVF6hYXcSEwhwVpiw
DIpyUFonPGad++MkN1hOOShRhsQLTHzdq0BhBShs98dJ4sYWJnmnIlx2OxUVoKQclCkmDDBwZkiUY+Lr
AZRehsQrbsJHaz3+vFIZFqLS1hUorAKFVahwFqC0AEj5B18bKhssWBsmWrdZgaIGWDgR8ZjBUoBS/8HX
uNYffzIsgQsAWedU7rxA5WBL31rX6++t9mikOibDrDDxKlAGWICA5gQUlv+Kjt/kX9GRUGm7lJt2KwwI
+KxAYQmU+q/o0F8o1nNIDJSyhgkDBpeAwnaoIIekKL9TaZBoNkxwQx2hwhtO84Fb51QwX/L6DpIWIFCG
yGv9vT9s9peJaYcSM2OigEe5YylBQRUmKqFS/2ViJ0x8hyJQhgyTdU7lPlvnVIrvvGdfD1Rw4wcuqGFy
mkMVKCx2KQpoaGZQDJVzf+3pKaCQMUGxa8mgqICFAYojWBIox3/tqQVAZqiscyr33Tqn4t16HTVkApT9
eoeJuggUBgwqTFRHhVV/Qfu3v4+w2G7FELnoEagExdYVLAygnP8L2j/e4HBQ8jowyTVENHsVJswRyQmR
nBBJoBAQIbI9ArGFSnmDrK5r2LUkTA5BUWdhARbaqZwBRf3XHx4fNX7vc199evv7Pt5hAQYdk4tAUSUs
HY8CE4Hix/H5+Z5//LnApIEy2anE+hATra0KFHUNKL38TmUPC26qNiegsOImfLTWOZXUzdcJiK3VCRhg
ADymwByC0iMevs4RE83eB/7Fl3Y7Fj4KOSKOSiBTggIA2uzrc6ggPvLkHcoHfufLGyAt/LOYDRFbKwFD
SNY5lftunVN5hYbdSUwgwFlhwjIoykFpdTRmGSbez3/0jQEWfv7CT3/m6c0A4vpdCm76C3Yq/IOwv/tn
x50S/zf8Av/IyL6D0S7FgREivlMRLrudigpQUg7KFBMGGDgzJMox8fUASi9D4hU34aO1Hn9eqQwLUWnr
ChRWgcIqVDgrUFgBSusvY8fy21863dn24Y+b38abGpgIl+kuRQ2wcCJCYrC8DTe6/9hYn7ZDESiBikDZ
1hmWwAX/ueucyp0XqBxs6Vvrev291R6NVMdkmBUmXgXKAAtw0LwGFAVY+I4l71h4CO1nfveNdkT/8t0K
AwI+gclbAANPyvrBNn743/k9v/C5BAoBybPnkBgoZbvHn16FidqhghySovxOpUGi2TDBDXWECm84zQdu
nVPBfMnrO0hagEAZIq95TsXLf54KfyqUf9zMD38fDn+D37s+9Nn2u5LLHUsBypuBybt+7rPt3/Xfy6MP
/7u+g3/UpIMSsIwvaH2HIlCGDJN1TuU+W+dUiu+8Z18PVHDjBy6oYXKaQxUoLHYpCjhoZlAmqESGyzf/
4MfaATk/eesf4sCfFPFPZXv/P//S0w/88uefvvfnP9fimt/xGv+ZChJ++J/9fb/4+ae3YhdRgsIMlCEA
MkNlnVO579Y5Fe/W66ghE6Ds1ztM1EWgMKBQYaIqTJjtVPycyrf9yCee3v2rX9g9rtzy4X/We37tC09v
/1H7u3+moHBua8LhoOR1YJJriGj2KkyYI5ITIjkhkkAhIEJkewRiC5XyBlld17BrSZgcgqLOwgIYtFO5
BpTe0Z+n8i0/9PGn7/rpzzx96Hf3PyW65MN/h+9SvguPTt/6PgBwhIkyTBoo2qWwhMkUlMBEa6sCRV0D
Si+/U9nDgpuqzQkorLgJH611TiV183UCYmt1AgYYAI8pMIeg9IiHr3MERDMXO5W+1kvZDovW34wb/s//
vU89ff9HPvf03t/84tMHf+fLTx/+6BvtLyvjX/b1YeDxwX/55af3/tYXn74fjzfv/IlPP72VN74gyWVM
lCPSgWmI2FoJGEKyzqncd+ucyis07E5iAgHOChOWQVEOSgsgZEi8ChMWOxR/BNqD0sovZ73hJa3WvQoU
VoGi+i7FgREivlMRLrudigpQUg7KFBMGGDgzJMox8fUASi9D4hU34aO1Hn9eqQwLUWnrChRWgcIqVDgr
UFgFCjNUNliwNky0brMCRaWf/gQoM1gqTNQAyrbOsAQuAGSdU7nzApWDLX1rXa+/t9qjkeqYDLPCxKtA
GWABAprXgKIGWADCTbsVBgR8VqCwChM2QKLZc0gMlLLd40+vwkTtUEEOSVF+p9Ig0WyY4IY6QoU3nOYD
t86pYL7k9R0kLUCgDJGv1zmVYWZMFPAodywlKKjCRFWgKGCyzqk8VuucSvGd9+zrgQpu/MAFNUxOc6gC
hcUuRQEHzQzKBJXIcDkFFDImKHYtGRQVsDDAcARLBYlnoAwBkBkq65zKfbfOqXi3XkcNmQBlv95hoi4C
hQGDChNVYcI6JNtL2r42RC56BCpBsXUFC5uCwrmtCYeDkteBSa4hotmrMGGOSE6I5IRIAoWACJHtEYgt
VMobZHVdw64lYXIIijoLC2DQTuUaUHqX/L0/h6CoEhZ0KSbKMGmgaJfCEiZTUAITra0KFHUNKL38TmUP
C26qNiegsOImfLTWOZXUzdcJiK3VCRhgADymwByC0iMevs4REM1c7FT62hBxVAKZEhQA0GZfn0OFVaAw
R6QD0xCxtRIwhGSdU7nv1jmVV2jYncQEApwVJiyDohyUFkDIkHgVJix2KP4IBBgEiJch8QITX/cqUFgF
iuq7FAdGiPhORbjsdioqQEk5KFNMGGDgzJAox8TXAyi9DIlX3ISP1nr8eaUyLESlrStQWAUKq1DhrEBh
FSjMUNlgwdow0Xq6S1EDLJyIeMxgqTBRAyjbOsMSuACQdU7lzgtUDrb0rXW9/t5qj0aqYzLMChOvAmWA
BQhoXgOKGmABCDftVhgQ8FmBwipM2ACJZs8hMVDKdo8/vQoTtUMFOSRF+Z1Kg0SzYYIb6ggV3nCaD9w6
p4L5ktd3kLQAgTJE1jkVBEzWOZXHap1TKb7znn09UMGNH7ighslpDlWgsNilKOCgmUGZoBIZLqeAQsYE
xa4lg6ICFgYYjmCpIPEMlCEAMkNlnVO579Y5Fe/W66ghE6Ds1ztM1EWgMGBQYaIqTFiHZHtJ29eGyEWP
QCUotq5gYVNQOLc14XBQ8jowyTVENHsVJswRyQmRnBBJoBAQIbI9ArGFSnmDrK5r2LUkTA5BUWdhAQza
qVwIykd+/432551wfXROhX9QEz+cU1BUCQu6FBNlmDRQtEthCZN3/8YX2x+78I6f+syAyXv+ry+2vh7v
VPaw4KZqcwIKK27CR2udU0ndfJ2A2FqdgAEGwIPr7/zAJ5/e/U8+f9wvX94AiwHDD2Fpv46dSl9rR5JQ
id1LCQoAaLOvz6HCKlCYI9KBaYjYWulDSPycij4jKn09w8TXQ8ChAYL1Oqfy7NY5lVdo2J3EBCicfVfy
kY+edhAv9ZntVvh5968Andih+CMQYOiAtH/u4l3Kx5/e8fc/9fTuX/vCZf36ce/4yU93WE5pd6KdCncp
/LwHc9il+PcBSspBmWLCAANnhkQ5Jr4eQOllSLziJny01uPPK5VhISpt3VHhTmXo75z+4nJiw3WVHmW4
M/nOH//UUIXKd/7dT53++YTKBgvWQCQ/+vC7d/y9T7VmsBCLl/q8+9e/2EHZdi8Oiz7v+AenRx+9qNWn
PRI1RPD9JaiwQ1Q0e4ZIYKK1YTLgUoHCipvw4QpUDrb0rXW9/t5qj0aqYzLMDsosfojK8D7F3qsQE36+
8+8YIp5hwogJP5ztuw+eOsECHBB/3f4Z7VJ6/HzkD/5kisolOxV9qt3JqS+2+Y6f/MwASivtUjirXco1
n2NUkENSlN+pNEg0Gya4oY5Q4Q2n+cCtcyqYL3l9B0kLKChDJJ9T4WdAJUABAmiPCq4VsJz7EBLtVLRL
cVAYdyn8NGwSKNv7FE1UvEvRp3yfotILWt+hML6c5ac94uDXQkXfc/JFbVv/0Wk9a4pJ26X0BkhwLWGi
dcyMSVsj4NGgcVS+AUBh65xK8Z337OuBCm78wAU1TE5z6BCVUxsqnzxBk0HpqHBnwuJxKf1au5V3/8r4
2KPaS1rEnQo/u8eggIUBhgks+pSYKANlCIBol8JPe/TpqAzvWPCI846fOv19zQ2Oqx9/gIMDY5g0UPoU
KrkNE9UxYRmUbxRUhncq/f95p63r9fdWQyZA2a93mKgKFQNlQMXfoeT6I5B2LMSk/bohcvr3+eijxx7C
IUTauxR8H/XdyvAYVIJi6woV/noKCue21k7FQeGHqPB7f+zRroXvVPjZoVJhwhyRnBDJCZEECgERItsj
EFuolDfI6rqGXUvC5BCUHj8X71TOgDK8pO3fxZkVAHPtZ9itlLAgA2VApQKFGSYNlL5L4buW/NFLWn3a
LoWoAI+rUWHXgNLL71T2sOCmanMCCituwkdrnVNJ3XydgNhanYABDsBjBgw/F+1U2uMPvpvBgqldCXFx
VD7y+9iZGCrchSg+BinuZAjJbrdCPAIWrG9C5YTIBguQwG5EH8KhdydEhfHDXYzOqTChcvQZ3qlMYQEO
DRCs1zmVZ7fOqbxCw+4kJhDgBB6E46U/BCNQQfGo038tSPi9furj51T0PqWlHUmPyMROJTDxde9aVFjf
pTgwxKTBAWAcFYITOxRLqPBF7axAZbZL0buVDIlyTHw9gNLLkHjFTfhorcefVyrDQlTaGqjwtCxhyekz
fN92F6f08e8UdzGOCj/+6KN3KO07AOPnVISJv1vJsAwNsHAiQpJg0afERA2gbGu9W/mIocJfE5HhNxQa
Ks97UauAQ6Ci2TNEAhOtDZMBlwoUVtyED1egcrClb63r9fdWezRSHZNh2qNOjgfg+CE4w+OPPQZtjz+T
F7UCpL9PITb6LnYuhKT1MVzHYw+zR6Cq9tOhHSoCxaaBchEqAySaPQKSUHFIvK/XO5UGiWbDBDfUESq8
4TQfuHVOBfMlr+8gaQEFZZD4ORViws+ASoACBK44p+KIEBb+JEc7Gu1QOPWpIFG6fgwKSqBchAoDJpec
U9Hjj2OiHctVP1KuMGm7lN4ACa4lTLSOmTFpawQ8GjSOyjcAKGydUym+8559PVDBjR+4oIbJaXrHqJwa
X9QmTBIqDos+evRR/DQw+mNPfgwiIvHPCJUBFgYYJrDoU2KiDJShA1SGxx/AIVT4qd6nsOGdyoALcHBg
DJMGSp9CJbdhojomLIPyjYLK8E6l/z/vtHW9/t5qyAQo+3XGROkzA2VA5cJzKkyPQvwQldNO5bRb4Ydg
DO9SvAqVEhRbV6jw11NQOLe171Ty40/7zkHpXfLTH8JyvFvpCZGcEEmgEBAhsj0CsYVKeYOsrmvYtSRM
jkCZ7lISLMNO5QJQ2Hy3soFBTCpQSlSmsCADZUClAoUZJg0U7VJYh2XYqRSgnHYqX593KntYcFO1OQGF
FTfho7XOqaRuvk5AbK1OwAAHIOLA6AUtP0eg7FDhdzNYNJE+3LHwnQo/goWfBkZCJZCpUCEeAQvWN6Fi
iHRg2k7F1rPHn+qcyobKCZspJr4eAg4NEKzXOZVnt86pvELD7iQmEODsmCh9yl1KguXaxx/tUoTI9mPl
L+x2KrFD6Zgo/TPxHTDh70Dmd+fSh48w59r++IMOS+/oRa26+kfKO0wYYODMkCjHxNcDKL0MiVfchI/W
evx5pTIsRKWtOya+Q5mCwipUZo8/rIMy7Er4XXvk2Xr2T3+Qvn/JD2HZHoeARUeF3/Pj71TWOZU7L1A5
2NK31vX6e6s9GqmOyTBnoPTvS1AMlg2V43Mqww6lf7eH5fmojO9TbKbHn6h69GENkDx7BCSh4pB4X693
Kg0SzYYJbqgjVHjDaT5w65wK5kte30HSAgqqA0JM/qJAyZh4DRQggLhD4Q7k3DkVvj9xUGZ/7w//s9rB
tvz40x+B+FhEUIbDbyUoqMJEVaAoYHJ0TkW//6d6/PFzKvFjY0elgqXCpO1SegMkuJYw0TpmxqStEfBo
0Dgq3wCgsHVOpfjOe/b1QAU3fuCCgMj6e38sA2Woo9Ig8QyTVgDiayujogZQ7NeGSQOlT6GS2zBRHROW
QflGQWV4p9L/n3faul5/bzVkApT9eoeJuggUBgwqTFSFCeuQ+DmVtjZEjl7YHoNi6woWNgWFc1sTDgcl
rwOTXENEs1dhwhyRnBDJCZEECgERItsjEFuolDfI6rqGXUvC5BAUdRYWwKCdyjWg9I7+3p+LQFElLOhS
TJRh0kDRLoUlTKagBCZaWxUo6hpQevmdyh4W3FRtTkBhxU34aK1zKqmbrxMQW6sTMMAAeEyBOQSlRzx8
nSMgmrnYqfS1IeKoBDIlKACgzb4+hwqrQGGOSAemIWJrJWAIST6nskelr2eY+HoIODRAsF7nVJ7dOqfy
Cg27k5hAgLPChGVQlIPSAggZEq/ChMUOxR+BAIMA8TIkXmDi614FCqtAUX2X4sAIEd+pCJfdTkUFKCkH
ZYoJAwycGRLlmPh6AKWXIfGKm/DRWo8/r1SGhai0dQUKq0BhFSqcFSisAoUZKhssWBsmWk93KWqAhRMR
jxksFSZqAGVbZ1gCFwCSz6lsuxRNq0KFHaKi2TNEAhOtDZMBlwoUVtyED1egcrClb63r9fdWezRSHZNh
Vph4FSgDLEBA8xpQ1AALQLhpt8KAgM8KFFZhwgZINHsOiYFStnv86VWYqB0qyCEpyu9UGiSaDRPcUEeo
8IbTfODWORXMl7y+g6QFCJQhkv/en7LAhNm6QYJfXwDL7JxKmxkTBTzKHUsJCqowURUoCpgcnVPRLiUy
TGLHkjHxLsGk7VJ6AyS4ljDROmbGpK0R8GjQOCrfAKCwdU6l+M579vVABTd+4IIaJqc5VIHCYpeigINm
BmWCSmS4nAIKGRMUu5YMigpYGGA4gqWCxDNQhgDIDJV1TuW+W+dUvFuvo4ZMgLJf7zBRF4HCgEGFiaow
YR2S7SVtXxsiFz0ClaDYuoKFTUHh3NaEw0HJ68Ak1xDR7FWYMEckJ0RyQiSBQkCEyPYIxBYq5Q2yuq5h
15IwOQRFnYUFMGincg0ovXVOxboGlF5+p7KHBTdVmxNQWHETPlrrnErq5usExNbqBAwwAB5TYA5B6REP
X+cIiGYudip9bYg4KoFMCQoAaLOvz6HCKlCYI9KBaYjYWgkYQrLOqdx365zKKzTsTmICAc4KE5ZBUQ5K
CyBkSLwKExY7FH8EAgwCxMuQeIGJr3sVKKwCRfVdigMjRHynIlx2OxUVoKQclCkmDDBwZkiUY+LrAZRe
hsQrbsJHaz3+vFIZFqLS1hUorAKFVahwVqCwChRmqGywYG2YaD3dpagBFk5EPGawVJioAZRtnWEJXADI
Oqdy5wUqB1v61rpef2+1RyPVMRlmhYlXgTLAAgQ0rwFFDbAAhJt2KwwI+KxAYRUmbIBEs+eQGChlu8ef
XoWJ2qGCHJKi/E6lQaLZMMENdYQKbzjNB26dU8F8yes7SFqAQBki65wKAibrnMpjtc6pFN95z74eqODG
D1xQw+Q0hypQWOxSFHDQzKBMUIkMl1NAIWOCYteSQVEBCwMMR7BUkHgGyhAAmaGyzqncd+ucinfrddSQ
CVD26x0m6iJQGDCoMFEVJqxDsr2k7WtD5KJHoBIUW1ewsCkonNuacDgoeR2Y5Boimr0KE+aI5IRITogk
UAiIENkegdhCpbxBVtc17FoSJoegqLOwAAbtVK4BpbfOqVjXgNLL71T2sOCmanMCCituwkdrnVNJ3Xyd
gNhanYABBsBjCswhKD3i4escAdHMxU6lrw0RRyWQKUEBAG329TlUWAUKc0Q6MA0RWysBQ0jWOZX7bp1T
eYWG3UlMIMBZYcIyKMpBaQGEDIlXYcJih+KPQIBBgHgZEi8w8XWvAoVVoKi+S3FghIjvVITLbqeiApSU
gzLFhAEGzgyJckx8PYDSy5B4xU34aK3Hn1cqw0JU2roChVWgsAoVzgoUVoHCDJUNFqwNE62nuxQ1wMKJ
iMcMlgoTNYCyrTMsgQsAWedU7rxA5WBL31rX6++t9mikOibDrDDxKlAGWICA5jWgqAEWgHDTboUBAZ8V
KKzChA2QaPYcEgOlbPf406swUTtUkENSlN+pNEg0Gya4oY5Q4Q2n+cCtcyqYL3l9B0kLEChDZJ1TQcBk
nVN5rNY5leI779nXAxXc+IELapic5lAFCotdigIOmhmUCSqR4XIKKGRMUOxaMigqYGGA4QiWChLPQBkC
IDNU1jmV+26dU/FuvY4aMgHKfr3DRF0ECgMGFSaqwoR1SLaXtH1tiFz0CFSCYusKFjYFhXNbEw4HJa8D
k1xDRLNXYcIckZwQyQmRBAoBESLbIxBbqJQ3yOq6hl1LwuQQFHUWFsCgnco1oPTWORXrGlB6+Z3KHhbc
VG1OQGHFTfhorXMqqZuvExBbqxMwwAB4TIE5BKVHPHydIyCaudip9LUh4qgEMiUoAKDNvj6HCqtAYY5I
B6YhYmslYAjJOqdy361zKq/QsDuJCQQ4K0xYBkU5KC2AkCHxKkxY7FD8EQgwCBAvQ+IFJr7uVaCwChTV
dykOjBDxnYpw2e1UVICSclCmmDDAwJkhUY6JrwdQehkSr7gJH631+PNKZViISltXoLAKFFahwlmBwipQ
mKGywYK1YaL1dJeiBlg4EfGYwVJhogZQtnWGJXABIOucyp0XqBxs6Vvrev291R6NVMdkmBUmXgXKAAsQ
0LwGFDXAAhBu2q0wIOCzAoVVmLABEs2eQ2KglO0ef3oVJmqHCnJIivI7lQaJZsMEN9QRKrzhNB+4dU4F
8yWv7yBpAQJliKxzKgiYrHMqj9U6p1J85z37eqCCGz9wQQ2T0xyqQGGxS1HAQTODMkElMlxOAYWMCYpd
SwZFBSwMMBzBUkHiGShDAGSGyjqnct+tcyrerddRQyZA2a93mKiLQGHAoMJEVZiwDsn2kravDZGLHoFK
UGxdwcKmoHBua8LhoOR1YJJriGj2KkyYI5ITIjkhkkAhIEJkewRiC5XyBlld17BrSZgcgqLOwgIYtFO5
BpTeOqdiXQNKL79T2cOCm6rNCSisuAkfrXVOJXXzdQJia3UCBhgAjykwh6D0iIevcwREMxc7lb42RByV
QKYEBQC02dfnUGEVKMwR6cA0RGytBAwhWedU7rt1TuUVGnYnMYEAZ4UJy6AoB6UFEDIkXoUJix2KPwIB
BgHiZUi8wMTXvQoUVoGi+i7FgREivlMRLrudigpQUg7KFBMGGDgzJMox8fUASi9D4hU34aO1Hn9eqQwL
UWnrChRWgcIqVDgrUFgFCjNUNliwNky0nu5S1AALJyIeM1gqTNQAyrbOsAQuAGSdU7nzApWDLX1rXa+/
t9qjkeqYDLPCxKtAGWABAprXgKIGWADCTbsVBgR8VqCwChM2QKLZc0gMlLLd40+vwkTtUEEOSVF+p9Ig
0WyY4IY6QoU3nOYDt86pYL7k9R0kLUCgDJF1TgUBk3VO5bFa51SK77xnXw9UcOMHLqhhcppDFSgsdikK
OGhmUCaoRIbLKaCQMUGxa8mgqICFAYYjWCpIPANlCIDMUFnnVO67dU7Fu/U6asgEKPv1DhN1ESgMGFSY
qAoT1iHZXtL2tSFy0SNQCYqtK1jYFBTObU04HJS8DkxyDRHNXoUJc0RyQiQnRBIoBESIbI9AbKFS3iCr
6xp2LQmTQ1DUWVgAg3Yq14DSW+dUrGtA6eV3KntYcFO1OQGFFTfho7XOqaRuvk5AbK1OwAAD4DEF5hCU
HvHwdY6AaOZip9LXhoijEsiUoACANvv6HCqsAoU5Ih2YhoitlYAhJOucyn23zqm8QsPuJCYQ4KwwYRkU
5aC0AEKGxKswYbFD8UcgwCBAvAyJF5j4uleBwipQVN+lODBCxHcqwmW3U1EBSspBmWLCAANnhkQ5Jr4e
QOllSLziJny01uPPK5VhISptXYHCKlBYhQpnBQqrQGGGygYL1oaJ1tNdihpg4UTEYwZLhYkaQNnWGZbA
BYCscyp3XqBysKVvrev191Z7NFIdk2FWmHgVKAMsQEDzGlDUAAtAuGm3woCAzwoUVmHCBkg0ew6JgVK2
e/zpVZioHSrIISnK71QaJJoNE9xQR6jwhtN84NY5FcyXvL6DpAUIlCGyzqkgYLLOqTxW65xK8Z337OuB
Cm78wAU1TE5zqAKFxS5FAQfNDMoElchwOQUUMiYodi0ZFBWwMMBwBEsFiWegDAGQGSrrnMp9t86peLde
Rw2ZAGW/3mGiLgKFAYMKE1Vhwjok20vavjZELnoEKkGxdQULm4LCua0Jh4OS14FJriGi2aswYY5ITojk
hEgChYAIke0RiC1UyhtkdV3DriVhcgiKOgsLYNBO5RpQeuucinUNKL38TmUPC26qNiegsOImfLTWOZXU
zdcJiK3VCRhgADymwByC0iMevs4REM1c7FT62hBxVAKZEhQA0GZfn0OFVaAwR6QD0xCxtRIwhGSdU7nv
1jmVV2jYncQEApwVJiyDohyUFkDIkHgVJix2KP4IBBgEiJch8QITX/cqUFgFiuq7FAdGiPhORbjsdioq
QEk5KFNMGGDgzJAox8TXAyi9DIlX3ISP1nr8eaUyLESlrStQWAUKq1DhrEBhFSjMUNlgwdow0Xq6S1ED
LJyIeMxgqTBRAyjbOsMSuACQdU7lzgtUDrb0rXW9/t5qj0aqYzLMChOvAmWABQhoXgOKGmABCDftVhgQ
8FmBwipM2ACJZs8hMVDKdo8/vQoTtUMFOSRF+Z1Kg0SzYYIb6ggV3nCaD9w6p4L5ktd3kLQAgTJE1jkV
BEzWOZXHap1TKb7znn09UMGNH7ighslpDlWgsNilKOCgmUGZoBIZLqeAQsYExa4lg6ICFgYYjmCpIPEM
lCEAMkNlnVO579Y5Fe/W66ghE6Ds1ztM1EWgMGBQYaIqTFiHZHtJ29eGyEWPQCUotq5gYVNQOLc14XBQ
8jowyTVENHsVJswRyQmRnBBJoBAQIbI9ArGFSnmDrK5r2LUkTA5BUWdhAQzaqVwDSm+dU7GuAaWX36ns
YcFN1eYEFFbchI/WOqeSuvk6AbG1OgEDDIDHFJhDUHrEw9c5AqKZi51KXxsijkogU4ICANrs63OosAoU
5oh0YBoitlYChpCscyr33Tqn8goNu5OYQICzwoRlUJSD0gIIGRKvwoTFDsUfgQCDAPEyJF5g4uteBQqr
QFF9l+LACBHfqQiX3U5FBSgpB2WKCQMMnBkS5Zj4egCllyHxipvw0VqPP69UhoWotHUFCqtAYRUqnBUo
rAKFGSobLFgbJlpPdylqgIUTEY8ZLBUmagBlW2dYAhcAss6p3HmBysGWvrWu199b7dFIdUyGWWHiVaAM
sAABzWtAUQMsAOGm3QoDAj4rUFiFCRsg0ew5JAZK2e7xp1dhonaoIIekKL9TaZBoNkxwQx2hwhtO84Fb
51QwX/L6DpIWIFCGyDqngoDJOqfyWK1zKsV33rOvByq48QMX1DA5zaEKFBa7FAUcNDMoE1Qiw+UUUMiY
oNi1ZFBUwMIAwxEsFSSegTIEQGaorHMq9906p+Ldeh01ZAKU/XqHiboIFAYMKkxUhQnrkGwvafvaELno
EagExdYVLGwKCue2JhwOSl4HJrmGiGavwoQ5IjkhkhMiCRQCIkS2RyC2UClvkNV1DbuWhMkhKOosLIBB
O5VrQOmtcyrWNaD08juVPSy4qdqcgMKKm/DRWudUUjdfJyC2VidggAHwmAJzCEqPePg6R0A0c7FT6WtD
xFEJZEpQAECbfX0OFVaBwhyRDkxDxNZKwBCSdU7lvlvnVF6hYXcSEwhwVpiwDIpyUFoAIUPiVZiw2KH4
IxBgECBehsQLTHzdq0BhFSiq71IcGCHiOxXhstupqAAl5aBMMWGAgTNDohwTXw+g9DIkXnETPlrr8eeV
yrAQlbauQGEVKKxChbMChVWgMENlgwVrw0Tr6S5FDbBwIuIxg6XCRA2gbOsMS+ACQNY5lTsvUDnY0rfW
9fp7qz0aqY7JMCtMvAqUARYgoHkNKGqABSDctFthQMBnBQqrMGEDJJo9h8RAKds9/vQqTNQOFeSQFOV3
Kg0SzYYJbqgjVHjDaT5w65wK5kte30HSAgTKEFnnVBAwWedUHqt1TqX4znv29UAFN37gghompzlUgcJi
l6KAg2YGZYJKZLicAgoZExS7lgyKClgYYDiCpYLEM1CGAMgMlXVO5b5b51S8W6+jhkyAsl/vMFEXgcKA
QYWJqjBhHZLtJW1fGyIXPQKVoNi6goVNQeHc1oTDQcnrwCTXENHsVZgwRyQnRHJCJIFCQITI9gjEFirl
DbK6rmHXkjA5BEWdhQUwaKdyDSi9dU7FugaUXn6nsocFN1WbE1BYcRM+WuucSurm6wTE1uoEDDAAHlNg
DkHpEQ9f5wiIZi52Kn1tiDgqgUwJCgBos6/PocIqUJgj0oFpiNhaCRhCss6p3HfrnMorNOxOYgIBzgoT
lkFRDkoLIGRIvAoTFjsUfwQCDALEy5B4gYmvexUorAJF9V2KAyNEfKciXHY7FRWgpByUKSYMMHBmSJRj
4usBlF6GxCtuwkdrPf68UhkWotLWFSisAoVVqHBWoLAKFGaobLBgbZhoPd2lqAEWTkQ8ZrBUmKgBlG2d
YQlcAMg6p3LnBSoHW/rWul5/b7VHI9UxGWaFiVeBMsACBDSvAUUNsACEm3YrDAj4rEBhFSZsgESz55AY
KGW7x59ehYnaoYIckqL8TqVBotkwwQ11hApvOM0Hbp1TwXzJ6ztIWoBAGSLrnAoCJuucymO1zqkU33nP
vh6o4MYPXFDD5DSHKlBY7FIUcNDMoExQiQyXU0AhY4Ji15JBUQELAwxHsFSQeAbKEACZobLOqdx365yK
d+t11JAJUPbrHSbqIlAYMKgwURUmrEOyvaTta0PkokegEhRbV7CwKSic25pwOCh5HZjkGiKavQoT5ojk
hEhOiCRQCIgQ2R6B2EKlvEFW1zXsWhImh6Cos7AABu1UrgGlt86pWNeA0svvVPaw4KZqcwIKK27CR2ud
U0ndfJ2A2FqdgAEGwGMKzCEoPeLh6xwB0czFTqWvDRFHJZApQQEAbfb1OVRYBQpzRDowDRFbKwFDSNY5
lftunVN5hYbdSUwgwFlhwjIoykFpAYQMiVdhwmKH4o9AgEGAeBkSLzDxda8ChVWgqL5LcWCEiO9UhMtu
p6IClJSDMsWEAQbODIlyTHw9gNLLkHjFTfhorcefVyrDQlTaugKFVaCwChXOChRWgcIMlQ0WrA0Trae7
FDXAwomIxwyWChM1gLKtMyyBCwBZ51TuvEDlYEvfWtfr7632aKQ6JsOsMPEqUAZYgIDmNaCoARaAcNNu
hQEBnxUorMKEDZBo9hwSA6Vs9/jTqzBRO1SQQ1KU36k0SDQbJrihjlDhDaf5wK1zKpgveX0HSQsQKENk
nVNBwGSdU3ms1jmV4jvv2dcDFdz4gQtqmJzmUAUKi12KAg6aGZQJKpHhcgooZExQ7FoyKCpgYYDhCJYK
Es9AGQIgM1TWOZX7bp1T8W69jhoyAcp+vcNEXQQKAwYVJqrChHVItpe0fW2IXPQIVIJi6woWNgWFc1sT
DgclrwOTXENEs1dhwhyRnBDJCZEECgERItsjEFuolDfI6rqGXUvC5BAUdRYWwKCdyjWg9NY5FesaUHr5
ncoeFtxUbU5AYcVN+Gitcyqpm68TEFurEzDAAHhMgTkEpUc8fJ0jIJq52Kn0tSHiqAQyJSgAoM2+PocK
q0BhjkgHpiFiayVgCMk6p3LfrXMqr9CwO4kJBDgrTFgGRTkoLYCQIfEqTFjsUPwRCDAIEC9D4gUmvu5V
oLAKFNV3KQ6MEPGdinDZ7VRUgJJyUKaYMMDAmSFRjomvB1B6GRKvuAkfrfX480plWIhKW1egsAoUVqHC
WYHCKlCYobLBgrVhovV0l6IGWDgR8ZjBUmGiBlC2dYYlcAEg65zKnReoHGzpW+t6/b3VHo1Ux2SYFSZe
BcoACxDQvAYUNcACEG7arTAg4LMChVWYsAESzZ5DYqCU7R5/ehUmaocKckiK8juVBolmwwQ31BEqvOE0
H7h1TgXzJa/vIGkBAmWIrHMqCJiscyqP1TqnUnznPft6oIIbP3BBDZPTHKpAYbFLUcBBM4MyQSUyXE4B
hYwJil1LBkUFLAwwHMFSQeIZKEMAZIbKOqdy361zKt6t11FDJkDZr3eYqItAYcCgwkRVmLAOyfaStq8N
kYsegUpQbF3BwqagcG5rwuGg5HVgkmuIaPYqTJgjkhMiOSGSQCEgQmR7BGILlfIGWV3XsGtJmByCos7C
Ahi0U7kGlN46p2JdA0ovv1PZw4Kbqs0JKKy4CR+tdU4ldfN1AmJrdQIGGACPKTCHoPSIh69zBEQzFzuV
vjZEHJVApgQFALTZ1+dQYRUozBHpwDREbK0EDCFZ51Tuu3VO5RUadicxgQBnhQnLoCgHpQUQMiRehQmL
HYo/AgEGAeJlSLzAxNe9ChRWgaL6LsWBESK+UxEuu52KClBSDsoUEwYYODMkyjHx9QBKL0PiFTfho7Ue
f16pDAtRaesKFFaBwipUOCtQWAUKM1Q2WLA2TLSe7lLUAAsnIh4zWCpM1ADKts6wBC4AZJ1TufMClYMt
fWtdr7+32qOR6pgMs8LEq0AZYAECmteAogZYAMJNuxUGBHxWoLAKEzZAotlzSAyUst3jT6/CRO1QQQ5J
UX6n0iDRbJjghjpChTec5gO3zqlgvuT1HSQtQKAMkXVOBQGTdU7lsVrnVIrvvGdfD1Rw4wcuqGFymkMV
KCx2KQo4aGZQJqhEhsspoJAxQbFryaCogIUBhiNYKkg8A2UIgMxQWedU7rt1TsW79TpqyAQo+/UOE3UR
KAwYVJioChPWIdle0va1IXLRI1AJiq0rWNgUFM5tTTgclLwOTHINEc1ehQlzRHJCJCdEEigERIhsj0Bs
oVLeIKvrGnYtCZNDUNRZWACDdirXgNJb51Ssa0Dp5Xcqe1hwU7U5AYUVN+Gjtc6ppG6+TkBsrU7AAAPg
MQXmEJQe8fB1joBo5mKn0teGiKMSyJSgAIA2+/ocKqwChTkiHZiGiK2VgCEk65zKfbfOqbxCw+4kJhDg
rDBhGRTloLQAQobEqzBhsUPxRyDAIEC8DIkXmPi6V4HCKlBU36U4MELEdyrCZbdTUQFKykGZYsIAA2eG
RDkmvh5A6WVIvOImfLTW488rlWEhKm1dgcIqUFiFCmcFCqtAYYbKBgvWhonW012KGmDhRMRjBkuFiRpA
2dYZlsAFgKxzKndeoHKwpW+t6/X3Vns0Uh2TYVaYeBUoAyxAQPMaUNQAC0C4abfCgIDPChRWYcIGSDR7
DomBUrZ7/OlVmKgdKsghKcrvVBokmg0T3FBHqPCG03zg1jkVzJe8voOkBQiUIbLOqSBgss6pPFbrnErx
nffs64EKbvzABTVMTnOoAoXFLkUBB80MygSVyHA5BRQyJih2LRkUFbAwwHAESwWJZ6AMAZAZKuucyn23
zql4t15HDZkAZb/eYaIuAoUBgwoTVWHCOiTbS9q+NkQuegQqQbF1BQubgsK5rQmHg5LXgUmuIaLZqzBh
jkhOiOSESAKFgAiR7RGILVTKG2R1XcOuJWFyCIo6Cwtg0E7lGlB665yKdQ0ovfxOZQ8Lbqo2J6Cw4iZ8
tNY5ldTN1wmIrdUJGGAAPKbAHILSIx6+zhEQzVzsVPraEHFUApkSFADQZl+fQ4VVoDBHpAPTELG1EjCE
ZJ1Tue/WOZVXaNidxAQCnBUmLIOiHJQWQMiQeBUmLHYo/ggEGASIlyHxAhNf9ypQWAWK6rsUB0aI+E5F
uOx2KipASTkoU0wYYODMkCjHxNcDKL0MiVfchI/Wevx5pTIsRKWtK1BYBQqrUOGsQGEVKMxQ2WDB2jDR
erpLUQMsnIh4zGCpMFEDKNs6wxK4AJB1TuXOC1QOtvStdb3+3mqPRqpjMswKE68CZYAFCGheA4oaYAEI
N+1WGBDwWYHCKkzYAIlmzyExUMp2jz+9ChO1QwU5JEX5nUqDRLNhghvqCBXecJoP3DqngvmS13eQtACB
MkTWORUETNY5lcdqnVMpvvOefT1QwY0fuKCGyWkOVaCw2KUo4KCZQZmgEhkup4BCxgTFriWDogIWBhiO
YKkg8QyUIQAyQ2WdU7nv1jkV79brqCEToOzXO0zURaAwYFBhoipMWIdke0nb14bIRY9AJSi2rmBhU1A4
tzXhcFDyOjDJNUQ0exUmzBHJCZGcEEmgEBAhsj0CsYVKeYOsrmvYtSRMDkFRZ2EBDNqpXANKb51Tsa4B
pZffqexhwU3V5gQUVtyEj9Y6p5K6+ToBsbU6AQMMgMcUmENQesTD1zkCopmLnUpfGyKOSiBTggIA2uzr
c6iwChTmiHRgGiK2VgKGkKxzKvfdm97/qa/9f9eK/4rA2taJAAAAAElFTkSuQmCC
</value>
</data>
<data name="btnHistory.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
......@@ -1016,118 +1016,118 @@
<data name="btnAOI.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="btnProduct.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
......
......@@ -31,7 +31,7 @@ using System.Runtime.InteropServices;
//
// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("4.1.*")]
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension = "config", Watch = true)]
......@@ -121,7 +121,7 @@
<value>SMART WORK STATION</value>
</data>
<data name="FrmMenu_lblVersion_Text" xml:space="preserve">
<value>Version 1.1.2</value>
<value>Version 4.1.2</value>
</data>
<data name="FrmMenu_btnExit_Text" xml:space="preserve">
<value>Quit</value>
......@@ -2598,4 +2598,20 @@
<data name="FrmComponentList_linkLabel2_Text" xml:space="preserve">
<value>Close LED</value>
</data>
<data name="Label_lblPos" xml:space="preserve">
<value>Postion: </value>
</data>
<data name="Label_lblNum" xml:space="preserve">
<value>Count: </value>
</data>
<data name="Label_lblPn" xml:space="preserve">
<value>PartNumber: </value>
</data>
<data name="Label_lblDes" xml:space="preserve">
<value>Description : </value>
</data>
<data name="Label_lblNotes" xml:space="preserve">
<value>Note: </value>
</data>
</root>
\ No newline at end of file
......@@ -121,7 +121,7 @@
<value>智能组装工作站/智能工作站</value>
</data>
<data name="FrmMenu_lblVersion_Text" xml:space="preserve">
<value>版本号 1.1.2</value>
<value>版本号 4.1.2</value>
</data>
<data name="FrmMenu_btnExit_Text" xml:space="preserve">
<value>退出</value>
......
......@@ -121,7 +121,7 @@
<value>智能组装工作站/智能工作站</value>
</data>
<data name="FrmMenu_lblVersion_Text" xml:space="preserve">
<value>版本号 1.1.2</value>
<value>版本号 4.1.2</value>
</data>
<data name="FrmMenu_btnExit_Text" xml:space="preserve">
<value>退出</value>
......@@ -2604,4 +2604,20 @@
<data name="FrmComponentList_linkLabel2_Text" xml:space="preserve">
<value>关灯测试</value>
</data>
<data name="Label_lblPos" xml:space="preserve">
<value>位置: </value>
</data>
<data name="Label_lblNum" xml:space="preserve">
<value>库存数量: </value>
</data>
<data name="Label_lblPn" xml:space="preserve">
<value>物料编码: </value>
</data>
<data name="Label_lblDes" xml:space="preserve">
<value>描述: </value>
</data>
<data name="Label_lblNotes" xml:space="preserve">
<value>注意事项: </value>
</data>
</root>
\ No newline at end of file
......@@ -16,7 +16,6 @@ using System.Runtime.InteropServices;
using AOI;
using System.Threading.Tasks;
using System.Net.Http;
using TSA_V.DeviceLibrary.manager;
using System.Linq;
using System.Configuration;
......@@ -941,6 +940,26 @@ namespace TSA_V
{
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.UpdateCNumOk, "元器件【{0}】的数量已更新为【{1}】", smtPoint.TagNo, count));
}
try
{
ComponetInfo com = CSVBomManager.GetCom(BoardManager.CurrBoard.bomName, smtPoint, true);
TSAVPosition position = null;
if (com != null)
{
position = CSVPositionReader<TSAVPosition>.GetPositonByNum(com.PositionNum);
}
else
{
position = CSVPositionReader<TSAVPosition>.GetPositonByNum(smtPoint.PositionNum);
}
LabelInfo label = LedLabelController.GetLabel(position, com, true);
LedLabelController.UpdateScreen(label);
}
catch (Exception ex)
{
LogUtil.error("更改屏幕后更新电子屏出错:" + ex.ToString());
}
txtCount.Visible = false;
lblCount.Text = count.ToString();
......
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
......@@ -57,6 +57,17 @@
the contents of this method with the code editor.
</summary>
</member>
<member name="P:ConfigHelper.CheckedListBoxEx.DataSource">
<summary>
绑定数据源
</summary>
<param name="data"></param>
</member>
<member name="T:ConfigHelper.CheckItem">
<summary>
Represents an item in the checklistbox
</summary>
</member>
<member name="T:ConfigHelper.Config">
<summary>
自定义配置存取
......
此文件类型无法预览
<?xml version="1.0"?>
<doc>
<assembly>
<name>OpenCvSharp.Extensions</name>
</assembly>
<members>
<member name="T:OpenCvSharp.Extensions.Binarizer">
<summary>
Various binarization methods (ATTENTION : The methods of this class is not implemented in OpenCV)
</summary>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Niblack(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Double)">
<summary>
Binarizes by Niblack's method (This is faster but memory-hogging)
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="k">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Sauvola(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Double,System.Double)">
<summary>
Binarizes by Sauvola's method (This is faster but memory-hogging)
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="k">Adequate coefficient</param>
<param name="r">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Bernsen(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Byte,System.Byte)">
<summary>
Binarizes by Bernsen's method
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="constrastMin">Adequate coefficient</param>
<param name="bgThreshold">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Nick(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Double)">
<summary>
Binarizes by Nick's method
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="k">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.MinMax(OpenCvSharp.Mat,System.Int32,System.Int32,System.Int32,System.Byte@,System.Byte@)">
<summary>
注目画素の周辺画素の最大値と最小値を求める
</summary>
<param name="img">画像の画素データ</param>
<param name="x">x座標</param>
<param name="y">y座標</param>
<param name="size">周辺画素の探索サイズ。奇数でなければならない</param>
<param name="min">出力される最小値</param>
<param name="max">出力される最大値</param>
</member>
<member name="T:OpenCvSharp.Extensions.BitmapConverter">
<summary>
static class which provides conversion between System.Drawing.Bitmap and Mat
</summary>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToMat(System.Drawing.Bitmap)">
<summary>
Converts System.Drawing.Bitmap to Mat
</summary>
<param name="src">System.Drawing.Bitmap object to be converted</param>
<returns>A Mat object which is converted from System.Drawing.Bitmap</returns>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToMat(System.Drawing.Bitmap,OpenCvSharp.Mat)">
<summary>
Converts System.Drawing.Bitmap to Mat
</summary>
<param name="src">System.Drawing.Bitmap object to be converted</param>
<param name="dst">A Mat object which is converted from System.Drawing.Bitmap</param>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToBitmap(OpenCvSharp.Mat)">
<summary>
Converts Mat to System.Drawing.Bitmap
</summary>
<param name="src">Mat</param>
<returns></returns>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToBitmap(OpenCvSharp.Mat,System.Drawing.Imaging.PixelFormat)">
<summary>
Converts Mat to System.Drawing.Bitmap
</summary>
<param name="src">Mat</param>
<param name="pf">Pixel Depth</param>
<returns></returns>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToBitmap(OpenCvSharp.Mat,System.Drawing.Bitmap)">
<summary>
Converts Mat to System.Drawing.Bitmap
</summary>
<param name="src">Mat</param>
<param name="dst">Mat</param>
<remarks>Author: shimat, Gummo (ROI support)</remarks>
</member>
<member name="T:OpenCvSharp.Extensions.CvExtensions">
<summary>
</summary>
</member>
<member name="M:OpenCvSharp.Extensions.CvExtensions.HoughLinesProbabilisticEx(OpenCvSharp.Mat,System.Double,System.Double,System.Int32,System.Double,System.Double,System.Double,System.Double)">
<summary>
</summary>
<param name="img"></param>
<param name="rho"></param>
<param name="theta"></param>
<param name="threshold"></param>
<param name="minLineLength"></param>
<param name="maxLineGap"></param>
<param name="thetaMin"></param>
<param name="thetaMax"></param>
<returns></returns>
</member>
<member name="T:OpenCvSharp.Extensions.OS">
<summary>
</summary>
</member>
<member name="T:OpenCvSharp.Extensions.Runtime">
<summary>
</summary>
</member>
<member name="T:OpenCvSharp.Extensions.Platform">
<summary>
Provides information for the platform which the user is using
</summary>
</member>
<member name="F:OpenCvSharp.Extensions.Platform.OS">
<summary>
OS type
</summary>
</member>
<member name="F:OpenCvSharp.Extensions.Platform.Runtime">
<summary>
Runtime type
</summary>
</member>
</members>
</doc>
此文件类型无法预览
此文件的差异太大,无法显示。
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?><doc>
<assembly>
<name>System.Buffers</name>
</assembly>
<members>
<member name="T:System.Buffers.ArrayPool`1">
<summary>Provides a resource pool that enables reusing instances of type <see cref="T[]"></see>.</summary>
<typeparam name="T">The type of the objects that are in the resource pool.</typeparam>
</member>
<member name="M:System.Buffers.ArrayPool`1.#ctor">
<summary>Initializes a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class.</summary>
</member>
<member name="M:System.Buffers.ArrayPool`1.Create">
<summary>Creates a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class.</summary>
<returns>A new instance of the <see cref="System.Buffers.ArrayPool`1"></see> class.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Create(System.Int32,System.Int32)">
<summary>Creates a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class using the specifed configuration.</summary>
<param name="maxArrayLength">The maximum length of an array instance that may be stored in the pool.</param>
<param name="maxArraysPerBucket">The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access.</param>
<returns>A new instance of the <see cref="System.Buffers.ArrayPool`1"></see> class with the specified configuration.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Rent(System.Int32)">
<summary>Retrieves a buffer that is at least the requested length.</summary>
<param name="minimumLength">The minimum length of the array.</param>
<returns>An array of type <see cref="T[]"></see> that is at least <paramref name="minimumLength">minimumLength</paramref> in length.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)">
<summary>Returns an array to the pool that was previously obtained using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method on the same <see cref="T:System.Buffers.ArrayPool`1"></see> instance.</summary>
<param name="array">A buffer to return to the pool that was previously obtained using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method.</param>
<param name="clearArray">Indicates whether the contents of the buffer should be cleared before reuse. If <paramref name="clearArray">clearArray</paramref> is set to true, and if the pool will store the buffer to enable subsequent reuse, the <see cref="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)"></see> method will clear the <paramref name="array">array</paramref> of its contents so that a subsequent caller using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method will not see the content of the previous caller. If <paramref name="clearArray">clearArray</paramref> is set to false or if the pool will release the buffer, the array&amp;#39;s contents are left unchanged.</param>
</member>
<member name="P:System.Buffers.ArrayPool`1.Shared">
<summary>Gets a shared <see cref="T:System.Buffers.ArrayPool`1"></see> instance.</summary>
<returns>A shared <see cref="System.Buffers.ArrayPool`1"></see> instance.</returns>
</member>
</members>
</doc>
\ No newline at end of file
此文件类型无法预览
<?xml version="1.0"?>
<doc>
<assembly>
<name>System.Drawing.Common</name>
</assembly>
<members>
<member name="T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute">
<summary>
Indicates that the specified method requires dynamic access to code that is not referenced
statically, for example through <see cref="N:System.Reflection"/>.
</summary>
<remarks>
This allows tools to understand which methods are unsafe to call when removing unreferenced
code from an application.
</remarks>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute"/> class
with the specified message.
</summary>
<param name="message">
A message that contains information about the usage of unreferenced code.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Message">
<summary>
Gets a message that contains information about the usage of unreferenced code.
</summary>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Url">
<summary>
Gets or sets an optional URL that contains more information about the method,
why it requires unreferenced code, and what options a consumer has to deal with it.
</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute">
<summary>
Suppresses reporting of a specific rule violation, allowing multiple suppressions on a
single code artifact.
</summary>
<remarks>
<see cref="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute"/> is different than
<see cref="T:System.Diagnostics.CodeAnalysis.SuppressMessageAttribute"/> in that it doesn't have a
<see cref="T:System.Diagnostics.ConditionalAttribute"/>. So it is always preserved in the compiled assembly.
</remarks>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.#ctor(System.String,System.String)">
<summary>
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute"/>
class, specifying the category of the tool and the identifier for an analysis rule.
</summary>
<param name="category">The category for the attribute.</param>
<param name="checkId">The identifier of the analysis rule the attribute applies to.</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category">
<summary>
Gets the category identifying the classification of the attribute.
</summary>
<remarks>
The <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category"/> property describes the tool or tool analysis category
for which a message suppression attribute applies.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId">
<summary>
Gets the identifier of the analysis tool rule to be suppressed.
</summary>
<remarks>
Concatenated together, the <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category"/> and <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId"/>
properties form a unique check identifier.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Scope">
<summary>
Gets or sets the scope of the code that is relevant for the attribute.
</summary>
<remarks>
The Scope property is an optional argument that specifies the metadata scope for which
the attribute is relevant.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Target">
<summary>
Gets or sets a fully qualified path that represents the target of the attribute.
</summary>
<remarks>
The <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Target"/> property is an optional argument identifying the analysis target
of the attribute. An example value is "System.IO.Stream.ctor():System.Void".
Because it is fully qualified, it can be long, particularly for targets such as parameters.
The analysis tool user interface should be capable of automatically formatting the parameter.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.MessageId">
<summary>
Gets or sets an optional argument expanding on exclusion criteria.
</summary>
<remarks>
The <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.MessageId"/> property is an optional argument that specifies additional
exclusion where the literal metadata target is not sufficiently precise. For example,
the <see cref="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute"/> cannot be applied within a method,
and it may be desirable to suppress a violation against a statement in the method that will
give a rule violation, but not against all statements in the method.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Justification">
<summary>
Gets or sets the justification for suppressing the code analysis message.
</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.AllowNullAttribute">
<summary>Specifies that null is allowed as an input even if the corresponding type disallows it.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.DisallowNullAttribute">
<summary>Specifies that null is disallowed as an input even if the corresponding type allows it.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullAttribute">
<summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.NotNullAttribute">
<summary>Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute">
<summary>Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue"/>, the parameter may be null even if the corresponding type disallows it.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.#ctor(System.Boolean)">
<summary>Initializes the attribute with the specified return value condition.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter may be null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue">
<summary>Gets the return value condition.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute">
<summary>Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue"/>, the parameter will not be null even if the corresponding type allows it.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.#ctor(System.Boolean)">
<summary>Initializes the attribute with the specified return value condition.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter will not be null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue">
<summary>Gets the return value condition.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute">
<summary>Specifies that the output will be non-null if the named parameter is non-null.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.#ctor(System.String)">
<summary>Initializes the attribute with the associated parameter name.</summary>
<param name="parameterName">
The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.ParameterName">
<summary>Gets the associated parameter name.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute">
<summary>Applied to a method that will never return under any circumstance.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute">
<summary>Specifies that the method will not return if the associated Boolean parameter is passed the specified value.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.#ctor(System.Boolean)">
<summary>Initializes the attribute with the specified parameter value.</summary>
<param name="parameterValue">
The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
the associated parameter matches this value.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.ParameterValue">
<summary>Gets the condition parameter value.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute">
<summary>Specifies that the method or property will ensure that the listed field and property members have not-null values.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.#ctor(System.String)">
<summary>Initializes the attribute with a field or property member.</summary>
<param name="member">
The field or property member that is promised to be not-null.
</param>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.#ctor(System.String[])">
<summary>Initializes the attribute with the list of field and property members.</summary>
<param name="members">
The list of field and property members that are promised to be not-null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.Members">
<summary>Gets field or property member names.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute">
<summary>Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.#ctor(System.Boolean,System.String)">
<summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter will not be null.
</param>
<param name="member">
The field or property member that is promised to be not-null.
</param>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.#ctor(System.Boolean,System.String[])">
<summary>Initializes the attribute with the specified return value condition and list of field and property members.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter will not be null.
</param>
<param name="members">
The list of field and property members that are promised to be not-null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.ReturnValue">
<summary>Gets the return value condition.</summary>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.Members">
<summary>Gets field or property member names.</summary>
</member>
<member name="P:System.SR.CantTellPrinterName">
<summary>(printer name protected due to security restrictions)</summary>
</member>
<member name="P:System.SR.CantChangeImmutableObjects">
<summary>Changes cannot be made to {0} because permissions are not valid.</summary>
</member>
<member name="P:System.SR.CantMakeIconTransparent">
<summary>Bitmaps that are icons cannot be made transparent. Icons natively support transparency. Use the Icon constructor to create an icon.</summary>
</member>
<member name="P:System.SR.ColorNotSystemColor">
<summary>The color {0} is not a system color.</summary>
</member>
<member name="P:System.SR.GdiplusAborted">
<summary>Function was ended.</summary>
</member>
<member name="P:System.SR.GdiplusAccessDenied">
<summary>File access is denied.</summary>
</member>
<member name="P:System.SR.GdiplusCannotCreateGraphicsFromIndexedPixelFormat">
<summary>A Graphics object cannot be created from an image that has an indexed pixel format.</summary>
</member>
<member name="P:System.SR.GdiplusCannotSetPixelFromIndexedPixelFormat">
<summary>SetPixel is not supported for images with indexed pixel formats.</summary>
</member>
<member name="P:System.SR.GdiplusDestPointsInvalidParallelogram">
<summary>Destination points define a parallelogram which must have a length of 3. These points will represent the upper-left, upper-right, and lower-left coordinates (defined in that order).</summary>
</member>
<member name="P:System.SR.GdiplusDestPointsInvalidLength">
<summary>Destination points must be an array with a length of 3 or 4. A length of 3 defines a parallelogram with the upper-left, upper-right, and lower-left corners. A length of 4 defines a quadrilateral with the fourth element of the array specifying the lower-rig ...</summary>
</member>
<member name="P:System.SR.GdiplusFileNotFound">
<summary>File not found.</summary>
</member>
<member name="P:System.SR.GdiplusFontFamilyNotFound">
<summary>Font '{0}' cannot be found.</summary>
</member>
<member name="P:System.SR.GdiplusFontStyleNotFound">
<summary>Font '{0}' does not support style '{1}'.</summary>
</member>
<member name="P:System.SR.GdiplusGenericError">
<summary>A generic error occurred in GDI+.</summary>
</member>
<member name="P:System.SR.GdiplusInsufficientBuffer">
<summary>Buffer is too small (internal GDI+ error).</summary>
</member>
<member name="P:System.SR.GdiplusInvalidParameter">
<summary>Parameter is not valid.</summary>
</member>
<member name="P:System.SR.GdiplusInvalidRectangle">
<summary>Rectangle '{0}' cannot have a width or height equal to 0.</summary>
</member>
<member name="P:System.SR.GdiplusInvalidSize">
<summary>Operation requires a transformation of the image from GDI+ to GDI. GDI does not support images with a width or height greater than 32767.</summary>
</member>
<member name="P:System.SR.GdiplusOutOfMemory">
<summary>Out of memory.</summary>
</member>
<member name="P:System.SR.GdiplusNotImplemented">
<summary>Not implemented.</summary>
</member>
<member name="P:System.SR.GdiplusNotInitialized">
<summary>GDI+ is not properly initialized (internal GDI+ error).</summary>
</member>
<member name="P:System.SR.GdiplusNotTrueTypeFont">
<summary>Only TrueType fonts are supported. '{0}' is not a TrueType font.</summary>
</member>
<member name="P:System.SR.GdiplusNotTrueTypeFont_NoName">
<summary>Only TrueType fonts are supported. This is not a TrueType font.</summary>
</member>
<member name="P:System.SR.GdiplusObjectBusy">
<summary>Object is currently in use elsewhere.</summary>
</member>
<member name="P:System.SR.GdiplusOverflow">
<summary>Overflow error.</summary>
</member>
<member name="P:System.SR.GdiplusPropertyNotFoundError">
<summary>Property cannot be found.</summary>
</member>
<member name="P:System.SR.GdiplusPropertyNotSupportedError">
<summary>Property is not supported.</summary>
</member>
<member name="P:System.SR.GdiplusUnknown">
<summary>Unknown GDI+ error occurred.</summary>
</member>
<member name="P:System.SR.GdiplusUnknownImageFormat">
<summary>Image format is unknown.</summary>
</member>
<member name="P:System.SR.GdiplusUnsupportedGdiplusVersion">
<summary>Current version of GDI+ does not support this feature.</summary>
</member>
<member name="P:System.SR.GdiplusWrongState">
<summary>Bitmap region is already locked.</summary>
</member>
<member name="P:System.SR.GlobalAssemblyCache">
<summary>(Global Assembly Cache)</summary>
</member>
<member name="P:System.SR.GraphicsBufferCurrentlyBusy">
<summary>BufferedGraphicsContext cannot be disposed of because a buffer operation is currently in progress.</summary>
</member>
<member name="P:System.SR.GraphicsBufferQueryFail">
<summary>Screen-compatible bitmap cannot be created. The screen bitmap format cannot be determined.</summary>
</member>
<member name="P:System.SR.IconInvalidMaskLength">
<summary>'{0}' data length expected {1}, read {2}</summary>
</member>
<member name="P:System.SR.IllegalState">
<summary>Internal state of the {0} class is invalid.</summary>
</member>
<member name="P:System.SR.InterpolationColorsColorBlendNotSet">
<summary>Property must be set to a valid ColorBlend object to use interpolation colors.</summary>
</member>
<member name="P:System.SR.InterpolationColorsCommon">
<summary>{0}{1} ColorBlend objects must be constructed with the same number of positions and color values. Positions must be between 0.0 and 1.0, 1.0 indicating the last element in the array.</summary>
</member>
<member name="P:System.SR.InterpolationColorsInvalidColorBlendObject">
<summary>ColorBlend object that was set is not valid.</summary>
</member>
<member name="P:System.SR.InterpolationColorsInvalidStartPosition">
<summary>Position's first element must be equal to 0.</summary>
</member>
<member name="P:System.SR.InterpolationColorsInvalidEndPosition">
<summary>Position's last element must be equal to 1.0.</summary>
</member>
<member name="P:System.SR.InterpolationColorsLength">
<summary>Array of colors and positions must contain at least two elements.</summary>
</member>
<member name="P:System.SR.InterpolationColorsLengthsDiffer">
<summary>Colors and positions do not have the same number of elements.</summary>
</member>
<member name="P:System.SR.InvalidArgumentValue">
<summary>Value of '{1}' is not valid for '{0}'.</summary>
</member>
<member name="P:System.SR.InvalidArgumentValueFontConverter">
<summary>Value of '{0}' is not valid for font size unit.</summary>
</member>
<member name="P:System.SR.InvalidBoundArgument">
<summary>Value of '{1}' is not valid for '{0}'. '{0}' should be greater than {2} and less than or equal to {3}.</summary>
</member>
<member name="P:System.SR.InvalidColor">
<summary>Color '{0}' is not valid.</summary>
</member>
<member name="P:System.SR.InvalidDashPattern">
<summary>DashPattern value is not valid.</summary>
</member>
<member name="P:System.SR.InvalidEx2BoundArgument">
<summary>Value of '{1}' is not valid for '{0}'. '{0}' should be greater than or equal to {2} and less than or equal to {3}.</summary>
</member>
<member name="P:System.SR.InvalidGDIHandle">
<summary>Win32 handle that was passed to {0} is not valid or is the wrong type.</summary>
</member>
<member name="P:System.SR.InvalidImage">
<summary>Image type is unknown.</summary>
</member>
<member name="P:System.SR.InvalidLowBoundArgumentEx">
<summary>Value of '{1}' is not valid for '{0}'. '{0}' must be greater than or equal to {2}.</summary>
</member>
<member name="P:System.SR.InvalidPermissionState">
<summary>Permission state is not valid.</summary>
</member>
<member name="P:System.SR.InvalidPictureType">
<summary>Argument '{0}' must be a picture that can be used as a {1}.</summary>
</member>
<member name="P:System.SR.InvalidPrinterException_InvalidPrinter">
<summary>Settings to access printer '{0}' are not valid.</summary>
</member>
<member name="P:System.SR.InvalidPrinterException_NoDefaultPrinter">
<summary>No printers are installed.</summary>
</member>
<member name="P:System.SR.InvalidPrinterHandle">
<summary>Handle {0} is not valid.</summary>
</member>
<member name="P:System.SR.ValidRangeX">
<summary>Parameter must be positive and &lt; Width.</summary>
</member>
<member name="P:System.SR.ValidRangeY">
<summary>Parameter must be positive and &lt; Height.</summary>
</member>
<member name="P:System.SR.NativeHandle0">
<summary>Native handle is 0.</summary>
</member>
<member name="P:System.SR.NoDefaultPrinter">
<summary>Default printer is not set.</summary>
</member>
<member name="P:System.SR.NotImplemented">
<summary>Not implemented.</summary>
</member>
<member name="P:System.SR.PDOCbeginPrintDescr">
<summary>Occurs when the document is about to be printed.</summary>
</member>
<member name="P:System.SR.PDOCdocumentNameDescr">
<summary>The name of the document shown to the user.</summary>
</member>
<member name="P:System.SR.PDOCdocumentPageSettingsDescr">
<summary>The page settings of the page currently being printed.</summary>
</member>
<member name="P:System.SR.PDOCendPrintDescr">
<summary>Occurs after the document has been printed.</summary>
</member>
<member name="P:System.SR.PDOCoriginAtMarginsDescr">
<summary>Indicates that the graphics origin is located at the user-specified page margins.</summary>
</member>
<member name="P:System.SR.PDOCprintControllerDescr">
<summary>Retrieves the print controller for this document.</summary>
</member>
<member name="P:System.SR.PDOCprintPageDescr">
<summary>Occurs once for each page to be printed.</summary>
</member>
<member name="P:System.SR.PDOCprinterSettingsDescr">
<summary>Retrieves the settings for the printer the document is currently being printed to.</summary>
</member>
<member name="P:System.SR.PDOCqueryPageSettingsDescr">
<summary>Occurs before each page is printed. Useful for changing PageSettings for a particular page.</summary>
</member>
<member name="P:System.SR.PlatformNotSupported_Unix">
<summary>System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.</summary>
</member>
<member name="P:System.SR.PrintDocumentDesc">
<summary>Defines an object that sends output to a printer.</summary>
</member>
<member name="P:System.SR.PropertyValueInvalidEntry">
<summary>IDictionary parameter contains at least one entry that is not valid. Ensure all values are consistent with the object's properties.</summary>
</member>
<member name="P:System.SR.PSizeNotCustom">
<summary>PaperSize cannot be changed unless the Kind property is set to Custom.</summary>
</member>
<member name="P:System.SR.ResourceNotFound">
<summary>Resource '{1}' cannot be found in class '{0}'.</summary>
</member>
<member name="P:System.SR.TextParseFailedFormat">
<summary>Text "{0}" cannot be parsed. The expected text format is "{1}".</summary>
</member>
<member name="P:System.SR.TriStateCompareError">
<summary>TriState.Default cannot be converted into a Boolean.</summary>
</member>
<member name="P:System.SR.toStringIcon">
<summary>(Icon)</summary>
</member>
<member name="P:System.SR.toStringNone">
<summary>(none)</summary>
</member>
<member name="P:System.SR.DCTypeInvalid">
<summary>GetObjectType on this dc returned an invalid value.</summary>
</member>
<member name="P:System.SR.InvalidEnumArgument">
<summary>The value of argument '{0}' ({1}) is invalid for Enum type '{2}'.</summary>
</member>
<member name="P:System.SR.ConvertInvalidPrimitive">
<summary>{0} is not a valid value for {1}.</summary>
</member>
<member name="P:System.SR.BlendObjectMustHaveTwoElements">
<summary>Invalid Blend object. It should have at least 2 elements in each of the factors and positions arrays.</summary>
</member>
<member name="P:System.SR.BlendObjectFirstElementInvalid">
<summary>Invalid Blend object. The positions array must have 0.0 as its first element.</summary>
</member>
<member name="P:System.SR.BlendObjectLastElementInvalid">
<summary>Invalid Blend object. The positions array must have 1.0 as its last element.</summary>
</member>
<member name="P:System.SR.AvailableOnlyOnWMF">
<summary>{0} only available on WMF files.</summary>
</member>
<member name="P:System.SR.CannotCreateGraphics">
<summary>Cannot create Graphics from an indexed bitmap.</summary>
</member>
<member name="P:System.SR.CouldNotOpenDisplay">
<summary>Could not open display (X-Server required. Check your DISPLAY environment variable)</summary>
</member>
<member name="P:System.SR.CouldntFindSpecifiedFile">
<summary>Couldn't find specified file.</summary>
</member>
<member name="P:System.SR.IconInstanceWasDisposed">
<summary>Icon instance was disposed.</summary>
</member>
<member name="P:System.SR.InvalidGraphicsUnit">
<summary>Invalid GraphicsUnit</summary>
</member>
<member name="P:System.SR.InvalidThumbnailSize">
<summary>Invalid thumbnail size</summary>
</member>
<member name="P:System.SR.NoCodecAvailableForFormat">
<summary>No codec available for format:{0}</summary>
</member>
<member name="P:System.SR.NotImplementedUnderX11">
<summary>Operation not implemented under X11</summary>
</member>
<member name="P:System.SR.none">
<summary>(none)</summary>
</member>
<member name="P:System.SR.NoValidIconImageFound">
<summary>No valid icon image found</summary>
</member>
<member name="P:System.SR.NullOrEmptyPath">
<summary>Null or empty path.</summary>
</member>
<member name="P:System.SR.NumberOfPointsAndTypesMustBeSame">
<summary>Invalid parameter passed. Number of points and types must be same.</summary>
</member>
<member name="P:System.SR.ObjectDisposed">
<summary>Object has been disposed.</summary>
</member>
<member name="P:System.SR.ValueLessThenZero">
<summary>The value of the {0} property is less than zero.</summary>
</member>
<member name="P:System.SR.ValueNotOneOfValues">
<summary>The value of the {0} property is not one of the {1} values</summary>
</member>
<member name="P:System.SR.TargetDirectoryDoesNotExist">
<summary>The directory {0} of the filename {1} does not exist.</summary>
</member>
<member name="P:System.SR.SystemDrawingCommon_PlatformNotSupported">
<summary>System.Drawing.Common is not supported on this platform.</summary>
</member>
<member name="T:System.Runtime.InteropServices.LibraryImportAttribute">
<summary>
Attribute used to indicate a source generator should create a function for marshalling
arguments instead of relying on the runtime to generate an equivalent marshalling function at run-time.
</summary>
<remarks>
This attribute is meaningless if the source generator associated with it is not enabled.
The current built-in source generator only supports C# and only supplies an implementation when
applied to static, partial, non-generic methods.
</remarks>
</member>
<member name="M:System.Runtime.InteropServices.LibraryImportAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:System.Runtime.InteropServices.LibraryImportAttribute"/>.
</summary>
<param name="libraryName">Name of the library containing the import.</param>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.LibraryName">
<summary>
Gets the name of the library containing the import.
</summary>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.EntryPoint">
<summary>
Gets or sets the name of the entry point to be called.
</summary>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshalling">
<summary>
Gets or sets how to marshal string arguments to the method.
</summary>
<remarks>
If this field is set to a value other than <see cref="F:System.Runtime.InteropServices.StringMarshalling.Custom" />,
<see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType" /> must not be specified.
</remarks>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType">
<summary>
Gets or sets the <see cref="T:System.Type"/> used to control how string arguments to the method are marshalled.
</summary>
<remarks>
If this field is specified, <see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshalling" /> must not be specified
or must be set to <see cref="F:System.Runtime.InteropServices.StringMarshalling.Custom" />.
</remarks>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.SetLastError">
<summary>
Gets or sets whether the callee sets an error (SetLastError on Windows or errno
on other platforms) before returning from the attributed method.
</summary>
</member>
<member name="T:System.Runtime.InteropServices.StringMarshalling">
<summary>
Specifies how strings should be marshalled for generated p/invokes
</summary>
</member>
<member name="F:System.Runtime.InteropServices.StringMarshalling.Custom">
<summary>
Indicates the user is suppling a specific marshaller in <see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType"/>.
</summary>
</member>
<member name="F:System.Runtime.InteropServices.StringMarshalling.Utf8">
<summary>
Use the platform-provided UTF-8 marshaller.
</summary>
</member>
<member name="F:System.Runtime.InteropServices.StringMarshalling.Utf16">
<summary>
Use the platform-provided UTF-16 marshaller.
</summary>
</member>
<member name="T:System.Runtime.Versioning.OSPlatformAttribute">
<summary>
Base type for all platform-specific API attributes.
</summary>
</member>
<member name="T:System.Runtime.Versioning.TargetPlatformAttribute">
<summary>
Records the platform that the project targeted.
</summary>
</member>
<member name="T:System.Runtime.Versioning.SupportedOSPlatformAttribute">
<summary>
Records the operating system (and minimum version) that supports an API. Multiple attributes can be
applied to indicate support on multiple operating systems.
</summary>
<remarks>
Callers can apply a <see cref="T:System.Runtime.Versioning.SupportedOSPlatformAttribute" />
or use guards to prevent calls to APIs on unsupported operating systems.
A given platform should only be specified once.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.UnsupportedOSPlatformAttribute">
<summary>
Marks APIs that were removed in a given operating system version.
</summary>
<remarks>
Primarily used by OS bindings to indicate APIs that are only available in
earlier versions.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.ObsoletedOSPlatformAttribute">
<summary>
Marks APIs that were obsoleted in a given operating system version.
</summary>
<remarks>
Primarily used by OS bindings to indicate APIs that should not be used anymore.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.SupportedOSPlatformGuardAttribute">
<summary>
Annotates a custom guard field, property or method with a supported platform name and optional version.
Multiple attributes can be applied to indicate guard for multiple supported platforms.
</summary>
<remarks>
Callers can apply a <see cref="T:System.Runtime.Versioning.SupportedOSPlatformGuardAttribute" /> to a field, property or method
and use that field, property or method in a conditional or assert statements in order to safely call platform specific APIs.
The type of the field or property should be boolean, the method return type should be boolean in order to be used as platform guard.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute">
<summary>
Annotates the custom guard field, property or method with an unsupported platform name and optional version.
Multiple attributes can be applied to indicate guard for multiple unsupported platforms.
</summary>
<remarks>
Callers can apply a <see cref="T:System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute" /> to a field, property or method
and use that field, property or method in a conditional or assert statements as a guard to safely call APIs unsupported on those platforms.
The type of the field or property should be boolean, the method return type should be boolean in order to be used as platform guard.
</remarks>
</member>
</members>
</doc>
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?><doc>
<assembly>
<name>System.Memory</name>
</assembly>
<members>
<member name="T:System.Span`1">
<typeparam name="T"></typeparam>
</member>
<member name="M:System.Span`1.#ctor(`0[])">
<param name="array"></param>
</member>
<member name="M:System.Span`1.#ctor(System.Void*,System.Int32)">
<param name="pointer"></param>
<param name="length"></param>
</member>
<member name="M:System.Span`1.#ctor(`0[],System.Int32)">
<param name="array"></param>
<param name="start"></param>
</member>
<member name="M:System.Span`1.#ctor(`0[],System.Int32,System.Int32)">
<param name="array"></param>
<param name="start"></param>
<param name="length"></param>
</member>
<member name="M:System.Span`1.Clear">
</member>
<member name="M:System.Span`1.CopyTo(System.Span{`0})">
<param name="destination"></param>
</member>
<member name="M:System.Span`1.DangerousCreate(System.Object,`0@,System.Int32)">
<param name="obj"></param>
<param name="objectData"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.DangerousGetPinnableReference">
<returns></returns>
</member>
<member name="P:System.Span`1.Empty">
<returns></returns>
</member>
<member name="M:System.Span`1.Equals(System.Object)">
<param name="obj"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.Fill(`0)">
<param name="value"></param>
</member>
<member name="M:System.Span`1.GetHashCode">
<returns></returns>
</member>
<member name="P:System.Span`1.IsEmpty">
<returns></returns>
</member>
<member name="P:System.Span`1.Item(System.Int32)">
<param name="index"></param>
<returns></returns>
</member>
<member name="P:System.Span`1.Length">
<returns></returns>
</member>
<member name="M:System.Span`1.op_Equality(System.Span{`0},System.Span{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Implicit(System.ArraySegment{T})~System.Span{T}">
<param name="arraySegment"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Implicit(System.Span{T})~System.ReadOnlySpan{T}">
<param name="span"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Implicit(T[])~System.Span{T}">
<param name="array"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Inequality(System.Span{`0},System.Span{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.Slice(System.Int32)">
<param name="start"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.Slice(System.Int32,System.Int32)">
<param name="start"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.ToArray">
<returns></returns>
</member>
<member name="M:System.Span`1.TryCopyTo(System.Span{`0})">
<param name="destination"></param>
<returns></returns>
</member>
<member name="T:System.SpanExtensions">
</member>
<member name="M:System.SpanExtensions.AsBytes``1(System.ReadOnlySpan{``0})">
<param name="source"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsBytes``1(System.Span{``0})">
<param name="source"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsSpan(System.String)">
<param name="text"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsSpan``1(System.ArraySegment{``0})">
<param name="arraySegment"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsSpan``1(``0[])">
<param name="array"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.CopyTo``1(``0[],System.Span{``0})">
<param name="array"></param>
<param name="destination"></param>
<typeparam name="T"></typeparam>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.Span{System.Byte},System.Byte)">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.ReadOnlySpan{System.Byte},System.Byte)">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.ReadOnlySpan{``0},``0)">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.Span{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.Span{``0},``0)">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.Byte,System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<param name="value2"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.Byte,System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<param name="value2"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="values"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="values"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.NonPortableCast``2(System.ReadOnlySpan{``0})">
<param name="source"></param>
<typeparam name="TFrom"></typeparam>
<typeparam name="TTo"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.NonPortableCast``2(System.Span{``0})">
<param name="source"></param>
<typeparam name="TFrom"></typeparam>
<typeparam name="TTo"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="first"></param>
<param name="second"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="first"></param>
<param name="second"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
<param name="first"></param>
<param name="second"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual``1(System.Span{``0},System.ReadOnlySpan{``0})">
<param name="first"></param>
<param name="second"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith``1(System.Span{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="T:System.ReadOnlySpan`1">
<typeparam name="T"></typeparam>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(`0[])">
<param name="array"></param>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(System.Void*,System.Int32)">
<param name="pointer"></param>
<param name="length"></param>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(`0[],System.Int32)">
<param name="array"></param>
<param name="start"></param>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(`0[],System.Int32,System.Int32)">
<param name="array"></param>
<param name="start"></param>
<param name="length"></param>
</member>
<member name="M:System.ReadOnlySpan`1.CopyTo(System.Span{`0})">
<param name="destination"></param>
</member>
<member name="M:System.ReadOnlySpan`1.DangerousCreate(System.Object,`0@,System.Int32)">
<param name="obj"></param>
<param name="objectData"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.DangerousGetPinnableReference">
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.Empty">
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.Equals(System.Object)">
<param name="obj"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.GetHashCode">
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.IsEmpty">
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.Item(System.Int32)">
<param name="index"></param>
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.Length">
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Equality(System.ReadOnlySpan{`0},System.ReadOnlySpan{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Implicit(System.ArraySegment{T})~System.ReadOnlySpan{T}">
<param name="arraySegment"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Implicit(T[])~System.ReadOnlySpan{T}">
<param name="array"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Inequality(System.ReadOnlySpan{`0},System.ReadOnlySpan{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.Slice(System.Int32)">
<param name="start"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.Slice(System.Int32,System.Int32)">
<param name="start"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.ToArray">
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.TryCopyTo(System.Span{`0})">
<param name="destination"></param>
<returns></returns>
</member>
</members>
</doc>
\ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8"?>
<doc>
<assembly>
<name>System.Runtime.CompilerServices.Unsafe</name>
</assembly>
<members>
<member name="T:System.Runtime.CompilerServices.Unsafe">
<summary>Contains generic, low-level functionality for manipulating pointers.</summary>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.Int32)">
<summary>Adds an element offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.IntPtr)">
<summary>Adds an element offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.UIntPtr)">
<summary>Adds an element offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(System.Void*,System.Int32)">
<summary>Adds an element offset to the given void pointer.</summary>
<param name="source">The void pointer to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of void pointer.</typeparam>
<returns>A new void pointer that reflects the addition of offset to the specified pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.IntPtr)">
<summary>Adds a byte offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="byteOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of byte offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.UIntPtr)">
<summary>Adds a byte offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="byteOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of byte offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AreSame``1(``0@,``0@)">
<summary>Determines whether the specified references point to the same location.</summary>
<param name="left">The first reference to compare.</param>
<param name="right">The second reference to compare.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="left" /> and <paramref name="right" /> point to the same location; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.As``1(System.Object)">
<summary>Casts the given object to the specified type.</summary>
<param name="o">The object to cast.</param>
<typeparam name="T">The type which the object will be cast to.</typeparam>
<returns>The original object, casted to the given type.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.As``2(``0@)">
<summary>Reinterprets the given reference as a reference to a value of type <typeparamref name="TTo" />.</summary>
<param name="source">The reference to reinterpret.</param>
<typeparam name="TFrom">The type of reference to reinterpret.</typeparam>
<typeparam name="TTo">The desired type of the reference.</typeparam>
<returns>A reference to a value of type <typeparamref name="TTo" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AsPointer``1(``0@)">
<summary>Returns a pointer to the given by-ref parameter.</summary>
<param name="value">The object whose pointer is obtained.</param>
<typeparam name="T">The type of object.</typeparam>
<returns>A pointer to the given value.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(``0@)">
<summary>Reinterprets the given read-only reference as a reference.</summary>
<param name="source">The read-only reference to reinterpret.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A reference to a value of type <typeparamref name="T" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(System.Void*)">
<summary>Reinterprets the given location as a reference to a value of type <typeparamref name="T" />.</summary>
<param name="source">The location of the value to reference.</param>
<typeparam name="T">The type of the interpreted location.</typeparam>
<returns>A reference to a value of type <typeparamref name="T" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.ByteOffset``1(``0@,``0@)">
<summary>Determines the byte offset from origin to target from the given references.</summary>
<param name="origin">The reference to origin.</param>
<param name="target">The reference to target.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>Byte offset from origin to target i.e. <paramref name="target" /> - <paramref name="origin" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(``0@,System.Void*)">
<summary>Copies a value of type <typeparamref name="T" /> to the given location.</summary>
<param name="destination">The location to copy to.</param>
<param name="source">A pointer to the value to copy.</param>
<typeparam name="T">The type of value to copy.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(System.Void*,``0@)">
<summary>Copies a value of type <typeparamref name="T" /> to the given location.</summary>
<param name="destination">The location to copy to.</param>
<param name="source">A reference to the value to copy.</param>
<typeparam name="T">The type of value to copy.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte@,System.Byte@,System.UInt32)">
<summary>Copies bytes from the source address to the destination address.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32)">
<summary>Copies bytes from the source address to the destination address.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte@,System.Byte@,System.UInt32)">
<summary>Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32)">
<summary>Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte@,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte@,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan``1(``0@,``0@)">
<summary>Returns a value that indicates whether a specified reference is greater than another specified reference.</summary>
<param name="left">The first value to compare.</param>
<param name="right">The second value to compare.</param>
<typeparam name="T">The type of the reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="left" /> is greater than <paramref name="right" />; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.IsAddressLessThan``1(``0@,``0@)">
<summary>Returns a value that indicates whether a specified reference is less than another specified reference.</summary>
<param name="left">The first value to compare.</param>
<param name="right">The second value to compare.</param>
<typeparam name="T">The type of the reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="left" /> is less than <paramref name="right" />; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.IsNullRef``1(``0@)">
<summary>Determines if a given reference to a value of type <typeparamref name="T" /> is a null reference.</summary>
<param name="source">The reference to check.</param>
<typeparam name="T">The type of the reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="source" /> is a null reference; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.NullRef``1">
<summary>Returns a reference to a value of type <typeparamref name="T" /> that is a null reference.</summary>
<typeparam name="T">The type of the reference.</typeparam>
<returns>A reference to a value of type <typeparamref name="T" /> that is a null reference.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Read``1(System.Void*)">
<summary>Reads a value of type <typeparamref name="T" /> from the given location.</summary>
<param name="source">The location to read from.</param>
<typeparam name="T">The type to read.</typeparam>
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Byte@)">
<summary>Reads a value of type <typeparamref name="T" /> from the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="source">The location to read from.</param>
<typeparam name="T">The type to read.</typeparam>
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Void*)">
<summary>Reads a value of type <typeparamref name="T" /> from the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="source">The location to read from.</param>
<typeparam name="T">The type to read.</typeparam>
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SizeOf``1">
<summary>Returns the size of an object of the given type parameter.</summary>
<typeparam name="T">The type of object whose size is retrieved.</typeparam>
<returns>The size of an object of type <typeparamref name="T" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SkipInit``1(``0@)">
<summary>Bypasses definite assignment rules for a given value.</summary>
<param name="value">The uninitialized object.</param>
<typeparam name="T">The type of the uninitialized object.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.Int32)">
<summary>Subtracts an element offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subtraction of offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.IntPtr)">
<summary>Subtracts an element offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subtraction of offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.UIntPtr)">
<summary>Subtracts an element offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subraction of offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(System.Void*,System.Int32)">
<summary>Subtracts an element offset from the given void pointer.</summary>
<param name="source">The void pointer to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of the void pointer.</typeparam>
<returns>A new void pointer that reflects the subtraction of offset from the specified pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.IntPtr)">
<summary>Subtracts a byte offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="byteOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subtraction of byte offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.UIntPtr)">
<summary>Subtracts a byte offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="byteOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subraction of byte offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Unbox``1(System.Object)">
<summary>Returns a <see langword="mutable ref" /> to a boxed value.</summary>
<param name="box">The value to unbox.</param>
<typeparam name="T">The type to be unboxed.</typeparam>
<exception cref="T:System.NullReferenceException">
<paramref name="box" /> is <see langword="null" />, and <typeparamref name="T" /> is a non-nullable value type.</exception>
<exception cref="T:System.InvalidCastException">
<paramref name="box" /> is not a boxed value type.
-or-
<paramref name="box" /> is not a boxed <typeparamref name="T" />.</exception>
<exception cref="T:System.TypeLoadException">
<typeparamref name="T" /> cannot be found.</exception>
<returns>A <see langword="mutable ref" /> to the boxed value <paramref name="box" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Write``1(System.Void*,``0)">
<summary>Writes a value of type <typeparamref name="T" /> to the given location.</summary>
<param name="destination">The location to write to.</param>
<param name="value">The value to write.</param>
<typeparam name="T">The type of value to write.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Byte@,``0)">
<summary>Writes a value of type <typeparamref name="T" /> to the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The location to write to.</param>
<param name="value">The value to write.</param>
<typeparam name="T">The type of value to write.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Void*,``0)">
<summary>Writes a value of type <typeparamref name="T" /> to the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The location to write to.</param>
<param name="value">The value to write.</param>
<typeparam name="T">The type of value to write.</typeparam>
</member>
</members>
</doc>
\ No newline at end of file
此文件太大,无法显示。
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!