; var StockChart = function (options) {
this.defVal = {
containerId: 'chart_container',
data: [],
PricePreviousClose: null,
style: {},
backgroundColor: 'white',
stroke: 'gray',
strokeWidth: 1,
fill: 'steelblue',
fillOpacity: '0.85',
};
var defStyle = {
fontFamily: 'Segoe UI',
fontSize: '20px',
fontWeight: 'bold',
fill: '#424444',
};
this.opts = $.extend({}, this.defVal, options);
this.opts.style = $.extend({}, defStyle, this.opts.style);
makeSVG = function (tag, attrs) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs)
el.setAttribute(k, attrs[k]);
return el;
}
};
StockChart.prototype = {
draw: function () {
$("#" + this.opts.containerId).empty();
if (!this.opts.data) {
$("#" + this.opts.containerId).hide();
return;
}
if (!this.opts.data.map) {
$("#" + this.opts.containerId).hide();
return;
}
// get the max price from data array
var max = Math.max.apply(Math, this.opts.data.map(function (o) { return o.P; }));
if (this.opts.PricePreviousClose && this.opts.PricePreviousClose > max) max = this.opts.PricePreviousClose;
// get the min price from data array
var min = Math.min.apply(Math, this.opts.data.map(function (o) { return o.P; }));
if (this.opts.PricePreviousClose && this.opts.PricePreviousClose < min) min = this.opts.PricePreviousClose;
// actual min value in scale Y
var minAxisY = parseFloat(min) - 0.1;// * 0.9;
// actual max value in scale Y
var maxAxisY = parseFloat(max) + 0.1;// * 1.1;
var startPointX = 90; // the trended line default start point X
var startPointY = 205; // the trended line default start point Y
var margin = 20; // the whole chart margin value, four margin values are same
var topY = margin + 25; // the top Y axis line point Y
var defWidth = 430; // the whole chart default width
var defHeight = 230; // the whole chart default height
var totalMinutes = 390; //9:30 am through 16:00 pm, a total of 390 minutes.
var xLength = defWidth - (margin * 2); // axis width
var yLength = startPointY - topY; // axis length
var xScale = (xLength - startPointX + margin) / totalMinutes; // X scale value
var yScale = parseFloat(yLength / (maxAxisY - minAxisY)).toFixed(2); // Y scale value
var todayDate = this.opts.data[0].T;
todayDate = new Date(todayDate.replace(/ /g, "T"));
var startTime = new Date(todayDate.getFullYear(), todayDate.getMonth(), todayDate.getDate(), 9, 30, 0, 0); // the default start time is 9:30 am
var xStart = startPointX + (todayDate - startTime) / 1000 / 60 * xScale; // calculate the trended line actual start point X
var containerWidth = $("#" + this.opts.containerId).width();
if (containerWidth == 0)
containerWidth = defWidth;
// append svg element
var svg;
if (!!window.ActiveXObject || "ActiveXObject" in window) {
svg = makeSVG('svg', {
width: defWidth * containerWidth / defWidth,
height: defHeight * containerWidth / defWidth,
viewBox: '0 0 ' + defWidth * containerWidth / defWidth + ' 0', focusable: 'false'
/*preserveAspectRatio: 'xMidYMin meet'*/
});
}
else {
svg = makeSVG('svg', {
/*width: defWidth * containerWidth / defWidth,
height: defHeight * containerWidth / defWidth,*/
viewBox: '0 0 ' + defWidth * containerWidth / defWidth + ' ' + defHeight * containerWidth / defWidth, focusable: 'false'
/*preserveAspectRatio: 'xMidYMin meet'*/
});
}
document.getElementById(this.opts.containerId).appendChild(svg);
$(svg).attr("aria-labelledby", "title desc").attr("role", "img");
$(this.opts.style).each(function (i, n) {
$(svg).css(this, n);
});
//append title element in svg
var gtitle = makeSVG('title', { id: 'title' });
gtitle.textContent = "MSFT stock day chart showing stock value at various times";
svg.appendChild(gtitle);
//append desc element in svg
var gdesc = makeSVG('desc', { id: 'desc' });
var strdesc = "";
var hours = 0;
var mins = 0;
for (var i = 0; i < this.opts.data.length; i++) {
var dateTemp = new Date(this.opts.data[i].T.replace(/ /g, "T"));
hours = dateTemp.getHours();
mins = dateTemp.getMinutes();
if (hours == 10 && mins == 0) { strdesc += "At 10am, stock value is " + this.opts.data[i].P; }
if (hours == 12 && mins == 0) { strdesc += ", At 12pm, stock value is " + this.opts.data[i].P; }
if (hours == 14 && mins == 0) { strdesc += ", At 2pm, stock value is " + this.opts.data[i].P; }
if (hours == 16 && mins == 0) { strdesc += ", At 4pm, stock value is " + this.opts.data[i].P; }
}
gdesc.textContent = strdesc;
svg.appendChild(gdesc);
// append gPath element in svg
var gPath = makeSVG('g', { id: this.opts.containerId + '_gPath', transform: 'scale(' + containerWidth / defWidth + ')' });
svg.appendChild(gPath);
// append rect element in gPath
gPath.appendChild(makeSVG('rect', {
x: 0,
y: 0,
width: defWidth,
height: defHeight,
fill: this.opts.backgroundColor
}));
// append Y axis line at top in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: topY,
x2: defWidth - margin + 0.5,
y2: topY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y axis line at middle in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: (startPointY - topY) / 2 + topY,
x2: defWidth - margin + 0.5,
y2: (startPointY - topY) / 2 + topY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y axis line at bottom in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: startPointY,
x2: defWidth - margin + 0.5,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 1 in gPath
gPath.appendChild(makeSVG('line', {
x1: startPointX,
y1: topY,
x2: startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 2 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 30 + startPointX,
y1: topY,
x2: xScale * 30 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 3 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 150 + startPointX,
y1: topY,
x2: xScale * 150 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 4 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 270 + startPointX,
y1: topY,
x2: xScale * 270 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append X axis line 5 in gPath
gPath.appendChild(makeSVG('line', {
x1: xScale * 390 + startPointX,
y1: topY,
x2: xScale * 390 + startPointX,
y2: startPointY,
stroke: this.opts.stroke,
"stroke-width": this.opts.strokeWidth
}));
// append Y scale label at bottom in gPath
var textY1 = makeSVG('text', {
x: margin - 10,
y: startPointY - 1,
id: this.opts.containerId + '_y0'
});
textY1.textContent = "$" + minAxisY.toFixed(2);
gPath.appendChild(textY1);
// append Y scale label at middle in gPath
var textY2 = makeSVG('text', {
x: margin - 10,
y: (startPointY - topY) / 2 + topY - 1,
id: this.opts.containerId + '_y1'
});
textY2.textContent = "$" + (minAxisY + (maxAxisY - minAxisY) / 2).toFixed(2);
gPath.appendChild(textY2);
// append gTxt element in gPath
var gTxt = makeSVG('g', { id: this.opts.containerId + '_gTxt' });
gPath.appendChild(gTxt);
// append X scale label 1 in gTxt
var textX1 = makeSVG('text', {
x: xScale * 30 + startPointX - 20,
y: margin + 15
});
//textX1.textContent = (todayDate).getShortMonthName() + todayDate.getDate();
textX1.textContent = "10am";
gTxt.appendChild(textX1);
// append X scale label 2 in gTxt
var textX2 = makeSVG('text', {
x: xScale * 150 + startPointX - 20,
y: margin + 15
});
textX2.textContent = "12pm";
gTxt.appendChild(textX2);
// append X scale label 3 in gTxt
var textX3 = makeSVG('text', {
x: xScale * 270 + startPointX - 20,
y: margin + 15
});
textX3.textContent = "2pm";
gTxt.appendChild(textX3);
// append X scale label 4 in gTxt
var textX4 = makeSVG('text', {
x: xScale * 390 + startPointX - 35,
y: margin + 15
});
textX4.textContent = "4pm";
gTxt.appendChild(textX4);
$('text').attr("aria-hidden", "true");
var d = "M" + xStart + "," + startPointY;
var x, y;
for (var i = 0, ci; ci = this.opts.data[i]; i++) {
if (typeof ci !== 'undefined') {
var currTime = isSafari() ? toJSDate(ci.T) : new Date(ci.T);
var duration = (currTime - todayDate) / 1000 / 60;
x = (parseFloat(xStart + xScale * duration));
y = startPointY - parseFloat((ci.P - minAxisY) * yScale).toFixed(2);
d = d + "L" + x + "," + y;
}
}
d = d + "L" + x + "," + startPointY + " Z";
// append path element in gPath
gPath.appendChild(makeSVG('path',
{
id: this.opts.containerId + '_area',
d: d,
fill: this.opts.fill,
"fill-opacity": this.opts.fillOpacity
}));
if (this.opts.PricePreviousClose) {
// append ycp orange line
gPath.appendChild(makeSVG('line', {
x1: startPointX - 0.5,
y1: startPointY - parseFloat((this.opts.PricePreviousClose - minAxisY) * yScale).toFixed(2),
x2: defWidth - margin + 0.5,
y2: startPointY - parseFloat((this.opts.PricePreviousClose - minAxisY) * yScale).toFixed(2),
stroke: '#FF8C00',
"stroke-dasharray": "4,4",
"stroke-width": this.opts.strokeWidth + 1
}));
}
}
};
Date.prototype.monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
Date.prototype.getMonthName = function () {
return this.monthNames[this.getMonth()];
};
Date.prototype.getShortMonthName = function () {
return this.getMonthName().substr(0, 3);
};
function isSafari() {
var is_safari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
return is_safari;
}
function toJSDate(dateTime) {
var dateTimeArr = dateTime.split(" ");//dateTime[0] = date, dateTime[1] = time
var date = dateTimeArr[0].split("-");
var time = dateTimeArr[1].split(":");
return new Date(date[0], date[1], date[2], time[0], time[1], time[2], 0);
}
function compareNine(value) {
return value > 9 ? value : '0' + value;
};
function addMins(date, min) {
return new Date(date.setMinutes(date.getMinutes() + min));
};
function toFixedNumber(v, fraction, unit) {
var numClear = v.toString().replace(/$/g, '').replace(/,/g, '');
var num = Number(numClear);
if (isNaN(num)) return v == '???' ? 'NA' : v;
else if (num == 0) return 0;
var p = 1;
var unitPost = unit == undefined ? '' : unit;
if (unit != undefined && unit.toLowerCase() == 'mil') p = 1000000;
else if (unit != undefined && unit.toLowerCase() == 'bil') p = 1000000000;
return (num / p).toFixed(fraction) + ' ' + unitPost;
};
function toFixedDatetime(d, t, foramtStr, timezone) {
var arrDateParts = d.split("-");
if (arrDateParts.length == 3) {
var dayNum = arrDateParts[0];
var monthNum = arrDateParts[1];
var yearNum = arrDateParts[2];
var D = new Date(monthNum.concat("/", dayNum, "/", yearNum, ' ', t));
return D.Format(foramtStr) + ' - ' + timezone;
}
return (new Date(d.concat(' ', t))).Format(foramtStr) + ' - ' + timezone;
};
function toFixedDatetimeSec(t, foramtStr, timezone) {
var arrDateParts = t.split("-");
if (arrDateParts.length == 3) {
t = new Date(t.replace(/ /g, "T"));
return t.Format(foramtStr) + ' - ' + timezone;
}
return (new Date(t.replace(/ /g, "T"))).Format(foramtStr) + ' - ' + timezone;
};
function toFixed(number, precision) {
var b = 1;
if (isNaN(number)) return number;
if (number < 0) b = -1;
var multiplier = Math.pow(10, precision);
return Math.round(Math.abs(number) * multiplier) / multiplier * b;
};
String.prototype.replaceAll = function (s1, s2) {
return this.replace(new RegExp(s1, "gm"), s2);
};
Date.prototype.Format = function (fmt) {
var that = this;
var postfix = false;
var o = {
"M+": this.getMonth() + 1, //month
"d+": this.getDate(), //day
"h+": function () {
return postfix ? (that.getHours() % 12 == 0 ? 12 : that.getHours() % 12) : that.getHours();
}, //hour
"m+": this.getMinutes(), //minute
"s+": this.getSeconds(), //second
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds() //millisecond
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
if (RegExp.$1.length == 1 && RegExp.$1 == "h") postfix = true;
var val = typeof (o[k]) == "function" ? o[k].apply(this) : o[k];
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (val) : (("00" + val).substr(("" + val).length)));
}
}
return fmt + (postfix ? ((this.getHours() < 12) ? " AM" : " PM") : "");
};
function getStockData(data, chartData, varMarketCap) {
if (data.valueM.length == 0) return;
var dataitem = data.valueM[0];
var last = dataitem.price;
var change = dataitem.priceChange;
var percentchange = dataitem.priceChangePercent;
var volume = dataitem.accumulatedVolume;
var cap = varMarketCap * last;
var yearhigh = dataitem.price52wHigh;
var yearlow = dataitem.price52wLow;
var timeoflastsale = (chartData.Series != null && typeof chartData.Series.EndTime !== 'undefined') ? chartData.Series.EndTime : dataitem.datePreviousClose;
var percentChangeClass = ' ';
$('.MicrosoftCorp_last').html("$" + toFixedNumber(last, 2));
var num_change = Number(change);
var external_change = toFixed(num_change, 2);
var external_percentchange = toFixed(Number(percentchange.toString().replace('%', '')), 2);
if (!isNaN(external_change)) external_change = external_change > 0 ? ('+$' + external_change) : ('-$' + Math.abs(external_change));
if (!isNaN(external_percentchange)) external_percentchange = external_percentchange > 0 ? ('+' + external_percentchange + '%') : (external_percentchange + '%');
if (!isNaN(num_change) && num_change < 0) percentChangeClass = ' class="MicrosoftCorp_percentChange"';
else if (isNaN(num_change) || num_change == 0) percentChangeClass = ' class="MicrosoftCorp_percentChange_none"';
$('.MicrosoftCorp_Change').html('' + external_change + ' (' + external_percentchange + ')');
$('.MicrosoftCorp_price>a').css("display", "inline-block").attr("aria-label", "Microsoft current price is " + toFixedNumber(last, 2) + "dollars, Today's change is " + external_change + ", or " + external_percentchange + " points.").attr("title", "click to stock detail page");
$('.MicrosoftCorp_volume').html(toFixedNumber(volume, 2, 'Mil'));
$('.MicrosoftCorp_cap').html(toFixedNumber(cap, 2, 'Bil'));
$('.MicrosoftCorp_yearhigh').html(toFixedNumber(yearhigh, 2));
$('.MicrosoftCorp_yearlow').html(toFixedNumber(yearlow, 2));
$('.MicrosoftCorp_footer_time').html('Quotes delayed by up to 15 minutes. Price Quote as of ' + toFixedDatetimeSec(timeoflastsale, "M/dd/yyyy h:mm:ss", 'ET. Supplied by Refinitiv'));
$('.MicrosoftCorp_footer_time').attr("aria-label", 'Quotes delayed by up to 15 minutes. Price Quote as of ' + toFixedDatetimeSec(timeoflastsale, "M/dd/yyyy h:mm:ss", 'ET'));
};
function getStockChart(data) {
if (data.length == 0 || typeof data.Series == 'undefined' || data.Series == null) return;
var _data = [];
var startTime = data.Series.PT[0].T;
for (var i = 0, ci; ci = data.Series.PT[i]; i++) {
_data.push({
P: ci.P,
T: i == 0 ? startTime : ci.T
});
}
$('.stock-chart-container').each(function (i) {
var _id = "stock-chart-container-" + i.toString();
$(this).attr("id", _id);
try {
var stockChart = new StockChart({
containerId: _id,
fill: '#5f5f5f',
style: {
fontSize: '18px',
fill: '#424444',
fontWeight: 'normal'
},
data: _data,
PricePreviousClose: data.PricePreviousClose
});
stockChart.draw();
}
catch (err) {
console.info(err.message);
$(this).hide();
}
});
//});
};
function buildChart(strChart, strQuote, strOutstanding) {
if (strChart != "") {
var dataChart = JSON.parse(decodeURIComponent(strChart));
getStockChart(dataChart);
}
if (strQuote != "") {
var dataQuote = JSON.parse(decodeURIComponent(strQuote));
getStockData(dataQuote, dataChart, strOutstanding);
}
if (!strChart) {
strChart = "{\"id\":\"Chart1D1M:a1xzim\",\"PreHoursSeries\":null,\"AfterHoursSeries\":null,\"Series\":{\"PT\":[{\"P\": \"\" ,\"T\":\"\"}],\"StartTime\":\"\",\"EndTime\":\"\"},\"PricePreviousClose\":\"\",\"ChartType\":\"1D1M\",\"ExchangeId\":\"r6dwop\",\"ExchangeCode\":\"XNAS\", " + "\"ExchangeName\":\"Nasdaq Stock Market\",\"OfferingStatus\":\"regular\",\"DisplayName\":\"Microsoft Corp\",\"ShortName\":\"Microsoft\",\"SecurityType\":\"stock\",\"InstrumentId\":\"a1xzim\",\"Symbol\":\"MSFT\",\"Country\":\"US\",\"Market\":\"en-us\","
+ "\"LocalizedAttributes\":{\"enus\":null},\"TimeLastUpdated\":\"\",\"Currency\":\"USD\",\"_p\":\"a1xzim\",\"_t\":\"Chart\",\"_etag\":\"\",\"_rid\":\"\",\"_self\":\"\",\"_attachments\":null,\"_ts\":1580839600}";
dataChart = JSON.parse(strChart);
getStockChart(dataChart);
$("#stock-chart-container-0_y0").text("$");
$("#stock-chart-container-0_y1").text("$");
}
if (!strQuote) {
$(".MicrosoftCorp_volume").html(" ");
$(".MicrosoftCorp_cap").html(" ");
$(".MicrosoftCorp_yearhigh").html(" ");
$(".MicrosoftCorp_yearlow").html(" ");
$('.MicrosoftCorp_footer_time').html('Stock quotes are delayed and will be displayed soon. Supplied by Refinitiv');
}
/*setInterval(function () {
getStockChart(dataChart);
getStockData(dataQuote,dataChart);
}, "300000");*/
$(window).resize(function () {
if (!!window.ActiveXObject || "ActiveXObject" in window) {
var defWidth = 430; // the whole chart default width
var defHeight = 230; // the whole chart default height
var containerWidth = $(".IRStock .stock-chart-container").width();
if (containerWidth == 0)
containerWidth = defWidth;
var width = defWidth * containerWidth / defWidth;
var height = defHeight * containerWidth / defWidth;
var viewbox = '0 0 ' + defWidth * containerWidth / defWidth + ' 0';
$(".IRStock .stock-chart-container svg").attr("width", width).attr("height", height);
document.querySelector(".IRStock .stock-chart-container svg").setAttribute('viewBox', viewbox);
document.querySelector(".IRStock .stock-chart-container svg g").setAttribute('transform', 'scale(' + containerWidth / defWidth + ')');
}
});
}
// SIG // Begin signature block
// SIG // MIIpAwYJKoZIhvcNAQcCoIIo9DCCKPACAQExDzANBglg
// SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
// SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
// SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
// SIG // deRzoq11NrEfjWoD56q/sk+nfgeBgmwBr7EiLefEoRKg
// SIG // gg3SMIIGvDCCBKSgAwIBAgITMwAAANLYbEaxncayoAAA
// SIG // AAAA0jANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJV
// SIG // UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
// SIG // MTMwMQYDVQQDEypBenVyZSBSU0EgUHVibGljIFNlcnZp
// SIG // Y2VzIENvZGUgU2lnbmluZyBQQ0EwHhcNMjYwMzA1MTkw
// SIG // NjE4WhcNMjcwMzAzMTkwNjE4WjCBgjELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEsMCoGA1UEAxMjQXp1cmUgUHVibGljIFNl
// SIG // cnZpY2VzIFJTQSBDb2RlIFNpZ24wggGiMA0GCSqGSIb3
// SIG // DQEBAQUAA4IBjwAwggGKAoIBgQCzWKZG9P7t0hKBimeC
// SIG // eMptumOPqwHZzspivt8o8D+6mS0L1WzQjEvrAtSYvzQI
// SIG // MJXDWAf7ItbG2MxPPOVPtHNQaA8+mr9GdNgsb9bJM2hK
// SIG // 4y4P1elGhGGX8NimfQZW9TeSAZsYe0OfRjMdwIphuyjh
// SIG // 8kbARy3/mnDliXCdGj0u1Ft1qw87+bT6FlZ8Pv+OykUW
// SIG // /WAM28r56qu1C5qm6Xx5LvRBxzk+i4K+Mu17yN3ALlad
// SIG // 5w9uetGBa3WK1eN8ftCd2K0SV0AzpPVcuWbuYhhdifMW
// SIG // trtg4r7pgWxQDBu6gSicXRt7oBFY56ilLxNqzs+UrhTq
// SIG // Kq1taSw1qC3s0KzyxEC/Bz2+OFjnfbeZQxF2dMJ1r2Vw
// SIG // E5nW65uckXepwgofsKgs806jTkt4Br8Kd0PAwmC9qF4T
// SIG // xereCls2gIQmvAJxkACZnCbXGJp7XZ6Xsw+nykQzpiov
// SIG // dlNLwTm/zzkDQSws7z+7m6jZEB3d7hiOqsuz47MEfmUJ
// SIG // qluOioDD6d8CAwEAAaOCAcgwggHEMA4GA1UdDwEB/wQE
// SIG // AwIHgDAfBgNVHSUEGDAWBggrBgEFBQcDAwYKKwYBBAGC
// SIG // N1sBATAdBgNVHQ4EFgQUYqV4NR+DJwhQtHAKZqMo4HsM
// SIG // aRkwVAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jv
// SIG // c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEW
// SIG // MBQGA1UEBRMNNDY5OTgxKzUwNzE4NzAfBgNVHSMEGDAW
// SIG // gBTxL7qRFnzefVInMfV6+9VYWWk6PTBvBgNVHR8EaDBm
// SIG // MGSgYqBghl5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
// SIG // cGtpb3BzL2NybC9BenVyZSUyMFJTQSUyMFB1YmxpYyUy
// SIG // MFNlcnZpY2VzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0Eu
// SIG // Y3JsMHwGCCsGAQUFBwEBBHAwbjBsBggrBgEFBQcwAoZg
// SIG // aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
// SIG // ZXJ0cy9BenVyZSUyMFJTQSUyMFB1YmxpYyUyMFNlcnZp
// SIG // Y2VzJTIwQ29kZSUyMFNpZ25pbmclMjBQQ0EuY3J0MAwG
// SIG // A1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEMBQADggIBAKMM
// SIG // UX0YVUUCTqE50xhl9Pk0hRfkLD14eIdvc+/cwwgKs2mR
// SIG // DMG66/dGboyhlj1pogVsnvh0ByqJoFQYP/bqzQIgXJZM
// SIG // 778xRQ3b5REzU+6sEFdnDBdWe2lT3SoEZD4gPGcqj6BZ
// SIG // w/1dJDLeenv9hUIqZMGE28IZx26CIVXoieUq9Bj69Z0n
// SIG // o0bzuzx20QwOqZ6yhiUT9UtOzSF55T3DJlx3COEYfQQP
// SIG // Oomvj2V6lIVpum3v7OFSjGzTJaCcY/JKYqDHrcDCdmau
// SIG // 3zAiCMkNJk5Nmsg5BPjes7MML/cC+6fSs+L3N1c8ilGt
// SIG // Y7ghulNnBnJv+UZuD7ig5gANLk4wK/I5Y2BtxAtNowsy
// SIG // nthb9Tnck5nYJ6i3HyWUc24TuXXAF++dG+H8Yes16vJL
// SIG // HqH5b2xywVJelLFpYOj7kvGT8jJFZKUAJe1c//D1rBkA
// SIG // Y+BT39mkAEd81B59pTHOwVS9uVxcwGa3yEXryhWbh44q
// SIG // LQE9kfh8bypq2vLeSYZQX5kn3Lxyzk+W41MmabZHSu2R
// SIG // X7ve201BkkpGuq8PL7IdQT8uba6Wqv7Pewiz4HsUfc0l
// SIG // +PhcXgfn1ArJiUW1Sww92sLFk7C0UCufMjtxvxMwkfJc
// SIG // edZWVele21OzOEXSzFf5OkPg6ne7JOvZeJYmCaFITJE+
// SIG // 9ha6TSs+TczP61FR7+ptMIIHDjCCBPagAwIBAgITMwAA
// SIG // AAKyxJOIeFns0wAAAAAAAjANBgkqhkiG9w0BAQwFADBb
// SIG // MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0
// SIG // IENvcnBvcmF0aW9uMSwwKgYDVQQDEyNNaWNyb3NvZnQg
// SIG // UlNBIFNlcnZpY2VzIFJvb3QgQ0EgMjAyMTAeFw0yMTA5
// SIG // MDIxNzQxMTlaFw0zNjA5MDIxNzUxMTlaMGIxCzAJBgNV
// SIG // BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
// SIG // YXRpb24xMzAxBgNVBAMTKkF6dXJlIFJTQSBQdWJsaWMg
// SIG // U2VydmljZXMgQ29kZSBTaWduaW5nIFBDQTCCAiIwDQYJ
// SIG // KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXd/Sy91nFg
// SIG // seVJOFgeRhVxrcahyp1YGSN0FpOEgEREVb3ND/QgI7I0
// SIG // yd7XG6OE8Vomr5FMxvK8TvJ4Lc6LP9BDz2GSa1M0LlzH
// SIG // KX757/24C0ZndzccA1qQi00+BmmOr4plmxRzTFv4Phdw
// SIG // 8yBPF9GDvClqV8ASvvbitfjaD7dVPOFLb7N7fvt/qWog
// SIG // GN5eis0FXCqVJdmPZZaX2h4iG0otsAhfq8yvSlJ0YwO4
// SIG // i5GDeLQwTsMN1Rf2UAHQKCUYkFsLSQ0mqbaRbDZhB+2p
// SIG // FL/q/c2a6hlHLnapYyfwlNFXkDhwAFWEzfwFHER2oR42
// SIG // UayfN9tsO/p2tWk33CrnHdndJDrIZ6oQ3D+Ngol/TR8B
// SIG // AgXCIM6se6YlLDTsxRwh9QUDq7KVhKy58HGKJUqwgIW0
// SIG // E7cvlzUl0Hft/ebhALZyFDkhof9C5Cq4c/486XLjQq0n
// SIG // buKsFNhQU0yvABR3eohw63Kps66Uma48oE0JmqOxmzrP
// SIG // vrITYcsnByKleiHn+4yq+Ts/KrtqkQwQcuikMPrZwXCt
// SIG // sYkxMUyUn8gr8oew22WDeIQECAM1Cz9TcdJadsrToKqX
// SIG // Qa2bAn/AABAYyogPPONfGvojTI3DlYD42etMa/gPeZJa
// SIG // vX+z7x8d/4eYBnJ9WFSi9q0v+vLOGc3fyM2KQtq5eVbH
// SIG // X5rVyWc6bJ35AgMBAAGjggHCMIIBvjAQBgkrBgEEAYI3
// SIG // FQEEAwIBADAdBgNVHQ4EFgQU8S+6kRZ83n1SJzH1evvV
// SIG // WFlpOj0wVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYB
// SIG // BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
// SIG // a2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTAZBgkrBgEE
// SIG // AYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYw
// SIG // DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBQODLFk
// SIG // ab0tsdVrJqZH6lZOgMPtijBmBgNVHR8EXzBdMFugWaBX
// SIG // hlVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
// SIG // L2NybC9NaWNyb3NvZnQlMjBSU0ElMjBTZXJ2aWNlcyUy
// SIG // MFJvb3QlMjBDQSUyMDIwMjEuY3JsMHMGCCsGAQUFBwEB
// SIG // BGcwZTBjBggrBgEFBQcwAoZXaHR0cDovL3d3dy5taWNy
// SIG // b3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQl
// SIG // MjBSU0ElMjBTZXJ2aWNlcyUyMFJvb3QlMjBDQSUyMDIw
// SIG // MjEuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBin7PMBnXj
// SIG // nIJ0x++LnudLDWWnZ8dZmJ14DuZfUss/doUThLAM4crr
// SIG // HaTbJoulUUELNd2AnOpX/Z4tenUMT3sjYIdPYyJfIYWP
// SIG // RqfI6Nbz+JVK7RRvn2nl5EEMIuRE6UKS9ZGBbf02a7sb
// SIG // 04E/7BN/NhhrmtS/tVFjfRrrVh9zXku45rqWuCwUTzg3
// SIG // EqxKQ8OGbtjBQtq/Syb/clm5BHsoh3XhMnb9VLv3G1du
// SIG // Nf90FL5/o88XZ4L18nx1lfky2nllY4HIA8PK8AarqAW4
// SIG // iKSTA3EGqn8s/47WtQKT+qED2YbZXVOYL+L7vQDCnFbw
// SIG // hgAx6ucuMz7Ae1rqibg3AjsC7U5M3oA/vqAHDKDA3mdM
// SIG // 5D6L/ZEdQgaG20HhUOSQ+CiQD3TyHSiVCfVMuTv83IiK
// SIG // Cni3LW/23tHC2tbN57rlhMcoyjIi+IVd7j7s41MFBaDw
// SIG // JrmfXn/YM+lR/5QqvO7zWAbbr/XU531v3jr/jBilmrqt
// SIG // 6U/b7y8TXyA9nYxV9iSMFmcbyIi2xgdcAHhxnpXcvcvy
// SIG // FWET6YiJiyeSJZwwJv8gwXiBF+Zh0IHArl6KVsbAdsAT
// SIG // uP1TCEBpPynXZmkviIEWPtnv315ZjTC7nPoOpSnOVaO7
// SIG // wZztrOefZunI5fBxw7mG1oyoRnADZawiFsVo9J/cDu15
// SIG // ErRCfDQRhwSiBTGCGokwghqFAgEBMHkwYjELMAkGA1UE
// SIG // BhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
// SIG // dGlvbjEzMDEGA1UEAxMqQXp1cmUgUlNBIFB1YmxpYyBT
// SIG // ZXJ2aWNlcyBDb2RlIFNpZ25pbmcgUENBAhMzAAAA0ths
// SIG // RrGdxrKgAAAAAADSMA0GCWCGSAFlAwQCAQUAoIGuMBkG
// SIG // CSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQB
// SIG // gjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJ
// SIG // BDEiBCAULgUwGHY+/n5Nx08ErZiUmqARk/x+7L82ifgw
// SIG // pdwU1DBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMA
// SIG // cgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNyb3Nv
// SIG // ZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBgIby55EPDvfb
// SIG // MDCkLs3DCNH4ItmHIKwBGcMjXTrRVP1bC0gpcYrpwYxP
// SIG // +BQiXvamrM4qNvstaD5ne9KmtZipdAFeLuBLgdhpJRmC
// SIG // meyh8tyn3pKqVNFI6WMmyF5bgHFPcPRBgruDlFr5Vskn
// SIG // gz2DdED1yFaugWOQQrqKk+fPmdPA3rahPP0y+Le6nOz5
// SIG // KnlRPg6MHmtu+yYT2ZN1ZdEJbfBoD5oqieFyil+/RQUo
// SIG // l2V832voku+82F7dYSPjYY6eSuvCzSOBzDR3/N53dHVF
// SIG // N8qRcc/CM3FTYbjWxq1FRVEaeEv4bax1tdiDHQT0Z416
// SIG // 7YoJeGNVhpv00ffOwkpd4IfeYwxT1ttpZ04BPrA+q2Qf
// SIG // y9F7IPhkSR+BZCQSOTfvHSDQmGqCAAYiOmJtV9hKzaMI
// SIG // zHo/3VO2JkbvM8fSqWDGTLV5MAedvfZJNq7xaHBNXebL
// SIG // WpDHdKLMfyVFF/gDPXiLqcsDQwsIkQQz7SZQ80llucTj
// SIG // 12XG7rEppSTcbvfKoKGCF7AwghesBgorBgEEAYI3AwMB
// SIG // MYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kwgheFAgEDMQ8w
// SIG // DQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCC
// SIG // AUkEggFFMIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCG
// SIG // SAFlAwQCAQUABCDg7xrqZ2DVwvK5WNtB9OJjMsXha/s7
// SIG // S3+QPZvxkmkexAIGaetN0QlCGBMyMDI2MDUwNzA0Mjcx
// SIG // Ny40MjNaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJV
// SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
// SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
// SIG // cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFu
// SIG // ZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsTHm5T
// SIG // aGllbGQgVFNTIEVTTjo2QjA1LTA1RTAtRDk0NzElMCMG
// SIG // A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
// SIG // ZaCCEf4wggcoMIIFEKADAgECAhMzAAACEUUYOZtDz/xs
// SIG // AAEAAAIRMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
// SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
// SIG // LVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4NDgxM1oX
// SIG // DTI2MTExMzE4NDgxM1owgdMxCzAJBgNVBAYTAlVTMRMw
// SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
// SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
// SIG // b24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9w
// SIG // ZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs
// SIG // ZCBUU1MgRVNOOjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQD
// SIG // ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIC
// SIG // IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz7m7
// SIG // MxAdL5Vayrk7jsMo3GnhN85ktHCZEvEcj4BIccHKd/NK
// SIG // C7uPvpX5dhO63W6VM5iCxklG8qQeVVrPaKvj8dYYJC7D
// SIG // Nt4NN3XlVdC/voveJuPPhTJ/u7X+pYmV2qehTVPOOB1/
// SIG // hpmt51SzgxZczMdnFl+X2e1PgutSA5CAh9/Xz5NW0Cxn
// SIG // YVz8g0Vpxg+Bq32amktRXr8m3BSEgUs8jgWRPVzPHEcz
// SIG // pbhloGGEfHaROmHhVKIqN+JhMweEjU2NXM2W6hm32j/Q
// SIG // H/I/KWqNNfYchHaG0xJljVTYoUKPpcQDuhH9dQKEgvGx
// SIG // j2U5/3Fq1em4dO6Ih04m6R+ttxr6Y8oRJH9ZhZ3sciFB
// SIG // IvZh7E2YFXOjP4MGybSylQTPDEFAtHHgpkskeEUhsPDR
// SIG // 9VvWWhekhQx3qXaAKh+AkLmz/hpE3e0y+RIKO2AREjUL
// SIG // JAKgf+R9QnNvqMeMkz9PGrjsijqWGzB2k2JNyaUYKlbm
// SIG // QweOabsCioiY2fJbimjVyFAGk5AeYddUFxvJGgRVCH7B
// SIG // eBPKAq7MMOmSCTOMZ0Sw6zyNx4Uhh5Y0uJ0ZOoTKnB3K
// SIG // fdN/ba/eKHFeEhi3WqAfzTxiy0rMvhsfsXZK7zoclqaR
// SIG // vVl8Q48J174+eyriypY9HhU+ohgiYi4uQGDDVdTDeKDt
// SIG // oC/hD2Cn+ARzwE1rFfECAwEAAaOCAUkwggFFMB0GA1Ud
// SIG // DgQWBBRifUUDwOnqIcvfb53+yV0EZn7OcDAfBgNVHSME
// SIG // GDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8E
// SIG // WDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j
// SIG // b20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0
// SIG // YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUH
// SIG // AQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1p
// SIG // Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m
// SIG // dCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNy
// SIG // dDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG
// SIG // AQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0B
// SIG // AQsFAAOCAgEApEKdnMeIIUiU6PatZ/qbrwiDzYUMKRcz
// SIG // C4Bp/XY1S9NmHI+2c3dcpwH2SOmDfdvIIqt7mRrgvBPY
// SIG // OvJ9CtZS5eeIrsObC0b0ggKTv2wrTgWG+qktqNFEhQei
// SIG // pdURNLN68uHAm5edwBytd1kwy5r6B93klxDsldOmVWtw
// SIG // /ngj7knN09muCmwr17JnsMFcoIN/H59s+1RYN7Vid4+7
// SIG // nj8FcvYy9rbZOMndBzsTiosF1M+aMIJX2k3EVFVsuDL7
// SIG // /R5ppI9Tg7eWQOWKMZHPdsA3ZqWzDuhJqTzoFSQShnZe
// SIG // nC+xq/z9BhHPFFbUtfjAoG6EDPjSQJYXmogja8OEa19x
// SIG // wnh3wVufeP+ck+/0gxNi7g+kO6WaOm052F4siD8xi6Uv
// SIG // 75L7798lHvPThcxHHsgXqMY592d1wUof3tL/eDaQ0Uhn
// SIG // YCU8yGkU2XJnctONnBKAvURAvf2qiIWDj4Lpcm0zA7Vu
// SIG // ofuJR1Tpuyc5p1ja52bNZBBVqAOwyDhAmqWsJXAjYXns
// SIG // sC/fJkee314Fh+GIyMgvAPRScgqRZqV16dTBYvoe+w1n
// SIG // /wWs/ySTUsxDw4T/AITcu5PAsLnCVpArDrFLRTFyut+e
// SIG // HUoG6UYZfj8/RsuQ42INse1pb/cPm7G2lcLJtkIKT80x
// SIG // vB1LiaNvPTBVEcmNSvFUM0xrXZXcYcxVXiYwggdxMIIF
// SIG // WaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqG
// SIG // SIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE
// SIG // CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
// SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIw
// SIG // MAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
// SIG // ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIyMjVa
// SIG // Fw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMw
// SIG // EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
// SIG // b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
// SIG // b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
// SIG // IFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
// SIG // MIICCgKCAgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwH
// SIG // B9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa
// SIG // 4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZr
// SIG // BxTzxXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6
// SIG // xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv62
// SIG // 6GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlw
// SIG // aQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDua
// SIG // Rr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I
// SIG // 5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF80
// SIG // 3RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26o
// SIG // ElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/TNuv
// SIG // XsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFz
// SIG // ymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMh
// SIG // XV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y1BzFa/Zc
// SIG // UlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgV
// SIG // GD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOC
// SIG // Ad0wggHZMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYB
// SIG // BAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0G
// SIG // A1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNV
// SIG // HSAEVTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUF
// SIG // BwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
// SIG // b3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAww
// SIG // CgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUA
// SIG // YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMB
// SIG // Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186a
// SIG // GMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5t
// SIG // aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWlj
// SIG // Um9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUF
// SIG // BwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5t
// SIG // aWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJB
// SIG // dXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQAD
// SIG // ggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+Tkdk
// SIG // eLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGh
// SIG // lBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6
// SIG // Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7nd
// SIG // n/OOPcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n
// SIG // 4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZ
// SIG // UnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA
// SIG // 0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3Uw
// SIG // xTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+
// SIG // c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxko
// SIG // JLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmx
// SIG // aQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+DvktxW/
// SIG // tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM
// SIG // +Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rR
// SIG // nj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N
// SIG // 7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCCAkECAQEw
// SIG // ggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UE
// SIG // CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
// SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0w
// SIG // KwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRp
// SIG // b25zIExpbWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNT
// SIG // IEVTTjo2QjA1LTA1RTAtRDk0NzElMCMGA1UEAxMcTWlj
// SIG // cm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcG
// SIG // BSsOAwIaAxUAKyp8q2VdgAq1VGkzd7PZwV6zNc2ggYMw
// SIG // gYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
// SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
// SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
// SIG // Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAN
// SIG // BgkqhkiG9w0BAQsFAAIFAO2mRiowIhgPMjAyNjA1MDYy
// SIG // MjU4NTBaGA8yMDI2MDUwNzIyNTg1MFowdzA9BgorBgEE
// SIG // AYRZCgQBMS8wLTAKAgUA7aZGKgIBADAKAgEAAgIQNgIB
// SIG // /zAHAgEAAgIShDAKAgUA7aeXqgIBADA2BgorBgEEAYRZ
// SIG // CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6Eg
// SIG // oQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQBL
// SIG // woLs7XiW6D6dAOOiPGeEIiHUhgyGcvoI73i3f7Ljk07X
// SIG // aeEChoic4KoPMkw4pwkAZKvTlZqgMCwIk2MzLvNELKdf
// SIG // ymZc6CpC+1USRZrCCugARO98KBN2wMXsLkGhrgWyvgas
// SIG // OCmshVtjM/xhulTPSLUYfrxnbvxmfqxxiuh7NxnSdBvM
// SIG // S0kkmf5gIdeH0EkAw8kflcEAkmaNLzI/bgEauorh9Vlj
// SIG // eVhamaHgv1vsTv6yOvRWByRctQOX9PGZvplKo9iSMJXL
// SIG // eyQy7Hwkm53KA9/ZDCvVa8DAb8Rrl1bmYbXRlIYbv8TJ
// SIG // /XTMpsvog7QOSMtYnPZ20vfzWC2D5sWvMYIEDTCCBAkC
// SIG // AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
// SIG // c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
// SIG // BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
// SIG // AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAC
// SIG // EzMAAAIRRRg5m0PP/GwAAQAAAhEwDQYJYIZIAWUDBAIB
// SIG // BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
// SIG // BDAvBgkqhkiG9w0BCQQxIgQgdyXkhK54yYTC1uvEqNI3
// SIG // Q+seydsa7KRWAd2KKiEuDMkwgfoGCyqGSIb3DQEJEAIv
// SIG // MYHqMIHnMIHkMIG9BCAsrTOpmu+HTq1aXFwvlhjF8p2n
// SIG // UCNNCEX/OWLHNDMmtzCBmDCBgKR+MHwxCzAJBgNVBAYT
// SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
// SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
// SIG // cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
// SIG // LVN0YW1wIFBDQSAyMDEwAhMzAAACEUUYOZtDz/xsAAEA
// SIG // AAIRMCIEIFMbxFpjrbxXE0BMA3XFVqP0pD4Z4N/7GRU9
// SIG // nSigvSO5MA0GCSqGSIb3DQEBCwUABIICALXDHe9cyCxt
// SIG // WwiakCB3uSVYJYI+Su178PdKv2Rd4InYpLrLzW33vdlk
// SIG // cIn/T90Y1qLel6odLE626T5dU1Mt1OgSB6FWK2cdUqW7
// SIG // Vi4om+sByORuypzOch0dd537qRuHazB0x7D6HfZTyOPn
// SIG // 4qF+Z4Djn6WghhF1zf8+GnBm+K0dk56po/GfAyRnRtwg
// SIG // 0Ouaxof9adOI7sbwtbgNrPFrdXcnONoYDlyUS1SFEQMA
// SIG // nvjLLbKIwVhSSg/ps0xHGeqzFokZNkmgPoDyeDnJBYTp
// SIG // IlhbDxTNyO7adMI7buJcHHjJPAVWtdZYImHSnPqLqQls
// SIG // YTkUdH4CMuCdYPGGT73k6wA6AlqIwIGog8KB7w3QE7Bj
// SIG // mfbuPNaHfK+duqx1I/3aJtt6hDN3nJXbbQDAPLFR9TIG
// SIG // LamKdamjeU/x7P1952qRgu42QFCeRao9+r8BQUOH4xFx
// SIG // 9b82yuM3MqwbCkuaNhAwD08F3awa7zjnlxSmEdXdxQWW
// SIG // 1E0tjXhBrZzbh9WPZMwQCBsXSIE6bVPjk/U5ePOjP+fm
// SIG // ElwkWQ6O6WVWNs1+1yvRT7d6zo3ILLVSe+HVXWW9jc74
// SIG // XlQP8SySgNMCIf+rdLgM8qAYgDWP0WhhgCB/d931uhnr
// SIG // 900zXKsEniYGrvDvP8jANSrBNlKE5lNh5SQuBUX8hUog
// SIG // Bk5eOHZsbmav
// SIG // End signature block