merchi_product_form
Version:
A React component for Merchi product forms
458 lines (456 loc) • 53 kB
JavaScript
var _excluded = ["json"];
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import { Merchi } from 'merchi_sdk_ts';
import { formatCurrency } from '../utils/currency';
import { ProductType } from '../utils/types';
var pngOptionNotFound = require('../images/product-not-found.png');
function renderSingleCostIndication(cost, currencyCode, costTypeString) {
var currencyOptions = {
currency: currencyCode,
showCodeIfNoSymbol: false
};
var costString = '';
if (cost) {
costString = formatCurrency(parseFloat(cost), currencyOptions);
costString = ' + ' + costString + ' ' + costTypeString;
}
return costString;
}
var costDetail = function costDetail(onceOffCost, unitCost, currencyCode) {
var onceOffCostDescription = renderSingleCostIndication(parseFloat(onceOffCost), currencyCode, 'once off');
var unitCostDescription = renderSingleCostIndication(parseFloat(unitCost), currencyCode, 'per unit');
return onceOffCostDescription + unitCostDescription;
};
export function variationFieldCostDetail(variationField) {
var variationCost = variationField.variationCost,
variationUnitCost = variationField.variationUnitCost,
currency = variationField.currency;
return costDetail(variationCost, variationUnitCost, currency);
}
export function variationCostDetail(variation) {
var onceOffCost = variation.onceOffCost,
unitCost = variation.unitCost,
currency = variation.currency;
return costDetail(onceOffCost, unitCost, currency);
}
export function variationFieldOptionCostDetail(option) {
var currency = option.currency,
onceOffCost = option.onceOffCost,
unitCost = option.unitCost;
return costDetail(onceOffCost, unitCost, currency);
}
export function splitSelectedOptions(value) {
if (Array.isArray(value)) {
return value;
}
if (typeof value === 'string' && value) {
return value.split(',');
}
return [];
}
export var supplierSellerEditableProductTypes = [ProductType.SUPPLIER_MOD, ProductType.CLONED_SUPPLIER_MOD];
export function optionImageUrl(option) {
var image = pngOptionNotFound ? pngOptionNotFound["default"] || pngOptionNotFound : '';
var imageNotFound = image ? image.src || image : '';
return option.linkedFile ? option.linkedFile ? option.linkedFile.viewUrl : imageNotFound : imageNotFound;
}
export function allowedFileTypes(variationField) {
var fileTypeMapping = {
allowFileJpeg: '.jpeg',
allowFileGif: '.gif',
allowFilePdf: '.pdf',
allowFilePng: '.png',
allowFileAi: '.ai'
};
var allowedTypes = Object.keys(fileTypeMapping).filter(function (attributeName) {
return variationField[attributeName];
}).map(function (attributeName) {
return fileTypeMapping[attributeName];
});
return allowedTypes.join(',');
}
var merchi = new Merchi();
export function buildEmptyVariationGroup(product) {
var productEnt = new merchi.Product();
productEnt.fromJson(_objectSpread({}, product), {
makeDirty: false
});
var newGroup = new productEnt.buildEmptyVariationGroup();
newGroup.groupCost = 0;
newGroup.quantity = 0;
return newGroup.toJson();
}
export function isProductSupplierMOD(product) {
var productType = product && product.productType;
return product && [String(ProductType.SUPPLIER_MOD), String(ProductType.SUPPLIER_RESELL_MOD)].includes(String(productType));
}
export function isProductTypeFileDownload(productType) {
return parseInt(productType, 10) === ProductType.SELLER_FILE_DOWNLOAD;
}
export function isProductFileDownload(product) {
var productType = product.productType;
return isProductTypeFileDownload(productType);
}
export function isProductLeadForm(product) {
var productType = product && product.productType;
return parseInt(productType, 10) === ProductType.LEAD_FORM;
}
export var isoCountries = {
AF: 'Afghanistan',
AX: 'Aland Islands',
AL: 'Albania',
DZ: 'Algeria',
AS: 'American Samoa',
AD: 'Andorra',
AO: 'Angola',
AI: 'Anguilla',
AQ: 'Antarctica',
AG: 'Antigua And Barbuda',
AR: 'Argentina',
AM: 'Armenia',
AW: 'Aruba',
AU: 'Australia',
AT: 'Austria',
AZ: 'Azerbaijan',
BS: 'Bahamas',
BH: 'Bahrain',
BD: 'Bangladesh',
BB: 'Barbados',
BY: 'Belarus',
BE: 'Belgium',
BZ: 'Belize',
BJ: 'Benin',
BM: 'Bermuda',
BT: 'Bhutan',
BO: 'Bolivia',
BA: 'Bosnia And Herzegovina',
BW: 'Botswana',
BV: 'Bouvet Island',
BR: 'Brazil',
IO: 'British Indian Ocean Territory',
BN: 'Brunei Darussalam',
BG: 'Bulgaria',
BF: 'Burkina Faso',
BI: 'Burundi',
KH: 'Cambodia',
CM: 'Cameroon',
CA: 'Canada',
CV: 'Cape Verde',
KY: 'Cayman Islands',
CF: 'Central African Republic',
TD: 'Chad',
CL: 'Chile',
CN: 'China',
CX: 'Christmas Island',
CC: 'Cocos (Keeling) Islands',
CO: 'Colombia',
KM: 'Comoros',
CG: 'Congo',
CD: 'Congo, Democratic Republic',
CK: 'Cook Islands',
CR: 'Costa Rica',
CI: "Cote D'Ivoire",
HR: 'Croatia',
CU: 'Cuba',
CY: 'Cyprus',
CZ: 'Czech Republic',
DK: 'Denmark',
DJ: 'Djibouti',
DM: 'Dominica',
DO: 'Dominican Republic',
EC: 'Ecuador',
EG: 'Egypt',
SV: 'El Salvador',
GQ: 'Equatorial Guinea',
ER: 'Eritrea',
EE: 'Estonia',
ET: 'Ethiopia',
FK: 'Falkland Islands (Malvinas)',
FO: 'Faroe Islands',
FJ: 'Fiji',
FI: 'Finland',
FR: 'France',
GF: 'French Guiana',
PF: 'French Polynesia',
TF: 'French Southern Territories',
GA: 'Gabon',
GM: 'Gambia',
GE: 'Georgia',
DE: 'Germany',
GH: 'Ghana',
GI: 'Gibraltar',
GR: 'Greece',
GL: 'Greenland',
GD: 'Grenada',
GP: 'Guadeloupe',
GU: 'Guam',
GT: 'Guatemala',
GG: 'Guernsey',
GN: 'Guinea',
GW: 'Guinea-Bissau',
GY: 'Guyana',
HT: 'Haiti',
HM: 'Heard Island & Mcdonald Islands',
VA: 'Holy See (Vatican City State)',
HN: 'Honduras',
HK: 'Hong Kong',
HU: 'Hungary',
IS: 'Iceland',
IN: 'India',
ID: 'Indonesia',
IR: 'Iran, Islamic Republic Of',
IQ: 'Iraq',
IE: 'Ireland',
IM: 'Isle Of Man',
IL: 'Israel',
IT: 'Italy',
JM: 'Jamaica',
JP: 'Japan',
JE: 'Jersey',
JO: 'Jordan',
KZ: 'Kazakhstan',
KE: 'Kenya',
KI: 'Kiribati',
KR: 'Korea',
KW: 'Kuwait',
KG: 'Kyrgyzstan',
LA: "Lao People's Democratic Republic",
LV: 'Latvia',
LB: 'Lebanon',
LS: 'Lesotho',
LR: 'Liberia',
LY: 'Libyan Arab Jamahiriya',
LI: 'Liechtenstein',
LT: 'Lithuania',
LU: 'Luxembourg',
MO: 'Macao',
MK: 'Macedonia',
MG: 'Madagascar',
MW: 'Malawi',
MY: 'Malaysia',
MV: 'Maldives',
ML: 'Mali',
MT: 'Malta',
MH: 'Marshall Islands',
MQ: 'Martinique',
MR: 'Mauritania',
MU: 'Mauritius',
YT: 'Mayotte',
MX: 'Mexico',
FM: 'Micronesia, Federated States Of',
MD: 'Moldova',
MC: 'Monaco',
MN: 'Mongolia',
ME: 'Montenegro',
MS: 'Montserrat',
MA: 'Morocco',
MZ: 'Mozambique',
MM: 'Myanmar',
NA: 'Namibia',
NR: 'Nauru',
NP: 'Nepal',
NL: 'Netherlands',
AN: 'Netherlands Antilles',
NC: 'New Caledonia',
NZ: 'New Zealand',
NI: 'Nicaragua',
NE: 'Niger',
NG: 'Nigeria',
NU: 'Niue',
NF: 'Norfolk Island',
MP: 'Northern Mariana Islands',
NO: 'Norway',
OM: 'Oman',
PK: 'Pakistan',
PW: 'Palau',
PS: 'Palestinian Territory, Occupied',
PA: 'Panama',
PG: 'Papua New Guinea',
PY: 'Paraguay',
PE: 'Peru',
PH: 'Philippines',
PN: 'Pitcairn',
PL: 'Poland',
PT: 'Portugal',
PR: 'Puerto Rico',
QA: 'Qatar',
RE: 'Reunion',
RO: 'Romania',
RU: 'Russian Federation',
RW: 'Rwanda',
BL: 'Saint Barthelemy',
SH: 'Saint Helena',
KN: 'Saint Kitts And Nevis',
LC: 'Saint Lucia',
MF: 'Saint Martin',
PM: 'Saint Pierre And Miquelon',
VC: 'Saint Vincent And Grenadines',
WS: 'Samoa',
SM: 'San Marino',
ST: 'Sao Tome And Principe',
SA: 'Saudi Arabia',
SN: 'Senegal',
RS: 'Serbia',
SC: 'Seychelles',
SL: 'Sierra Leone',
SG: 'Singapore',
SK: 'Slovakia',
SI: 'Slovenia',
SB: 'Solomon Islands',
SO: 'Somalia',
ZA: 'South Africa',
GS: 'South Georgia And Sandwich Isl.',
ES: 'Spain',
LK: 'Sri Lanka',
SD: 'Sudan',
SR: 'Suriname',
SJ: 'Svalbard And Jan Mayen',
SZ: 'Swaziland',
SE: 'Sweden',
CH: 'Switzerland',
SY: 'Syrian Arab Republic',
TW: 'Taiwan',
TJ: 'Tajikistan',
TZ: 'Tanzania',
TH: 'Thailand',
TL: 'Timor-Leste',
TG: 'Togo',
TK: 'Tokelau',
TO: 'Tonga',
TT: 'Trinidad And Tobago',
TN: 'Tunisia',
TR: 'Turkey',
TM: 'Turkmenistan',
TC: 'Turks And Caicos Islands',
TV: 'Tuvalu',
UG: 'Uganda',
UA: 'Ukraine',
AE: 'United Arab Emirates',
GB: 'United Kingdom',
US: 'United States',
UM: 'United States Outlying Islands',
UY: 'Uruguay',
UZ: 'Uzbekistan',
VU: 'Vanuatu',
VE: 'Venezuela',
VN: 'Viet Nam',
VG: 'Virgin Islands, British',
VI: 'Virgin Islands, U.S.',
WF: 'Wallis And Futuna',
EH: 'Western Sahara',
YE: 'Yemen',
ZM: 'Zambia',
ZW: 'Zimbabwe'
};
export function getCountryName(countryCode) {
if (isoCountries.hasOwnProperty(countryCode)) {
return isoCountries[countryCode];
} else {
return countryCode;
}
}
export function cleanTagIds(raw) {
return raw.map(function (id) {
return id.trim();
}) // Trim each ID entry to remove whitespace
.filter(function (id) {
return /^\d+$/.test(id);
}) // Use a regular expression to ensure the ID is entirely numeric.
.map(function (id) {
return Number(id);
}); // Convert the remaining, valid ID entries into numbers
}
export function getMerchiSourceJobTags() {
if (typeof localStorage !== 'undefined' && localStorage !== null) {
var merchiSource = localStorage.getItem('merchi_source');
if (merchiSource) {
var ids = cleanTagIds(merchiSource.split(','));
return ids.map(function (id) {
return {
id: id
};
});
}
// If "merchi_source" is not found in localStorage, return an empty array.
return [];
}
return [];
}
export function sortByPosition(options) {
return options.map(function (obj) {
var position = typeof obj.position === 'string' ? parseInt(obj.position, 10) : obj.position;
return _objectSpread(_objectSpread({}, obj), {}, {
position: typeof position === 'number' ? position : 0
});
}).sort(function (a, b) {
var aPosition = typeof a.position === 'number' ? a.position : 0;
var bPosition = typeof b.position === 'number' ? b.position : 0;
return aPosition - bPosition;
});
}
export function cleanFormVariationJson(variation) {
var variationJson = null;
var rawJson = variation === null || variation === void 0 ? void 0 : variation.json;
if (typeof rawJson === 'string' && rawJson && rawJson !== 'undefined') {
try {
variationJson = JSON.parse(rawJson);
} catch (_unused) {
variationJson = null;
}
}
if (!variationJson) {
var _ref = variation || {},
json = _ref.json,
rest = _objectWithoutProperties(_ref, _excluded);
variationJson = rest;
}
var cleanVariation = _objectSpread(_objectSpread({}, variationJson), {}, {
value: variation.value,
variationFiles: variation.variationFiles || []
});
if (cleanVariation.id) {
delete cleanVariation.id;
}
if (cleanVariation.variationArrayFieldId) {
delete cleanVariation.variationArrayFieldId;
}
return cleanVariation;
}
export function cleanJobVariationsAndGroups(jobJson) {
var variations = jobJson.variations,
variationsGroups = jobJson.variationsGroups;
var hasGroups = Boolean(variationsGroups && variationsGroups.length);
var hasVariations = Boolean(variations && variations.length);
// Loop over individual variations and check if the variation is a json string, if it is convert it to an object
if (hasVariations) {
for (var i = 0; i < variations.length; i++) {
variations[i] = cleanFormVariationJson(variations[i]);
}
jobJson.variations = variations;
}
if (hasGroups) {
for (var _i = 0; _i < variationsGroups.length; _i++) {
// Set default quantity if not present
var group = variationsGroups[_i];
if (!group.quantity) {
group.quantity = 0;
}
// Handle variations within the group - convert JSON strings to objects
if (group.variations && Array.isArray(group.variations)) {
for (var j = 0; j < group.variations.length; j++) {
group.variations[j] = cleanFormVariationJson(group.variations[j]);
}
}
}
jobJson.variationsGroups = variationsGroups;
}
return jobJson;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXJjaGkiLCJmb3JtYXRDdXJyZW5jeSIsIlByb2R1Y3RUeXBlIiwicG5nT3B0aW9uTm90Rm91bmQiLCJyZXF1aXJlIiwicmVuZGVyU2luZ2xlQ29zdEluZGljYXRpb24iLCJjb3N0IiwiY3VycmVuY3lDb2RlIiwiY29zdFR5cGVTdHJpbmciLCJjdXJyZW5jeU9wdGlvbnMiLCJjdXJyZW5jeSIsInNob3dDb2RlSWZOb1N5bWJvbCIsImNvc3RTdHJpbmciLCJwYXJzZUZsb2F0IiwiY29zdERldGFpbCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJvbmNlT2ZmQ29zdERlc2NyaXB0aW9uIiwidW5pdENvc3REZXNjcmlwdGlvbiIsInZhcmlhdGlvbkZpZWxkQ29zdERldGFpbCIsInZhcmlhdGlvbkZpZWxkIiwidmFyaWF0aW9uQ29zdCIsInZhcmlhdGlvblVuaXRDb3N0IiwidmFyaWF0aW9uQ29zdERldGFpbCIsInZhcmlhdGlvbiIsInZhcmlhdGlvbkZpZWxkT3B0aW9uQ29zdERldGFpbCIsIm9wdGlvbiIsInNwbGl0U2VsZWN0ZWRPcHRpb25zIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJzcGxpdCIsInN1cHBsaWVyU2VsbGVyRWRpdGFibGVQcm9kdWN0VHlwZXMiLCJTVVBQTElFUl9NT0QiLCJDTE9ORURfU1VQUExJRVJfTU9EIiwib3B0aW9uSW1hZ2VVcmwiLCJpbWFnZSIsImltYWdlTm90Rm91bmQiLCJzcmMiLCJsaW5rZWRGaWxlIiwidmlld1VybCIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZU1hcHBpbmciLCJhbGxvd0ZpbGVKcGVnIiwiYWxsb3dGaWxlR2lmIiwiYWxsb3dGaWxlUGRmIiwiYWxsb3dGaWxlUG5nIiwiYWxsb3dGaWxlQWkiLCJhbGxvd2VkVHlwZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiYXR0cmlidXRlTmFtZSIsIm1hcCIsImpvaW4iLCJtZXJjaGkiLCJidWlsZEVtcHR5VmFyaWF0aW9uR3JvdXAiLCJwcm9kdWN0IiwicHJvZHVjdEVudCIsIlByb2R1Y3QiLCJmcm9tSnNvbiIsIl9vYmplY3RTcHJlYWQiLCJtYWtlRGlydHkiLCJuZXdHcm91cCIsImdyb3VwQ29zdCIsInF1YW50aXR5IiwidG9Kc29uIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJwcm9kdWN0VHlwZSIsIlN0cmluZyIsIlNVUFBMSUVSX1JFU0VMTF9NT0QiLCJpbmNsdWRlcyIsImlzUHJvZHVjdFR5cGVGaWxlRG93bmxvYWQiLCJwYXJzZUludCIsIlNFTExFUl9GSUxFX0RPV05MT0FEIiwiaXNQcm9kdWN0RmlsZURvd25sb2FkIiwiaXNQcm9kdWN0TGVhZEZvcm0iLCJMRUFEX0ZPUk0iLCJpc29Db3VudHJpZXMiLCJBRiIsIkFYIiwiQUwiLCJEWiIsIkFTIiwiQUQiLCJBTyIsIkFJIiwiQVEiLCJBRyIsIkFSIiwiQU0iLCJBVyIsIkFVIiwiQVQiLCJBWiIsIkJTIiwiQkgiLCJCRCIsIkJCIiwiQlkiLCJCRSIsIkJaIiwiQkoiLCJCTSIsIkJUIiwiQk8iLCJCQSIsIkJXIiwiQlYiLCJCUiIsIklPIiwiQk4iLCJCRyIsIkJGIiwiQkkiLCJLSCIsIkNNIiwiQ0EiLCJDViIsIktZIiwiQ0YiLCJURCIsIkNMIiwiQ04iLCJDWCIsIkNDIiwiQ08iLCJLTSIsIkNHIiwiQ0QiLCJDSyIsIkNSIiwiQ0kiLCJIUiIsIkNVIiwiQ1kiLCJDWiIsIkRLIiwiREoiLCJETSIsIkRPIiwiRUMiLCJFRyIsIlNWIiwiR1EiLCJFUiIsIkVFIiwiRVQiLCJGSyIsIkZPIiwiRkoiLCJGSSIsIkZSIiwiR0YiLCJQRiIsIlRGIiwiR0EiLCJHTSIsIkdFIiwiREUiLCJHSCIsIkdJIiwiR1IiLCJHTCIsIkdEIiwiR1AiLCJHVSIsIkdUIiwiR0ciLCJHTiIsIkdXIiwiR1kiLCJIVCIsIkhNIiwiVkEiLCJITiIsIkhLIiwiSFUiLCJJUyIsIklOIiwiSUQiLCJJUiIsIklRIiwiSUUiLCJJTSIsIklMIiwiSVQiLCJKTSIsIkpQIiwiSkUiLCJKTyIsIktaIiwiS0UiLCJLSSIsIktSIiwiS1ciLCJLRyIsIkxBIiwiTFYiLCJMQiIsIkxTIiwiTFIiLCJMWSIsIkxJIiwiTFQiLCJMVSIsIk1PIiwiTUsiLCJNRyIsIk1XIiwiTVkiLCJNViIsIk1MIiwiTVQiLCJNSCIsIk1RIiwiTVIiLCJNVSIsIllUIiwiTVgiLCJGTSIsIk1EIiwiTUMiLCJNTiIsIk1FIiwiTVMiLCJNQSIsIk1aIiwiTU0iLCJOQSIsIk5SIiwiTlAiLCJOTCIsIkFOIiwiTkMiLCJOWiIsIk5JIiwiTkUiLCJORyIsIk5VIiwiTkYiLCJNUCIsIk5PIiwiT00iLCJQSyIsIlBXIiwiUFMiLCJQQSIsIlBHIiwiUFkiLCJQRSIsIlBIIiwiUE4iLCJQTCIsIlBUIiwiUFIiLCJRQSIsIlJFIiwiUk8iLCJSVSIsIlJXIiwiQkwiLCJTSCIsIktOIiwiTEMiLCJNRiIsIlBNIiwiVkMiLCJXUyIsIlNNIiwiU1QiLCJTQSIsIlNOIiwiUlMiLCJTQyIsIlNMIiwiU0ciLCJTSyIsIlNJIiwiU0IiLCJTTyIsIlpBIiwiR1MiLCJFUyIsIkxLIiwiU0QiLCJTUiIsIlNKIiwiU1oiLCJTRSIsIkNIIiwiU1kiLCJUVyIsIlRKIiwiVFoiLCJUSCIsIlRMIiwiVEciLCJUSyIsIlRPIiwiVFQiLCJUTiIsIlRSIiwiVE0iLCJUQyIsIlRWIiwiVUciLCJVQSIsIkFFIiwiR0IiLCJVUyIsIlVNIiwiVVkiLCJVWiIsIlZVIiwiVkUiLCJWTiIsIlZHIiwiVkkiLCJXRiIsIkVIIiwiWUUiLCJaTSIsIlpXIiwiZ2V0Q291bnRyeU5hbWUiLCJjb3VudHJ5Q29kZSIsImhhc093blByb3BlcnR5IiwiY2xlYW5UYWdJZHMiLCJyYXciLCJpZCIsInRyaW0iLCJ0ZXN0IiwiTnVtYmVyIiwiZ2V0TWVyY2hpU291cmNlSm9iVGFncyIsImxvY2FsU3RvcmFnZSIsIm1lcmNoaVNvdXJjZSIsImdldEl0ZW0iLCJpZHMiLCJzb3J0QnlQb3NpdGlvbiIsIm9wdGlvbnMiLCJvYmoiLCJwb3NpdGlvbiIsInNvcnQiLCJhIiwiYiIsImFQb3NpdGlvbiIsImJQb3NpdGlvbiIsImNsZWFuRm9ybVZhcmlhdGlvbkpzb24iLCJ2YXJpYXRpb25Kc29uIiwicmF3SnNvbiIsImpzb24iLCJKU09OIiwicGFyc2UiLCJfdW51c2VkIiwiX3JlZiIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjbGVhblZhcmlhdGlvbiIsInZhcmlhdGlvbkZpbGVzIiwidmFyaWF0aW9uQXJyYXlGaWVsZElkIiwiY2xlYW5Kb2JWYXJpYXRpb25zQW5kR3JvdXBzIiwiam9iSnNvbiIsInZhcmlhdGlvbnMiLCJ2YXJpYXRpb25zR3JvdXBzIiwiaGFzR3JvdXBzIiwiQm9vbGVhbiIsImxlbmd0aCIsImhhc1ZhcmlhdGlvbnMiLCJpIiwiZ3JvdXAiLCJqIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVyY2hpIH0gZnJvbSAnbWVyY2hpX3Nka190cyc7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnLi4vdXRpbHMvY3VycmVuY3knO1xyXG5pbXBvcnQgeyBQcm9kdWN0VHlwZSB9IGZyb20gJy4uL3V0aWxzL3R5cGVzJztcclxuY29uc3QgcG5nT3B0aW9uTm90Rm91bmQgPSByZXF1aXJlKCcuLi9pbWFnZXMvcHJvZHVjdC1ub3QtZm91bmQucG5nJyk7XHJcblxyXG5mdW5jdGlvbiByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihcclxuICBjb3N0OiBhbnksXHJcbiAgY3VycmVuY3lDb2RlOiBhbnksXHJcbiAgY29zdFR5cGVTdHJpbmc6IHN0cmluZ1xyXG4pIHtcclxuICBsZXQgY3VycmVuY3lPcHRpb25zID0geyBjdXJyZW5jeTogY3VycmVuY3lDb2RlLCBzaG93Q29kZUlmTm9TeW1ib2w6IGZhbHNlIH07XHJcbiAgbGV0IGNvc3RTdHJpbmcgPSAnJztcclxuXHJcbiAgaWYgKGNvc3QpIHtcclxuICAgIGNvc3RTdHJpbmcgPSBmb3JtYXRDdXJyZW5jeShwYXJzZUZsb2F0KGNvc3QpLCBjdXJyZW5jeU9wdGlvbnMpO1xyXG4gICAgY29zdFN0cmluZyA9ICcgKyAnICsgY29zdFN0cmluZyArICcgJyArIGNvc3RUeXBlU3RyaW5nO1xyXG4gIH1cclxuICByZXR1cm4gY29zdFN0cmluZztcclxufVxyXG5cclxuY29uc3QgY29zdERldGFpbCA9IChvbmNlT2ZmQ29zdDogYW55LCB1bml0Q29zdDogYW55LCBjdXJyZW5jeUNvZGU6IHN0cmluZykgPT4ge1xyXG4gIGNvbnN0IG9uY2VPZmZDb3N0RGVzY3JpcHRpb24gPSByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihcclxuICAgIHBhcnNlRmxvYXQob25jZU9mZkNvc3QpLFxyXG4gICAgY3VycmVuY3lDb2RlLFxyXG4gICAgJ29uY2Ugb2ZmJ1xyXG4gICk7XHJcbiAgY29uc3QgdW5pdENvc3REZXNjcmlwdGlvbiA9IHJlbmRlclNpbmdsZUNvc3RJbmRpY2F0aW9uKFxyXG4gICAgcGFyc2VGbG9hdCh1bml0Q29zdCksXHJcbiAgICBjdXJyZW5jeUNvZGUsXHJcbiAgICAncGVyIHVuaXQnXHJcbiAgKTtcclxuICByZXR1cm4gb25jZU9mZkNvc3REZXNjcmlwdGlvbiArIHVuaXRDb3N0RGVzY3JpcHRpb247XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFyaWF0aW9uRmllbGRDb3N0RGV0YWlsKHZhcmlhdGlvbkZpZWxkOiBhbnkpIHtcclxuICBjb25zdCB7IHZhcmlhdGlvbkNvc3QsIHZhcmlhdGlvblVuaXRDb3N0LCBjdXJyZW5jeSB9ID0gdmFyaWF0aW9uRmllbGQ7XHJcbiAgcmV0dXJuIGNvc3REZXRhaWwodmFyaWF0aW9uQ29zdCEsIHZhcmlhdGlvblVuaXRDb3N0ISwgY3VycmVuY3khKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvbkNvc3REZXRhaWwodmFyaWF0aW9uOiBhbnkpIHtcclxuICBjb25zdCB7IG9uY2VPZmZDb3N0LCB1bml0Q29zdCwgY3VycmVuY3kgfSA9IHZhcmlhdGlvbjtcclxuICByZXR1cm4gY29zdERldGFpbChvbmNlT2ZmQ29zdCEsIHVuaXRDb3N0ISwgY3VycmVuY3khKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvbkZpZWxkT3B0aW9uQ29zdERldGFpbChvcHRpb246IGFueSkge1xyXG4gIGNvbnN0IHsgY3VycmVuY3ksIG9uY2VPZmZDb3N0LCB1bml0Q29zdCB9ID0gb3B0aW9uO1xyXG4gIHJldHVybiBjb3N0RGV0YWlsKG9uY2VPZmZDb3N0ISwgdW5pdENvc3QhLCBjdXJyZW5jeSEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRTZWxlY3RlZE9wdGlvbnModmFsdWU6IGFueSkge1xyXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJyk7XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHN1cHBsaWVyU2VsbGVyRWRpdGFibGVQcm9kdWN0VHlwZXM6IEFycmF5PG51bWJlcj4gPSBbXHJcbiAgUHJvZHVjdFR5cGUuU1VQUExJRVJfTU9ELFxyXG4gIFByb2R1Y3RUeXBlLkNMT05FRF9TVVBQTElFUl9NT0QsXHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uSW1hZ2VVcmwob3B0aW9uOiBhbnkpIHtcclxuICBjb25zdCBpbWFnZSA9IHBuZ09wdGlvbk5vdEZvdW5kID8gKHBuZ09wdGlvbk5vdEZvdW5kLmRlZmF1bHQgfHwgcG5nT3B0aW9uTm90Rm91bmQpIDogJyc7XHJcbiAgY29uc3QgaW1hZ2VOb3RGb3VuZCA9IGltYWdlID8gKGltYWdlLnNyYyB8fCBpbWFnZSkgOiAnJztcclxuICByZXR1cm4gb3B0aW9uLmxpbmtlZEZpbGVcclxuICAgID8gb3B0aW9uLmxpbmtlZEZpbGVcclxuICAgICAgPyBvcHRpb24ubGlua2VkRmlsZS52aWV3VXJsXHJcbiAgICAgIDogaW1hZ2VOb3RGb3VuZFxyXG4gICAgOiBpbWFnZU5vdEZvdW5kO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dlZEZpbGVUeXBlcyh2YXJpYXRpb25GaWVsZDogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBmaWxlVHlwZU1hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICBhbGxvd0ZpbGVKcGVnOiAnLmpwZWcnLFxyXG4gICAgYWxsb3dGaWxlR2lmOiAnLmdpZicsXHJcbiAgICBhbGxvd0ZpbGVQZGY6ICcucGRmJyxcclxuICAgIGFsbG93RmlsZVBuZzogJy5wbmcnLFxyXG4gICAgYWxsb3dGaWxlQWk6ICcuYWknLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhmaWxlVHlwZU1hcHBpbmcpXHJcbiAgICAuZmlsdGVyKChhdHRyaWJ1dGVOYW1lKSA9PiB2YXJpYXRpb25GaWVsZFthdHRyaWJ1dGVOYW1lXSlcclxuICAgIC5tYXAoKGF0dHJpYnV0ZU5hbWUpID0+IGZpbGVUeXBlTWFwcGluZ1thdHRyaWJ1dGVOYW1lXSk7XHJcblxyXG4gIHJldHVybiBhbGxvd2VkVHlwZXMuam9pbignLCcpO1xyXG59XHJcblxyXG5jb25zdCBtZXJjaGkgPSBuZXcgTWVyY2hpKCk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXB0eVZhcmlhdGlvbkdyb3VwKHByb2R1Y3Q6IGFueSkge1xyXG4gIGNvbnN0IHByb2R1Y3RFbnQgPSBuZXcgbWVyY2hpLlByb2R1Y3QoKTtcclxuICBwcm9kdWN0RW50LmZyb21Kc29uKHsuLi5wcm9kdWN0fSwgeyBtYWtlRGlydHk6IGZhbHNlfSk7XHJcbiAgY29uc3QgbmV3R3JvdXAgPSBuZXcgcHJvZHVjdEVudC5idWlsZEVtcHR5VmFyaWF0aW9uR3JvdXAoKTtcclxuICBuZXdHcm91cC5ncm91cENvc3QgPSAwO1xyXG4gIG5ld0dyb3VwLnF1YW50aXR5ID0gMDtcclxuICByZXR1cm4gbmV3R3JvdXAudG9Kc29uKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RTdXBwbGllck1PRChwcm9kdWN0OiBhbnkpIHtcclxuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZTtcclxuICByZXR1cm4gKFxyXG4gICAgcHJvZHVjdCAmJlxyXG4gICAgW1xyXG4gICAgICBTdHJpbmcoUHJvZHVjdFR5cGUuU1VQUExJRVJfTU9EKSxcclxuICAgICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX1JFU0VMTF9NT0QpLFxyXG4gICAgXS5pbmNsdWRlcyhTdHJpbmcocHJvZHVjdFR5cGUpKVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RUeXBlRmlsZURvd25sb2FkKHByb2R1Y3RUeXBlOiBhbnkpIHtcclxuICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdFR5cGUsIDEwKSA9PT0gUHJvZHVjdFR5cGUuU0VMTEVSX0ZJTEVfRE9XTkxPQUQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RGaWxlRG93bmxvYWQocHJvZHVjdDogYW55KSB7XHJcbiAgY29uc3QgeyBwcm9kdWN0VHlwZSB9ID0gcHJvZHVjdDtcclxuICByZXR1cm4gaXNQcm9kdWN0VHlwZUZpbGVEb3dubG9hZChwcm9kdWN0VHlwZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RMZWFkRm9ybShwcm9kdWN0OiBhbnkpIHtcclxuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZTtcclxuICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdFR5cGUsIDEwKSA9PT0gUHJvZHVjdFR5cGUuTEVBRF9GT1JNO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNvQ291bnRyaWVzOiBhbnkgPSB7XHJcbiAgQUY6ICdBZmdoYW5pc3RhbicsXHJcbiAgQVg6ICdBbGFuZCBJc2xhbmRzJyxcclxuICBBTDogJ0FsYmFuaWEnLFxyXG4gIERaOiAnQWxnZXJpYScsXHJcbiAgQVM6ICdBbWVyaWNhbiBTYW1vYScsXHJcbiAgQUQ6ICdBbmRvcnJhJyxcclxuICBBTzogJ0FuZ29sYScsXHJcbiAgQUk6ICdBbmd1aWxsYScsXHJcbiAgQVE6ICdBbnRhcmN0aWNhJyxcclxuICBBRzogJ0FudGlndWEgQW5kIEJhcmJ1ZGEnLFxyXG4gIEFSOiAnQXJnZW50aW5hJyxcclxuICBBTTogJ0FybWVuaWEnLFxyXG4gIEFXOiAnQXJ1YmEnLFxyXG4gIEFVOiAnQXVzdHJhbGlhJyxcclxuICBBVDogJ0F1c3RyaWEnLFxyXG4gIEFaOiAnQXplcmJhaWphbicsXHJcbiAgQlM6ICdCYWhhbWFzJyxcclxuICBCSDogJ0JhaHJhaW4nLFxyXG4gIEJEOiAnQmFuZ2xhZGVzaCcsXHJcbiAgQkI6ICdCYXJiYWRvcycsXHJcbiAgQlk6ICdCZWxhcnVzJyxcclxuICBCRTogJ0JlbGdpdW0nLFxyXG4gIEJaOiAnQmVsaXplJyxcclxuICBCSjogJ0JlbmluJyxcclxuICBCTTogJ0Jlcm11ZGEnLFxyXG4gIEJUOiAnQmh1dGFuJyxcclxuICBCTzogJ0JvbGl2aWEnLFxyXG4gIEJBOiAnQm9zbmlhIEFuZCBIZXJ6ZWdvdmluYScsXHJcbiAgQlc6ICdCb3Rzd2FuYScsXHJcbiAgQlY6ICdCb3V2ZXQgSXNsYW5kJyxcclxuICBCUjogJ0JyYXppbCcsXHJcbiAgSU86ICdCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnknLFxyXG4gIEJOOiAnQnJ1bmVpIERhcnVzc2FsYW0nLFxyXG4gIEJHOiAnQnVsZ2FyaWEnLFxyXG4gIEJGOiAnQnVya2luYSBGYXNvJyxcclxuICBCSTogJ0J1cnVuZGknLFxyXG4gIEtIOiAnQ2FtYm9kaWEnLFxyXG4gIENNOiAnQ2FtZXJvb24nLFxyXG4gIENBOiAnQ2FuYWRhJyxcclxuICBDVjogJ0NhcGUgVmVyZGUnLFxyXG4gIEtZOiAnQ2F5bWFuIElzbGFuZHMnLFxyXG4gIENGOiAnQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljJyxcclxuICBURDogJ0NoYWQnLFxyXG4gIENMOiAnQ2hpbGUnLFxyXG4gIENOOiAnQ2hpbmEnLFxyXG4gIENYOiAnQ2hyaXN0bWFzIElzbGFuZCcsXHJcbiAgQ0M6ICdDb2NvcyAoS2VlbGluZykgSXNsYW5kcycsXHJcbiAgQ086ICdDb2xvbWJpYScsXHJcbiAgS006ICdDb21vcm9zJyxcclxuICBDRzogJ0NvbmdvJyxcclxuICBDRDogJ0NvbmdvLCBEZW1vY3JhdGljIFJlcHVibGljJyxcclxuICBDSzogJ0Nvb2sgSXNsYW5kcycsXHJcbiAgQ1I6ICdDb3N0YSBSaWNhJyxcclxuICBDSTogXCJDb3RlIEQnSXZvaXJlXCIsXHJcbiAgSFI6ICdDcm9hdGlhJyxcclxuICBDVTogJ0N1YmEnLFxyXG4gIENZOiAnQ3lwcnVzJyxcclxuICBDWjogJ0N6ZWNoIFJlcHVibGljJyxcclxuICBESzogJ0Rlbm1hcmsnLFxyXG4gIERKOiAnRGppYm91dGknLFxyXG4gIERNOiAnRG9taW5pY2EnLFxyXG4gIERPOiAnRG9taW5pY2FuIFJlcHVibGljJyxcclxuICBFQzogJ0VjdWFkb3InLFxyXG4gIEVHOiAnRWd5cHQnLFxyXG4gIFNWOiAnRWwgU2FsdmFkb3InLFxyXG4gIEdROiAnRXF1YXRvcmlhbCBHdWluZWEnLFxyXG4gIEVSOiAnRXJpdHJlYScsXHJcbiAgRUU6ICdFc3RvbmlhJyxcclxuICBFVDogJ0V0aGlvcGlhJyxcclxuICBGSzogJ0ZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKScsXHJcbiAgRk86ICdGYXJvZSBJc2xhbmRzJyxcclxuICBGSjogJ0ZpamknLFxyXG4gIEZJOiAnRmlubGFuZCcsXHJcbiAgRlI6ICdGcmFuY2UnLFxyXG4gIEdGOiAnRnJlbmNoIEd1aWFuYScsXHJcbiAgUEY6ICdGcmVuY2ggUG9seW5lc2lhJyxcclxuICBURjogJ0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcycsXHJcbiAgR0E6ICdHYWJvbicsXHJcbiAgR006ICdHYW1iaWEnLFxyXG4gIEdFOiAnR2VvcmdpYScsXHJcbiAgREU6ICdHZXJtYW55JyxcclxuICBHSDogJ0doYW5hJyxcclxuICBHSTogJ0dpYnJhbHRhcicsXHJcbiAgR1I6ICdHcmVlY2UnLFxyXG4gIEdMOiAnR3JlZW5sYW5kJyxcclxuICBHRDogJ0dyZW5hZGEnLFxyXG4gIEdQOiAnR3VhZGVsb3VwZScsXHJcbiAgR1U6ICdHdWFtJyxcclxuICBHVDogJ0d1YXRlbWFsYScsXHJcbiAgR0c6ICdHdWVybnNleScsXHJcbiAgR046ICdHdWluZWEnLFxyXG4gIEdXOiAnR3VpbmVhLUJpc3NhdScsXHJcbiAgR1k6ICdHdXlhbmEnLFxyXG4gIEhUOiAnSGFpdGknLFxyXG4gIEhNOiAnSGVhcmQgSXNsYW5kICYgTWNkb25hbGQgSXNsYW5kcycsXHJcbiAgVkE6ICdIb2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKScsXHJcbiAgSE46ICdIb25kdXJhcycsXHJcbiAgSEs6ICdIb25nIEtvbmcnLFxyXG4gIEhVOiAnSHVuZ2FyeScsXHJcbiAgSVM6ICdJY2VsYW5kJyxcclxuICBJTjogJ0luZGlhJyxcclxuICBJRDogJ0luZG9uZXNpYScsXHJcbiAgSVI6ICdJcmFuLCBJc2xhbWljIFJlcHVibGljIE9mJyxcclxuICBJUTogJ0lyYXEnLFxyXG4gIElFOiAnSXJlbGFuZCcsXHJcbiAgSU06ICdJc2xlIE9mIE1hbicsXHJcbiAgSUw6ICdJc3JhZWwnLFxyXG4gIElUOiAnSXRhbHknLFxyXG4gIEpNOiAnSmFtYWljYScsXHJcbiAgSlA6ICdKYXBhbicsXHJcbiAgSkU6ICdKZXJzZXknLFxyXG4gIEpPOiAnSm9yZGFuJyxcclxuICBLWjogJ0themFraHN0YW4nLFxyXG4gIEtFOiAnS2VueWEnLFxyXG4gIEtJOiAnS2lyaWJhdGknLFxyXG4gIEtSOiAnS29yZWEnLFxyXG4gIEtXOiAnS3V3YWl0JyxcclxuICBLRzogJ0t5cmd5enN0YW4nLFxyXG4gIExBOiBcIkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljXCIsXHJcbiAgTFY6ICdMYXR2aWEnLFxyXG4gIExCOiAnTGViYW5vbicsXHJcbiAgTFM6ICdMZXNvdGhvJyxcclxuICBMUjogJ0xpYmVyaWEnLFxyXG4gIExZOiAnTGlieWFuIEFyYWIgSmFtYWhpcml5YScsXHJcbiAgTEk6ICdMaWVjaHRlbnN0ZWluJyxcclxuICBMVDogJ0xpdGh1YW5pYScsXHJcbiAgTFU6ICdMdXhlbWJvdXJnJyxcclxuICBNTzogJ01hY2FvJyxcclxuICBNSzogJ01hY2Vkb25pYScsXHJcbiAgTUc6ICdNYWRhZ2FzY2FyJyxcclxuICBNVzogJ01hbGF3aScsXHJcbiAgTVk6ICdNYWxheXNpYScsXHJcbiAgTVY6ICdNYWxkaXZlcycsXHJcbiAgTUw6ICdNYWxpJyxcclxuICBNVDogJ01hbHRhJyxcclxuICBNSDogJ01hcnNoYWxsIElzbGFuZHMnLFxyXG4gIE1ROiAnTWFydGluaXF1ZScsXHJcbiAgTVI6ICdNYXVyaXRhbmlhJyxcclxuICBNVTogJ01hdXJpdGl1cycsXHJcbiAgWVQ6ICdNYXlvdHRlJyxcclxuICBNWDogJ01leGljbycsXHJcbiAgRk06ICdNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIE9mJyxcclxuICBNRDogJ01vbGRvdmEnLFxyXG4gIE1DOiAnTW9uYWNvJyxcclxuICBNTjogJ01vbmdvbGlhJyxcclxuICBNRTogJ01vbnRlbmVncm8nLFxyXG4gIE1TOiAnTW9udHNlcnJhdCcsXHJcbiAgTUE6ICdNb3JvY2NvJyxcclxuICBNWjogJ01vemFtYmlxdWUnLFxyXG4gIE1NOiAnTXlhbm1hcicsXHJcbiAgTkE6ICdOYW1pYmlhJyxcclxuICBOUjogJ05hdXJ1JyxcclxuICBOUDogJ05lcGFsJyxcclxuICBOTDogJ05ldGhlcmxhbmRzJyxcclxuICBBTjogJ05ldGhlcmxhbmRzIEFudGlsbGVzJyxcclxuICBOQzogJ05ldyBDYWxlZG9uaWEnLFxyXG4gIE5aOiAnTmV3IFplYWxhbmQnLFxyXG4gIE5JOiAnTmljYXJhZ3VhJyxcclxuICBORTogJ05pZ2VyJyxcclxuICBORzogJ05pZ2VyaWEnLFxyXG4gIE5VOiAnTml1ZScsXHJcbiAgTkY6ICdOb3Jmb2xrIElzbGFuZCcsXHJcbiAgTVA6ICdOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMnLFxyXG4gIE5POiAnTm9yd2F5JyxcclxuICBPTTogJ09tYW4nLFxyXG4gIFBLOiAnUGFraXN0YW4nLFxyXG4gIFBXOiAnUGFsYXUnLFxyXG4gIFBTOiAnUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZCcsXHJcbiAgUEE6ICdQYW5hbWEnLFxyXG4gIFBHOiAnUGFwdWEgTmV3IEd1aW5lYScsXHJcbiAgUFk6ICdQYXJhZ3VheScsXHJcbiAgUEU6ICdQZXJ1JyxcclxuICBQSDogJ1BoaWxpcHBpbmVzJyxcclxuICBQTjogJ1BpdGNhaXJuJyxcclxuICBQTDogJ1BvbGFuZCcsXHJcbiAgUFQ6ICdQb3J0dWdhbCcsXHJcbiAgUFI6ICdQdWVydG8gUmljbycsXHJcbiAgUUE6ICdRYXRhcicsXHJcbiAgUkU6ICdSZXVuaW9uJyxcclxuICBSTzogJ1JvbWFuaWEnLFxyXG4gIFJVOiAnUnVzc2lhbiBGZWRlcmF0aW9uJyxcclxuICBSVzogJ1J3YW5kYScsXHJcbiAgQkw6ICdTYWludCBCYXJ0aGVsZW15JyxcclxuICBTSDogJ1NhaW50IEhlbGVuYScsXHJcbiAgS046ICdTYWludCBLaXR0cyBBbmQgTmV2aXMnLFxyXG4gIExDOiAnU2FpbnQgTHVjaWEnLFxyXG4gIE1GOiAnU2FpbnQgTWFydGluJyxcclxuICBQTTogJ1NhaW50IFBpZXJyZSBBbmQgTWlxdWVsb24nLFxyXG4gIFZDOiAnU2FpbnQgVmluY2VudCBBbmQgR3JlbmFkaW5lcycsXHJcbiAgV1M6ICdTYW1vYScsXHJcbiAgU006ICdTYW4gTWFyaW5vJyxcclxuICBTVDogJ1NhbyBUb21lIEFuZCBQcmluY2lwZScsXHJcbiAgU0E6ICdTYXVkaSBBcmFiaWEnLFxyXG4gIFNOOiAnU2VuZWdhbCcsXHJcbiAgUlM6ICdTZXJiaWEnLFxyXG4gIFNDOiAnU2V5Y2hlbGxlcycsXHJcbiAgU0w6ICdTaWVycmEgTGVvbmUnLFxyXG4gIFNHOiAnU2luZ2Fwb3JlJyxcclxuICBTSzogJ1Nsb3Zha2lhJyxcclxuICBTSTogJ1Nsb3ZlbmlhJyxcclxuICBTQjogJ1NvbG9tb24gSXNsYW5kcycsXHJcbiAgU086ICdTb21hbGlhJyxcclxuICBaQTogJ1NvdXRoIEFmcmljYScsXHJcbiAgR1M6ICdTb3V0aCBHZW9yZ2lhIEFuZCBTYW5kd2ljaCBJc2wuJyxcclxuICBFUzogJ1NwYWluJyxcclxuICBMSzogJ1NyaSBMYW5rYScsXHJcbiAgU0Q6ICdTdWRhbicsXHJcbiAgU1I6ICdTdXJpbmFtZScsXHJcbiAgU0o6ICdTdmFsYmFyZCBBbmQgSmFuIE1heWVuJyxcclxuICBTWjogJ1N3YXppbGFuZCcsXHJcbiAgU0U6ICdTd2VkZW4nLFxyXG4gIENIOiAnU3dpdHplcmxhbmQnLFxyXG4gIFNZOiAnU3lyaWFuIEFyYWIgUmVwdWJsaWMnLFxyXG4gIFRXOiAnVGFpd2FuJyxcclxuICBUSjogJ1RhamlraXN0YW4nLFxyXG4gIFRaOiAnVGFuemFuaWEnLFxyXG4gIFRIOiAnVGhhaWxhbmQnLFxyXG4gIFRMOiAnVGltb3ItTGVzdGUnLFxyXG4gIFRHOiAnVG9nbycsXHJcbiAgVEs6ICdUb2tlbGF1JyxcclxuICBUTzogJ1RvbmdhJyxcclxuICBUVDogJ1RyaW5pZGFkIEFuZCBUb2JhZ28nLFxyXG4gIFROOiAnVHVuaXNpYScsXHJcbiAgVFI6ICdUdXJrZXknLFxyXG4gIFRNOiAnVHVya21lbmlzdGFuJyxcclxuICBUQzogJ1R1cmtzIEFuZCBDYWljb3MgSXNsYW5kcycsXHJcbiAgVFY6ICdUdXZhbHUnLFxyXG4gIFVHOiAnVWdhbmRhJyxcclxuICBVQTogJ1VrcmFpbmUnLFxyXG4gIEFFOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMnLFxyXG4gIEdCOiAnVW5pdGVkIEtpbmdkb20nLFxyXG4gIFVTOiAnVW5pdGVkIFN0YXRlcycsXHJcbiAgVU06ICdVbml0ZWQgU3RhdGVzIE91dGx5aW5nIElzbGFuZHMnLFxyXG4gIFVZOiAnVXJ1Z3VheScsXHJcbiAgVVo6ICdVemJla2lzdGFuJyxcclxuICBWVTogJ1ZhbnVhdHUnLFxyXG4gIFZFOiAnVmVuZXp1ZWxhJyxcclxuICBWTjogJ1ZpZXQgTmFtJyxcclxuICBWRzogJ1ZpcmdpbiBJc2xhbmRzLCBCcml0aXNoJyxcclxuICBWSTogJ1ZpcmdpbiBJc2xhbmRzLCBVLlMuJyxcclxuICBXRjogJ1dhbGxpcyBBbmQgRnV0dW5hJyxcclxuICBFSDogJ1dlc3Rlcm4gU2FoYXJhJyxcclxuICBZRTogJ1llbWVuJyxcclxuICBaTTogJ1phbWJpYScsXHJcbiAgWlc6ICdaaW1iYWJ3ZScsXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoY291bnRyeUNvZGU6IGFueSkge1xyXG4gIGlmIChpc29Db3VudHJpZXMuaGFzT3duUHJvcGVydHkoY291bnRyeUNvZGUpKSB7XHJcbiAgICByZXR1cm4gaXNvQ291bnRyaWVzW2NvdW50cnlDb2RlXTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGNvdW50cnlDb2RlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuVGFnSWRzKHJhdzogYW55W10pIHtcclxuICByZXR1cm4gcmF3Lm1hcChpZCA9PiBpZC50cmltKCkpICAgICAgICAgICAgLy8gVHJpbSBlYWNoIElEIGVudHJ5IHRvIHJlbW92ZSB3aGl0ZXNwYWNlXHJcbiAgICAuZmlsdGVyKGlkID0+IC9eXFxkKyQvLnRlc3QoaWQpKSAgLy8gVXNlIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGVuc3VyZSB0aGUgSUQgaXMgZW50aXJlbHkgbnVtZXJpYy5cclxuICAgIC5tYXAoaWQgPT4gTnVtYmVyKGlkKSk7ICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlbWFpbmluZywgdmFsaWQgSUQgZW50cmllcyBpbnRvIG51bWJlcnNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lcmNoaVNvdXJjZUpvYlRhZ3MoKTogYW55W10ge1xyXG4gIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UgIT09IG51bGwpIHtcclxuICAgIGNvbnN0IG1lcmNoaVNvdXJjZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZXJjaGlfc291cmNlJyk7XHJcblxyXG4gICAgaWYgKG1lcmNoaVNvdXJjZSkge1xyXG4gICAgICBjb25zdCBpZHMgPSBjbGVhblRhZ0lkcyhtZXJjaGlTb3VyY2Uuc3BsaXQoJywnKSk7XHJcbiAgICAgIHJldHVybiBpZHMubWFwKChpZDogbnVtYmVyKSA9PiAoeyBpZCB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBcIm1lcmNoaV9zb3VyY2VcIiBpcyBub3QgZm91bmQgaW4gbG9jYWxTdG9yYWdlLCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIHJldHVybiBbXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeVBvc2l0aW9uKG9wdGlvbnM6IGFueVtdKTogYW55W10ge1xyXG4gIHJldHVybiBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gdHlwZW9mIG9iai5wb3NpdGlvbiA9PT0gJ3N0cmluZydcclxuICAgICAgPyBwYXJzZUludChvYmoucG9zaXRpb24sIDEwKVxyXG4gICAgICA6IG9iai5wb3NpdGlvbjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLm9iaixcclxuICAgICAgcG9zaXRpb246IHR5cGVvZiBwb3NpdGlvbiA9PT0gJ251bWJlcicgPyBwb3NpdGlvbiA6IDAsXHJcbiAgICB9O1xyXG4gIH0pLnNvcnQoKGEsIGIpID0+IHtcclxuICAgIGNvbnN0IGFQb3NpdGlvbiA9IHR5cGVvZiBhLnBvc2l0aW9uID09PSAnbnVtYmVyJyA/IGEucG9zaXRpb24gOiAwO1xyXG4gICAgY29uc3QgYlBvc2l0aW9uID0gdHlwZW9mIGIucG9zaXRpb24gPT09ICdudW1iZXInID8gYi5wb3NpdGlvbiA6IDA7XHJcbiAgICByZXR1cm4gYVBvc2l0aW9uIC0gYlBvc2l0aW9uO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbih2YXJpYXRpb246IGFueSkge1xyXG4gIGxldCB2YXJpYXRpb25Kc29uOiBhbnkgPSBudWxsO1xyXG4gIGNvbnN0IHJhd0pzb24gPSB2YXJpYXRpb24/Lmpzb247XHJcbiAgaWYgKHR5cGVvZiByYXdKc29uID09PSAnc3RyaW5nJyAmJiByYXdKc29uICYmIHJhd0pzb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXJpYXRpb25Kc29uID0gSlNPTi5wYXJzZShyYXdKc29uKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB2YXJpYXRpb25Kc29uID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCF2YXJpYXRpb25Kc29uKSB7XHJcbiAgICBjb25zdCB7IGpzb24sIC4uLnJlc3QgfSA9IHZhcmlhdGlvbiB8fCB7fTtcclxuICAgIHZhcmlhdGlvbkpzb24gPSByZXN0O1xyXG4gIH1cclxuICBjb25zdCBjbGVhblZhcmlhdGlvbiA9IHtcclxuICAgIC4uLnZhcmlhdGlvbkpzb24sXHJcbiAgICB2YWx1ZTogdmFyaWF0aW9uLnZhbHVlLFxyXG4gICAgdmFyaWF0aW9uRmlsZXM6IHZhcmlhdGlvbi52YXJpYXRpb25GaWxlcyB8fCBbXSxcclxuICB9O1xyXG4gIGlmIChjbGVhblZhcmlhdGlvbi5pZCkge1xyXG4gICAgZGVsZXRlIGNsZWFuVmFyaWF0aW9uLmlkO1xyXG4gIH1cclxuICBpZiAoY2xlYW5WYXJpYXRpb24udmFyaWF0aW9uQXJyYXlGaWVsZElkKSB7XHJcbiAgICBkZWxldGUgY2xlYW5WYXJpYXRpb24udmFyaWF0aW9uQXJyYXlGaWVsZElkO1xyXG4gIH1cclxuICByZXR1cm4gY2xlYW5WYXJpYXRpb247XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHMoam9iSnNvbjogYW55KSB7XHJcbiAgY29uc3QgeyB2YXJpYXRpb25zLCB2YXJpYXRpb25zR3JvdXBzIH0gPSBqb2JKc29uO1xyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IEJvb2xlYW4odmFyaWF0aW9uc0dyb3VwcyAmJiB2YXJpYXRpb25zR3JvdXBzLmxlbmd0aCk7XHJcbiAgY29uc3QgaGFzVmFyaWF0aW9ucyA9IEJvb2xlYW4odmFyaWF0aW9ucyAmJiB2YXJpYXRpb25zLmxlbmd0aCk7XHJcbiAgXHJcbiAgLy8gTG9vcCBvdmVyIGluZGl2aWR1YWwgdmFyaWF0aW9ucyBhbmQgY2hlY2sgaWYgdGhlIHZhcmlhdGlvbiBpcyBhIGpzb24gc3RyaW5nLCBpZiBpdCBpcyBjb252ZXJ0IGl0IHRvIGFuIG9iamVjdFxyXG4gIGlmIChoYXNWYXJpYXRpb25zKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhcmlhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyaWF0aW9uc1tpXSA9IGNsZWFuRm9ybVZhcmlhdGlvbkpzb24odmFyaWF0aW9uc1tpXSk7XHJcbiAgICB9XHJcbiAgICBqb2JKc29uLnZhcmlhdGlvbnMgPSB2YXJpYXRpb25zO1xyXG4gIH1cclxuICBcclxuICBpZiAoaGFzR3JvdXBzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhcmlhdGlvbnNHcm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gU2V0IGRlZmF1bHQgcXVhbnRpdHkgaWYgbm90IHByZXNlbnRcclxuICAgICAgY29uc3QgZ3JvdXAgPSB2YXJpYXRpb25zR3JvdXBzW2ldO1xyXG4gICAgICBpZiAoIWdyb3VwLnF1YW50aXR5KSB7XHJcbiAgICAgICAgZ3JvdXAucXVhbnRpdHkgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgdmFyaWF0aW9ucyB3aXRoaW4gdGhlIGdyb3VwIC0gY29udmVydCBKU09OIHN0cmluZ3MgdG8gb2JqZWN0c1xyXG4gICAgICBpZiAoZ3JvdXAudmFyaWF0aW9ucyAmJiBBcnJheS5pc0FycmF5KGdyb3VwLnZhcmlhdGlvbnMpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBncm91cC52YXJpYXRpb25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBncm91cC52YXJpYXRpb25zW2pdID0gY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbihncm91cC52YXJpYXRpb25zW2pdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGpvYkpzb24udmFyaWF0aW9uc0dyb3VwcyA9IHZhcmlhdGlvbnNHcm91cHM7XHJcbiAgfVxyXG4gIFxyXG4gIHJldHVybiBqb2JKc29uO1xyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsU0FBU0EsTUFBTSxRQUFRLGVBQWU7QUFDdEMsU0FBU0MsY0FBYyxRQUFRLG1CQUFtQjtBQUNsRCxTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLElBQU1DLGlCQUFpQixHQUFHQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7QUFFcEUsU0FBU0MsMEJBQTBCQSxDQUNqQ0MsSUFBUyxFQUNUQyxZQUFpQixFQUNqQkMsY0FBc0IsRUFDdEI7RUFDQSxJQUFJQyxlQUFlLEdBQUc7SUFBRUMsUUFBUSxFQUFFSCxZQUFZO0lBQUVJLGtCQUFrQixFQUFFO0VBQU0sQ0FBQztFQUMzRSxJQUFJQyxVQUFVLEdBQUcsRUFBRTtFQUVuQixJQUFJTixJQUFJLEVBQUU7SUFDUk0sVUFBVSxHQUFHWCxjQUFjLENBQUNZLFVBQVUsQ0FBQ1AsSUFBSSxDQUFDLEVBQUVHLGVBQWUsQ0FBQztJQUM5REcsVUFBVSxHQUFHLEtBQUssR0FBR0EsVUFBVSxHQUFHLEdBQUcsR0FBR0osY0FBYztFQUN4RDtFQUNBLE9BQU9JLFVBQVU7QUFDbkI7QUFF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