@merchi/product-form 1.19.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- package/package.json +93 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { cleanFormVariationJson } from '../utils/cleanFormVariationJson';
|
|
2
|
+
export { defaultGroupQuantity, enforceMoqPerGroup, productMinimumQuantity, productMoqFloor, } from '../utils/quantity';
|
|
3
|
+
export declare function variationFieldCostDetail(variationField: any): string;
|
|
4
|
+
export declare function variationCostDetail(variation: any): string;
|
|
5
|
+
export declare function variationFieldOptionCostDetail(option: any): string;
|
|
6
|
+
/** Product-level setup fee, same "+ $X …" style as variation once-off costs. */
|
|
7
|
+
export declare function productSetupCostDetail(product: any): string;
|
|
8
|
+
export declare function splitSelectedOptions(value: any): any[];
|
|
9
|
+
export declare function syncSelectedOptionsFromValue(variation: any): any;
|
|
10
|
+
export declare function syncJobSelectedOptionsFromValues(job: any): any;
|
|
11
|
+
export declare const supplierSellerEditableProductTypes: Array<number>;
|
|
12
|
+
export declare function optionImageUrl(option: any): any;
|
|
13
|
+
export declare function allowedFileTypes(variationField: any): string;
|
|
14
|
+
/** Build a default variation JSON for a product variation field (gated fields). */
|
|
15
|
+
export declare function buildEmptyVariationFromField(field: any): any;
|
|
16
|
+
export declare function buildEmptyVariationGroup(product: any): any;
|
|
17
|
+
export declare function isProductSupplierMOD(product: any): boolean;
|
|
18
|
+
export declare function isProductTypeFileDownload(productType: any): boolean;
|
|
19
|
+
export declare function isProductFileDownload(product: any): boolean;
|
|
20
|
+
export declare function isProductLeadForm(product: any): boolean;
|
|
21
|
+
export declare const isoCountries: any;
|
|
22
|
+
export declare function getCountryName(countryCode: any): any;
|
|
23
|
+
export declare function cleanTagIds(raw: any[]): number[];
|
|
24
|
+
export declare function getMerchiSourceJobTags(): any[];
|
|
25
|
+
export declare function sortByPosition(options: any[]): any[];
|
|
26
|
+
export declare function cleanJobVariationsAndGroups(jobJson: any): any;
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
5
|
+
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); }
|
|
6
|
+
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); }
|
|
7
|
+
import { Merchi } from '@merchi/sdk';
|
|
8
|
+
import { formatCurrency } from '../utils/currency';
|
|
9
|
+
import { ProductType, FieldType } from '../utils/types';
|
|
10
|
+
export { cleanFormVariationJson } from '../utils/cleanFormVariationJson';
|
|
11
|
+
import { cleanFormVariationJson } from '../utils/cleanFormVariationJson';
|
|
12
|
+
import { defaultGroupQuantity } from '../utils/quantity';
|
|
13
|
+
export { defaultGroupQuantity, enforceMoqPerGroup, productMinimumQuantity, productMoqFloor } from '../utils/quantity';
|
|
14
|
+
var pngOptionNotFound = require('../images/product-not-found.png');
|
|
15
|
+
function renderSingleCostIndication(cost, currencyCode, costTypeString) {
|
|
16
|
+
var currencyOptions = {
|
|
17
|
+
currency: currencyCode,
|
|
18
|
+
showCodeIfNoSymbol: false
|
|
19
|
+
};
|
|
20
|
+
var costString = '';
|
|
21
|
+
var amount = parseFloat(cost);
|
|
22
|
+
if (Number.isFinite(amount) && amount > 0) {
|
|
23
|
+
costString = formatCurrency(amount, currencyOptions);
|
|
24
|
+
costString = ' + ' + costString + ' ' + costTypeString;
|
|
25
|
+
}
|
|
26
|
+
return costString;
|
|
27
|
+
}
|
|
28
|
+
var costDetail = function costDetail(onceOffCost, unitCost, currencyCode) {
|
|
29
|
+
var onceOffCostDescription = renderSingleCostIndication(parseFloat(onceOffCost), currencyCode, 'once off');
|
|
30
|
+
var unitCostDescription = renderSingleCostIndication(parseFloat(unitCost), currencyCode, 'per unit');
|
|
31
|
+
return onceOffCostDescription + unitCostDescription;
|
|
32
|
+
};
|
|
33
|
+
export function variationFieldCostDetail(variationField) {
|
|
34
|
+
var variationCost = variationField.variationCost,
|
|
35
|
+
variationUnitCost = variationField.variationUnitCost,
|
|
36
|
+
currency = variationField.currency;
|
|
37
|
+
return costDetail(variationCost, variationUnitCost, currency);
|
|
38
|
+
}
|
|
39
|
+
export function variationCostDetail(variation) {
|
|
40
|
+
var onceOffCost = variation.onceOffCost,
|
|
41
|
+
unitCost = variation.unitCost,
|
|
42
|
+
currency = variation.currency;
|
|
43
|
+
return costDetail(onceOffCost, unitCost, currency);
|
|
44
|
+
}
|
|
45
|
+
export function variationFieldOptionCostDetail(option) {
|
|
46
|
+
var _option$onceOffCost, _option$unitCost;
|
|
47
|
+
var currency = option.currency;
|
|
48
|
+
// Field options use variationCost; selectable VariationOptions use onceOffCost.
|
|
49
|
+
var onceOffCost = (_option$onceOffCost = option.onceOffCost) !== null && _option$onceOffCost !== void 0 ? _option$onceOffCost : option.variationCost;
|
|
50
|
+
var unitCost = (_option$unitCost = option.unitCost) !== null && _option$unitCost !== void 0 ? _option$unitCost : option.variationUnitCost;
|
|
51
|
+
return costDetail(onceOffCost, unitCost, currency);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Product-level setup fee, same "+ $X …" style as variation once-off costs. */
|
|
55
|
+
export function productSetupCostDetail(product) {
|
|
56
|
+
var setupPrice = parseFloat(product === null || product === void 0 ? void 0 : product.setupPrice);
|
|
57
|
+
if (!setupPrice) return '';
|
|
58
|
+
var label = product.setupPerGroup ? 'setup per group' : 'setup';
|
|
59
|
+
return renderSingleCostIndication(setupPrice, product.currency, label);
|
|
60
|
+
}
|
|
61
|
+
export function splitSelectedOptions(value) {
|
|
62
|
+
if (Array.isArray(value)) {
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
if (typeof value === 'string' && value) {
|
|
66
|
+
return value.split(',');
|
|
67
|
+
}
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
export function syncSelectedOptionsFromValue(variation) {
|
|
71
|
+
var _variation$variationF;
|
|
72
|
+
if (!variation || _typeof(variation) !== 'object') return variation;
|
|
73
|
+
var fieldType = Number(variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.fieldType);
|
|
74
|
+
if (fieldType === FieldType.COLOUR_EXTRACT) return variation;
|
|
75
|
+
var selectable = (variation === null || variation === void 0 ? void 0 : variation.selectableOptions) || [];
|
|
76
|
+
if (!selectable.length) return variation;
|
|
77
|
+
var selectedIds = splitSelectedOptions(variation === null || variation === void 0 ? void 0 : variation.value).map(String).filter(Boolean);
|
|
78
|
+
if (!selectedIds.length) return variation;
|
|
79
|
+
var resolved = selectable.filter(function (option) {
|
|
80
|
+
return selectedIds.includes(String(option.optionId));
|
|
81
|
+
});
|
|
82
|
+
if (!resolved.length) return variation;
|
|
83
|
+
return _objectSpread(_objectSpread({}, variation), {}, {
|
|
84
|
+
selectedOptions: resolved
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function syncJobSelectedOptionsFromValues(job) {
|
|
88
|
+
if (!job || _typeof(job) !== 'object') return job;
|
|
89
|
+
var next = _objectSpread({}, job);
|
|
90
|
+
if (Array.isArray(next.variations)) {
|
|
91
|
+
next.variations = next.variations.map(syncSelectedOptionsFromValue);
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(next.variationsGroups)) {
|
|
94
|
+
next.variationsGroups = next.variationsGroups.map(function (group) {
|
|
95
|
+
return _objectSpread(_objectSpread({}, group), {}, {
|
|
96
|
+
variations: Array.isArray(group === null || group === void 0 ? void 0 : group.variations) ? group.variations.map(syncSelectedOptionsFromValue) : group === null || group === void 0 ? void 0 : group.variations
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return next;
|
|
101
|
+
}
|
|
102
|
+
export var supplierSellerEditableProductTypes = [ProductType.SUPPLIER_MOD, ProductType.CLONED_SUPPLIER_MOD];
|
|
103
|
+
export function optionImageUrl(option) {
|
|
104
|
+
var image = pngOptionNotFound ? pngOptionNotFound["default"] || pngOptionNotFound : '';
|
|
105
|
+
var imageNotFound = image ? image.src || image : '';
|
|
106
|
+
return option.linkedFile ? option.linkedFile ? option.linkedFile.viewUrl : imageNotFound : imageNotFound;
|
|
107
|
+
}
|
|
108
|
+
export function allowedFileTypes(variationField) {
|
|
109
|
+
var fileTypeMapping = {
|
|
110
|
+
allowFileJpeg: '.jpeg',
|
|
111
|
+
allowFileGif: '.gif',
|
|
112
|
+
allowFilePdf: '.pdf',
|
|
113
|
+
allowFilePng: '.png',
|
|
114
|
+
allowFileAi: '.ai'
|
|
115
|
+
};
|
|
116
|
+
var allowedTypes = Object.keys(fileTypeMapping).filter(function (attributeName) {
|
|
117
|
+
return variationField[attributeName];
|
|
118
|
+
}).map(function (attributeName) {
|
|
119
|
+
return fileTypeMapping[attributeName];
|
|
120
|
+
});
|
|
121
|
+
return allowedTypes.join(',');
|
|
122
|
+
}
|
|
123
|
+
var merchi = new Merchi();
|
|
124
|
+
function ensureVariationOptionFlags(variation) {
|
|
125
|
+
if (variation.isVisible === undefined) variation.isVisible = true;
|
|
126
|
+
(variation.selectableOptions || []).forEach(function (option) {
|
|
127
|
+
if (option.isVisible === undefined) option.isVisible = true;
|
|
128
|
+
if (option.available === undefined) option.available = true;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Build a default variation JSON for a product variation field (gated fields). */
|
|
133
|
+
export function buildEmptyVariationFromField(field) {
|
|
134
|
+
var fieldEnt = new merchi.VariationField();
|
|
135
|
+
fieldEnt.fromJson(_objectSpread({}, field), {
|
|
136
|
+
makeDirty: false
|
|
137
|
+
});
|
|
138
|
+
var variationJson = fieldEnt.buildEmptyVariation().toJson();
|
|
139
|
+
ensureVariationOptionFlags(variationJson);
|
|
140
|
+
return variationJson;
|
|
141
|
+
}
|
|
142
|
+
export function buildEmptyVariationGroup(product) {
|
|
143
|
+
var productEnt = new merchi.Product();
|
|
144
|
+
productEnt.fromJson(_objectSpread({}, product), {
|
|
145
|
+
makeDirty: false
|
|
146
|
+
});
|
|
147
|
+
var newGroup = new productEnt.buildEmptyVariationGroup();
|
|
148
|
+
newGroup.groupCost = 0;
|
|
149
|
+
newGroup.quantity = defaultGroupQuantity(product);
|
|
150
|
+
var groupJson = newGroup.toJson();
|
|
151
|
+
// The SDK's buildVariationOption does not set `isVisible`/`available` on the
|
|
152
|
+
// built selectable options. In server mode these are repopulated by the
|
|
153
|
+
// estimate round-trip + form reset, but in client mode (no round-trip) the
|
|
154
|
+
// options would render disabled ("- disabled"). Default them here so a freshly
|
|
155
|
+
// added group is usable; option-level conditional visibility (selectedBy) is
|
|
156
|
+
// resolved on subsequent interactions in server mode.
|
|
157
|
+
(groupJson.variations || []).forEach(ensureVariationOptionFlags);
|
|
158
|
+
return groupJson;
|
|
159
|
+
}
|
|
160
|
+
export function isProductSupplierMOD(product) {
|
|
161
|
+
var productType = product && product.productType;
|
|
162
|
+
return product && [String(ProductType.SUPPLIER_MOD), String(ProductType.SUPPLIER_RESELL_MOD)].includes(String(productType));
|
|
163
|
+
}
|
|
164
|
+
export function isProductTypeFileDownload(productType) {
|
|
165
|
+
return parseInt(productType, 10) === ProductType.SELLER_FILE_DOWNLOAD;
|
|
166
|
+
}
|
|
167
|
+
export function isProductFileDownload(product) {
|
|
168
|
+
var productType = product.productType;
|
|
169
|
+
return isProductTypeFileDownload(productType);
|
|
170
|
+
}
|
|
171
|
+
export function isProductLeadForm(product) {
|
|
172
|
+
var productType = product && product.productType;
|
|
173
|
+
return parseInt(productType, 10) === ProductType.LEAD_FORM;
|
|
174
|
+
}
|
|
175
|
+
export var isoCountries = {
|
|
176
|
+
AF: 'Afghanistan',
|
|
177
|
+
AX: 'Aland Islands',
|
|
178
|
+
AL: 'Albania',
|
|
179
|
+
DZ: 'Algeria',
|
|
180
|
+
AS: 'American Samoa',
|
|
181
|
+
AD: 'Andorra',
|
|
182
|
+
AO: 'Angola',
|
|
183
|
+
AI: 'Anguilla',
|
|
184
|
+
AQ: 'Antarctica',
|
|
185
|
+
AG: 'Antigua And Barbuda',
|
|
186
|
+
AR: 'Argentina',
|
|
187
|
+
AM: 'Armenia',
|
|
188
|
+
AW: 'Aruba',
|
|
189
|
+
AU: 'Australia',
|
|
190
|
+
AT: 'Austria',
|
|
191
|
+
AZ: 'Azerbaijan',
|
|
192
|
+
BS: 'Bahamas',
|
|
193
|
+
BH: 'Bahrain',
|
|
194
|
+
BD: 'Bangladesh',
|
|
195
|
+
BB: 'Barbados',
|
|
196
|
+
BY: 'Belarus',
|
|
197
|
+
BE: 'Belgium',
|
|
198
|
+
BZ: 'Belize',
|
|
199
|
+
BJ: 'Benin',
|
|
200
|
+
BM: 'Bermuda',
|
|
201
|
+
BT: 'Bhutan',
|
|
202
|
+
BO: 'Bolivia',
|
|
203
|
+
BA: 'Bosnia And Herzegovina',
|
|
204
|
+
BW: 'Botswana',
|
|
205
|
+
BV: 'Bouvet Island',
|
|
206
|
+
BR: 'Brazil',
|
|
207
|
+
IO: 'British Indian Ocean Territory',
|
|
208
|
+
BN: 'Brunei Darussalam',
|
|
209
|
+
BG: 'Bulgaria',
|
|
210
|
+
BF: 'Burkina Faso',
|
|
211
|
+
BI: 'Burundi',
|
|
212
|
+
KH: 'Cambodia',
|
|
213
|
+
CM: 'Cameroon',
|
|
214
|
+
CA: 'Canada',
|
|
215
|
+
CV: 'Cape Verde',
|
|
216
|
+
KY: 'Cayman Islands',
|
|
217
|
+
CF: 'Central African Republic',
|
|
218
|
+
TD: 'Chad',
|
|
219
|
+
CL: 'Chile',
|
|
220
|
+
CN: 'China',
|
|
221
|
+
CX: 'Christmas Island',
|
|
222
|
+
CC: 'Cocos (Keeling) Islands',
|
|
223
|
+
CO: 'Colombia',
|
|
224
|
+
KM: 'Comoros',
|
|
225
|
+
CG: 'Congo',
|
|
226
|
+
CD: 'Congo, Democratic Republic',
|
|
227
|
+
CK: 'Cook Islands',
|
|
228
|
+
CR: 'Costa Rica',
|
|
229
|
+
CI: "Cote D'Ivoire",
|
|
230
|
+
HR: 'Croatia',
|
|
231
|
+
CU: 'Cuba',
|
|
232
|
+
CY: 'Cyprus',
|
|
233
|
+
CZ: 'Czech Republic',
|
|
234
|
+
DK: 'Denmark',
|
|
235
|
+
DJ: 'Djibouti',
|
|
236
|
+
DM: 'Dominica',
|
|
237
|
+
DO: 'Dominican Republic',
|
|
238
|
+
EC: 'Ecuador',
|
|
239
|
+
EG: 'Egypt',
|
|
240
|
+
SV: 'El Salvador',
|
|
241
|
+
GQ: 'Equatorial Guinea',
|
|
242
|
+
ER: 'Eritrea',
|
|
243
|
+
EE: 'Estonia',
|
|
244
|
+
ET: 'Ethiopia',
|
|
245
|
+
FK: 'Falkland Islands (Malvinas)',
|
|
246
|
+
FO: 'Faroe Islands',
|
|
247
|
+
FJ: 'Fiji',
|
|
248
|
+
FI: 'Finland',
|
|
249
|
+
FR: 'France',
|
|
250
|
+
GF: 'French Guiana',
|
|
251
|
+
PF: 'French Polynesia',
|
|
252
|
+
TF: 'French Southern Territories',
|
|
253
|
+
GA: 'Gabon',
|
|
254
|
+
GM: 'Gambia',
|
|
255
|
+
GE: 'Georgia',
|
|
256
|
+
DE: 'Germany',
|
|
257
|
+
GH: 'Ghana',
|
|
258
|
+
GI: 'Gibraltar',
|
|
259
|
+
GR: 'Greece',
|
|
260
|
+
GL: 'Greenland',
|
|
261
|
+
GD: 'Grenada',
|
|
262
|
+
GP: 'Guadeloupe',
|
|
263
|
+
GU: 'Guam',
|
|
264
|
+
GT: 'Guatemala',
|
|
265
|
+
GG: 'Guernsey',
|
|
266
|
+
GN: 'Guinea',
|
|
267
|
+
GW: 'Guinea-Bissau',
|
|
268
|
+
GY: 'Guyana',
|
|
269
|
+
HT: 'Haiti',
|
|
270
|
+
HM: 'Heard Island & Mcdonald Islands',
|
|
271
|
+
VA: 'Holy See (Vatican City State)',
|
|
272
|
+
HN: 'Honduras',
|
|
273
|
+
HK: 'Hong Kong',
|
|
274
|
+
HU: 'Hungary',
|
|
275
|
+
IS: 'Iceland',
|
|
276
|
+
IN: 'India',
|
|
277
|
+
ID: 'Indonesia',
|
|
278
|
+
IR: 'Iran, Islamic Republic Of',
|
|
279
|
+
IQ: 'Iraq',
|
|
280
|
+
IE: 'Ireland',
|
|
281
|
+
IM: 'Isle Of Man',
|
|
282
|
+
IL: 'Israel',
|
|
283
|
+
IT: 'Italy',
|
|
284
|
+
JM: 'Jamaica',
|
|
285
|
+
JP: 'Japan',
|
|
286
|
+
JE: 'Jersey',
|
|
287
|
+
JO: 'Jordan',
|
|
288
|
+
KZ: 'Kazakhstan',
|
|
289
|
+
KE: 'Kenya',
|
|
290
|
+
KI: 'Kiribati',
|
|
291
|
+
KR: 'Korea',
|
|
292
|
+
KW: 'Kuwait',
|
|
293
|
+
KG: 'Kyrgyzstan',
|
|
294
|
+
LA: "Lao People's Democratic Republic",
|
|
295
|
+
LV: 'Latvia',
|
|
296
|
+
LB: 'Lebanon',
|
|
297
|
+
LS: 'Lesotho',
|
|
298
|
+
LR: 'Liberia',
|
|
299
|
+
LY: 'Libyan Arab Jamahiriya',
|
|
300
|
+
LI: 'Liechtenstein',
|
|
301
|
+
LT: 'Lithuania',
|
|
302
|
+
LU: 'Luxembourg',
|
|
303
|
+
MO: 'Macao',
|
|
304
|
+
MK: 'Macedonia',
|
|
305
|
+
MG: 'Madagascar',
|
|
306
|
+
MW: 'Malawi',
|
|
307
|
+
MY: 'Malaysia',
|
|
308
|
+
MV: 'Maldives',
|
|
309
|
+
ML: 'Mali',
|
|
310
|
+
MT: 'Malta',
|
|
311
|
+
MH: 'Marshall Islands',
|
|
312
|
+
MQ: 'Martinique',
|
|
313
|
+
MR: 'Mauritania',
|
|
314
|
+
MU: 'Mauritius',
|
|
315
|
+
YT: 'Mayotte',
|
|
316
|
+
MX: 'Mexico',
|
|
317
|
+
FM: 'Micronesia, Federated States Of',
|
|
318
|
+
MD: 'Moldova',
|
|
319
|
+
MC: 'Monaco',
|
|
320
|
+
MN: 'Mongolia',
|
|
321
|
+
ME: 'Montenegro',
|
|
322
|
+
MS: 'Montserrat',
|
|
323
|
+
MA: 'Morocco',
|
|
324
|
+
MZ: 'Mozambique',
|
|
325
|
+
MM: 'Myanmar',
|
|
326
|
+
NA: 'Namibia',
|
|
327
|
+
NR: 'Nauru',
|
|
328
|
+
NP: 'Nepal',
|
|
329
|
+
NL: 'Netherlands',
|
|
330
|
+
AN: 'Netherlands Antilles',
|
|
331
|
+
NC: 'New Caledonia',
|
|
332
|
+
NZ: 'New Zealand',
|
|
333
|
+
NI: 'Nicaragua',
|
|
334
|
+
NE: 'Niger',
|
|
335
|
+
NG: 'Nigeria',
|
|
336
|
+
NU: 'Niue',
|
|
337
|
+
NF: 'Norfolk Island',
|
|
338
|
+
MP: 'Northern Mariana Islands',
|
|
339
|
+
NO: 'Norway',
|
|
340
|
+
OM: 'Oman',
|
|
341
|
+
PK: 'Pakistan',
|
|
342
|
+
PW: 'Palau',
|
|
343
|
+
PS: 'Palestinian Territory, Occupied',
|
|
344
|
+
PA: 'Panama',
|
|
345
|
+
PG: 'Papua New Guinea',
|
|
346
|
+
PY: 'Paraguay',
|
|
347
|
+
PE: 'Peru',
|
|
348
|
+
PH: 'Philippines',
|
|
349
|
+
PN: 'Pitcairn',
|
|
350
|
+
PL: 'Poland',
|
|
351
|
+
PT: 'Portugal',
|
|
352
|
+
PR: 'Puerto Rico',
|
|
353
|
+
QA: 'Qatar',
|
|
354
|
+
RE: 'Reunion',
|
|
355
|
+
RO: 'Romania',
|
|
356
|
+
RU: 'Russian Federation',
|
|
357
|
+
RW: 'Rwanda',
|
|
358
|
+
BL: 'Saint Barthelemy',
|
|
359
|
+
SH: 'Saint Helena',
|
|
360
|
+
KN: 'Saint Kitts And Nevis',
|
|
361
|
+
LC: 'Saint Lucia',
|
|
362
|
+
MF: 'Saint Martin',
|
|
363
|
+
PM: 'Saint Pierre And Miquelon',
|
|
364
|
+
VC: 'Saint Vincent And Grenadines',
|
|
365
|
+
WS: 'Samoa',
|
|
366
|
+
SM: 'San Marino',
|
|
367
|
+
ST: 'Sao Tome And Principe',
|
|
368
|
+
SA: 'Saudi Arabia',
|
|
369
|
+
SN: 'Senegal',
|
|
370
|
+
RS: 'Serbia',
|
|
371
|
+
SC: 'Seychelles',
|
|
372
|
+
SL: 'Sierra Leone',
|
|
373
|
+
SG: 'Singapore',
|
|
374
|
+
SK: 'Slovakia',
|
|
375
|
+
SI: 'Slovenia',
|
|
376
|
+
SB: 'Solomon Islands',
|
|
377
|
+
SO: 'Somalia',
|
|
378
|
+
ZA: 'South Africa',
|
|
379
|
+
GS: 'South Georgia And Sandwich Isl.',
|
|
380
|
+
ES: 'Spain',
|
|
381
|
+
LK: 'Sri Lanka',
|
|
382
|
+
SD: 'Sudan',
|
|
383
|
+
SR: 'Suriname',
|
|
384
|
+
SJ: 'Svalbard And Jan Mayen',
|
|
385
|
+
SZ: 'Swaziland',
|
|
386
|
+
SE: 'Sweden',
|
|
387
|
+
CH: 'Switzerland',
|
|
388
|
+
SY: 'Syrian Arab Republic',
|
|
389
|
+
TW: 'Taiwan',
|
|
390
|
+
TJ: 'Tajikistan',
|
|
391
|
+
TZ: 'Tanzania',
|
|
392
|
+
TH: 'Thailand',
|
|
393
|
+
TL: 'Timor-Leste',
|
|
394
|
+
TG: 'Togo',
|
|
395
|
+
TK: 'Tokelau',
|
|
396
|
+
TO: 'Tonga',
|
|
397
|
+
TT: 'Trinidad And Tobago',
|
|
398
|
+
TN: 'Tunisia',
|
|
399
|
+
TR: 'Turkey',
|
|
400
|
+
TM: 'Turkmenistan',
|
|
401
|
+
TC: 'Turks And Caicos Islands',
|
|
402
|
+
TV: 'Tuvalu',
|
|
403
|
+
UG: 'Uganda',
|
|
404
|
+
UA: 'Ukraine',
|
|
405
|
+
AE: 'United Arab Emirates',
|
|
406
|
+
GB: 'United Kingdom',
|
|
407
|
+
US: 'United States',
|
|
408
|
+
UM: 'United States Outlying Islands',
|
|
409
|
+
UY: 'Uruguay',
|
|
410
|
+
UZ: 'Uzbekistan',
|
|
411
|
+
VU: 'Vanuatu',
|
|
412
|
+
VE: 'Venezuela',
|
|
413
|
+
VN: 'Viet Nam',
|
|
414
|
+
VG: 'Virgin Islands, British',
|
|
415
|
+
VI: 'Virgin Islands, U.S.',
|
|
416
|
+
WF: 'Wallis And Futuna',
|
|
417
|
+
EH: 'Western Sahara',
|
|
418
|
+
YE: 'Yemen',
|
|
419
|
+
ZM: 'Zambia',
|
|
420
|
+
ZW: 'Zimbabwe'
|
|
421
|
+
};
|
|
422
|
+
export function getCountryName(countryCode) {
|
|
423
|
+
if (isoCountries.hasOwnProperty(countryCode)) {
|
|
424
|
+
return isoCountries[countryCode];
|
|
425
|
+
} else {
|
|
426
|
+
return countryCode;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
export function cleanTagIds(raw) {
|
|
430
|
+
return raw.map(function (id) {
|
|
431
|
+
return id.trim();
|
|
432
|
+
}) // Trim each ID entry to remove whitespace
|
|
433
|
+
.filter(function (id) {
|
|
434
|
+
return /^\d+$/.test(id);
|
|
435
|
+
}) // Use a regular expression to ensure the ID is entirely numeric.
|
|
436
|
+
.map(function (id) {
|
|
437
|
+
return Number(id);
|
|
438
|
+
}); // Convert the remaining, valid ID entries into numbers
|
|
439
|
+
}
|
|
440
|
+
export function getMerchiSourceJobTags() {
|
|
441
|
+
if (typeof localStorage !== 'undefined' && localStorage !== null) {
|
|
442
|
+
var merchiSource = localStorage.getItem('merchi_source');
|
|
443
|
+
if (merchiSource) {
|
|
444
|
+
var ids = cleanTagIds(merchiSource.split(','));
|
|
445
|
+
return ids.map(function (id) {
|
|
446
|
+
return {
|
|
447
|
+
id: id
|
|
448
|
+
};
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
// If "merchi_source" is not found in localStorage, return an empty array.
|
|
452
|
+
return [];
|
|
453
|
+
}
|
|
454
|
+
return [];
|
|
455
|
+
}
|
|
456
|
+
export function sortByPosition(options) {
|
|
457
|
+
return options.map(function (obj) {
|
|
458
|
+
var position = typeof obj.position === 'string' ? parseInt(obj.position, 10) : obj.position;
|
|
459
|
+
return _objectSpread(_objectSpread({}, obj), {}, {
|
|
460
|
+
position: typeof position === 'number' ? position : 0
|
|
461
|
+
});
|
|
462
|
+
}).sort(function (a, b) {
|
|
463
|
+
var aPosition = typeof a.position === 'number' ? a.position : 0;
|
|
464
|
+
var bPosition = typeof b.position === 'number' ? b.position : 0;
|
|
465
|
+
return aPosition - bPosition;
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
export function cleanJobVariationsAndGroups(jobJson) {
|
|
469
|
+
var variations = jobJson.variations,
|
|
470
|
+
variationsGroups = jobJson.variationsGroups;
|
|
471
|
+
var hasGroups = Boolean(variationsGroups && variationsGroups.length);
|
|
472
|
+
var hasVariations = Boolean(variations && variations.length);
|
|
473
|
+
|
|
474
|
+
// Loop over individual variations and check if the variation is a json string, if it is convert it to an object
|
|
475
|
+
if (hasVariations) {
|
|
476
|
+
for (var i = 0; i < variations.length; i++) {
|
|
477
|
+
variations[i] = cleanFormVariationJson(variations[i]);
|
|
478
|
+
}
|
|
479
|
+
jobJson.variations = variations;
|
|
480
|
+
}
|
|
481
|
+
if (hasGroups) {
|
|
482
|
+
for (var _i = 0; _i < variationsGroups.length; _i++) {
|
|
483
|
+
// Set default quantity if not present
|
|
484
|
+
var group = variationsGroups[_i];
|
|
485
|
+
if (!group.quantity) {
|
|
486
|
+
group.quantity = 0;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
// Handle variations within the group - convert JSON strings to objects
|
|
490
|
+
if (group.variations && Array.isArray(group.variations)) {
|
|
491
|
+
for (var j = 0; j < group.variations.length; j++) {
|
|
492
|
+
group.variations[j] = cleanFormVariationJson(group.variations[j]);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
jobJson.variationsGroups = variationsGroups;
|
|
497
|
+
}
|
|
498
|
+
return jobJson;
|
|
499
|
+
}
|
|
500
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXJjaGkiLCJmb3JtYXRDdXJyZW5jeSIsIlByb2R1Y3RUeXBlIiwiRmllbGRUeXBlIiwiY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbiIsImRlZmF1bHRHcm91cFF1YW50aXR5IiwiZW5mb3JjZU1vcVBlckdyb3VwIiwicHJvZHVjdE1pbmltdW1RdWFudGl0eSIsInByb2R1Y3RNb3FGbG9vciIsInBuZ09wdGlvbk5vdEZvdW5kIiwicmVxdWlyZSIsInJlbmRlclNpbmdsZUNvc3RJbmRpY2F0aW9uIiwiY29zdCIsImN1cnJlbmN5Q29kZSIsImNvc3RUeXBlU3RyaW5nIiwiY3VycmVuY3lPcHRpb25zIiwiY3VycmVuY3kiLCJzaG93Q29kZUlmTm9TeW1ib2wiLCJjb3N0U3RyaW5nIiwiYW1vdW50IiwicGFyc2VGbG9hdCIsIk51bWJlciIsImlzRmluaXRlIiwiY29zdERldGFpbCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJvbmNlT2ZmQ29zdERlc2NyaXB0aW9uIiwidW5pdENvc3REZXNjcmlwdGlvbiIsInZhcmlhdGlvbkZpZWxkQ29zdERldGFpbCIsInZhcmlhdGlvbkZpZWxkIiwidmFyaWF0aW9uQ29zdCIsInZhcmlhdGlvblVuaXRDb3N0IiwidmFyaWF0aW9uQ29zdERldGFpbCIsInZhcmlhdGlvbiIsInZhcmlhdGlvbkZpZWxkT3B0aW9uQ29zdERldGFpbCIsIm9wdGlvbiIsIl9vcHRpb24kb25jZU9mZkNvc3QiLCJfb3B0aW9uJHVuaXRDb3N0IiwicHJvZHVjdFNldHVwQ29zdERldGFpbCIsInByb2R1Y3QiLCJzZXR1cFByaWNlIiwibGFiZWwiLCJzZXR1cFBlckdyb3VwIiwic3BsaXRTZWxlY3RlZE9wdGlvbnMiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsInNwbGl0Iiwic3luY1NlbGVjdGVkT3B0aW9uc0Zyb21WYWx1ZSIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsIl90eXBlb2YiLCJmaWVsZFR5cGUiLCJDT0xPVVJfRVhUUkFDVCIsInNlbGVjdGFibGUiLCJzZWxlY3RhYmxlT3B0aW9ucyIsImxlbmd0aCIsInNlbGVjdGVkSWRzIiwibWFwIiwiU3RyaW5nIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlc29sdmVkIiwiaW5jbHVkZXMiLCJvcHRpb25JZCIsIl9vYmplY3RTcHJlYWQiLCJzZWxlY3RlZE9wdGlvbnMiLCJzeW5jSm9iU2VsZWN0ZWRPcHRpb25zRnJvbVZhbHVlcyIsImpvYiIsIm5leHQiLCJ2YXJpYXRpb25zIiwidmFyaWF0aW9uc0dyb3VwcyIsImdyb3VwIiwic3VwcGxpZXJTZWxsZXJFZGl0YWJsZVByb2R1Y3RUeXBlcyIsIlNVUFBMSUVSX01PRCIsIkNMT05FRF9TVVBQTElFUl9NT0QiLCJvcHRpb25JbWFnZVVybCIsImltYWdlIiwiaW1hZ2VOb3RGb3VuZCIsInNyYyIsImxpbmtlZEZpbGUiLCJ2aWV3VXJsIiwiYWxsb3dlZEZpbGVUeXBlcyIsImZpbGVUeXBlTWFwcGluZyIsImFsbG93RmlsZUpwZWciLCJhbGxvd0ZpbGVHaWYiLCJhbGxvd0ZpbGVQZGYiLCJhbGxvd0ZpbGVQbmciLCJhbGxvd0ZpbGVBaSIsImFsbG93ZWRUeXBlcyIsIk9iamVjdCIsImtleXMiLCJhdHRyaWJ1dGVOYW1lIiwiam9pbiIsIm1lcmNoaSIsImVuc3VyZVZhcmlhdGlvbk9wdGlvbkZsYWdzIiwiaXNWaXNpYmxlIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsImF2YWlsYWJsZSIsImJ1aWxkRW1wdHlWYXJpYXRpb25Gcm9tRmllbGQiLCJmaWVsZCIsImZpZWxkRW50IiwiVmFyaWF0aW9uRmllbGQiLCJmcm9tSnNvbiIsIm1ha2VEaXJ0eSIsInZhcmlhdGlvbkpzb24iLCJidWlsZEVtcHR5VmFyaWF0aW9uIiwidG9Kc29uIiwiYnVpbGRFbXB0eVZhcmlhdGlvbkdyb3VwIiwicHJvZHVjdEVudCIsIlByb2R1Y3QiLCJuZXdHcm91cCIsImdyb3VwQ29zdCIsInF1YW50aXR5IiwiZ3JvdXBKc29uIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJwcm9kdWN0VHlwZSIsIlNVUFBMSUVSX1JFU0VMTF9NT0QiLCJpc1Byb2R1Y3RUeXBlRmlsZURvd25sb2FkIiwicGFyc2VJbnQiLCJTRUxMRVJfRklMRV9ET1dOTE9BRCIsImlzUHJvZHVjdEZpbGVEb3dubG9hZCIsImlzUHJvZHVjdExlYWRGb3JtIiwiTEVBRF9GT1JNIiwiaXNvQ291bnRyaWVzIiwiQUYiLCJBWCIsIkFMIiwiRFoiLCJBUyIsIkFEIiwiQU8iLCJBSSIsIkFRIiwiQUciLCJBUiIsIkFNIiwiQVciLCJBVSIsIkFUIiwiQVoiLCJCUyIsIkJIIiwiQkQiLCJCQiIsIkJZIiwiQkUiLCJCWiIsIkJKIiwiQk0iLCJCVCIsIkJPIiwiQkEiLCJCVyIsIkJWIiwiQlIiLCJJTyIsIkJOIiwiQkciLCJCRiIsIkJJIiwiS0giLCJDTSIsIkNBIiwiQ1YiLCJLWSIsIkNGIiwiVEQiLCJDTCIsIkNOIiwiQ1giLCJDQyIsIkNPIiwiS00iLCJDRyIsIkNEIiwiQ0siLCJDUiIsIkNJIiwiSFIiLCJDVSIsIkNZIiwiQ1oiLCJESyIsIkRKIiwiRE0iLCJETyIsIkVDIiwiRUciLCJTViIsIkdRIiwiRVIiLCJFRSIsIkVUIiwiRksiLCJGTyIsIkZKIiwiRkkiLCJGUiIsIkdGIiwiUEYiLCJURiIsIkdBIiwiR00iLCJHRSIsIkRFIiwiR0giLCJHSSIsIkdSIiwiR0wiLCJHRCIsIkdQIiwiR1UiLCJHVCIsIkdHIiwiR04iLCJHVyIsIkdZIiwiSFQiLCJITSIsIlZBIiwiSE4iLCJISyIsIkhVIiwiSVMiLCJJTiIsIklEIiwiSVIiLCJJUSIsIklFIiwiSU0iLCJJTCIsIklUIiwiSk0iLCJKUCIsIkpFIiwiSk8iLCJLWiIsIktFIiwiS0kiLCJLUiIsIktXIiwiS0ciLCJMQSIsIkxWIiwiTEIiLCJMUyIsIkxSIiwiTFkiLCJMSSIsIkxUIiwiTFUiLCJNTyIsIk1LIiwiTUciLCJNVyIsIk1ZIiwiTVYiLCJNTCIsIk1UIiwiTUgiLCJNUSIsIk1SIiwiTVUiLCJZVCIsIk1YIiwiRk0iLCJNRCIsIk1DIiwiTU4iLCJNRSIsIk1TIiwiTUEiLCJNWiIsIk1NIiwiTkEiLCJOUiIsIk5QIiwiTkwiLCJBTiIsIk5DIiwiTloiLCJOSSIsIk5FIiwiTkciLCJOVSIsIk5GIiwiTVAiLCJOTyIsIk9NIiwiUEsiLCJQVyIsIlBTIiwiUEEiLCJQRyIsIlBZIiwiUEUiLCJQSCIsIlBOIiwiUEwiLCJQVCIsIlBSIiwiUUEiLCJSRSIsIlJPIiwiUlUiLCJSVyIsIkJMIiwiU0giLCJLTiIsIkxDIiwiTUYiLCJQTSIsIlZDIiwiV1MiLCJTTSIsIlNUIiwiU0EiLCJTTiIsIlJTIiwiU0MiLCJTTCIsIlNHIiwiU0siLCJTSSIsIlNCIiwiU08iLCJaQSIsIkdTIiwiRVMiLCJMSyIsIlNEIiwiU1IiLCJTSiIsIlNaIiwiU0UiLCJDSCIsIlNZIiwiVFciLCJUSiIsIlRaIiwiVEgiLCJUTCIsIlRHIiwiVEsiLCJUTyIsIlRUIiwiVE4iLCJUUiIsIlRNIiwiVEMiLCJUViIsIlVHIiwiVUEiLCJBRSIsIkdCIiwiVVMiLCJVTSIsIlVZIiwiVVoiLCJWVSIsIlZFIiwiVk4iLCJWRyIsIlZJIiwiV0YiLCJFSCIsIllFIiwiWk0iLCJaVyIsImdldENvdW50cnlOYW1lIiwiY291bnRyeUNvZGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNsZWFuVGFnSWRzIiwicmF3IiwiaWQiLCJ0cmltIiwidGVzdCIsImdldE1lcmNoaVNvdXJjZUpvYlRhZ3MiLCJsb2NhbFN0b3JhZ2UiLCJtZXJjaGlTb3VyY2UiLCJnZXRJdGVtIiwiaWRzIiwic29ydEJ5UG9zaXRpb24iLCJvcHRpb25zIiwib2JqIiwicG9zaXRpb24iLCJzb3J0IiwiYSIsImIiLCJhUG9zaXRpb24iLCJiUG9zaXRpb24iLCJjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHMiLCJqb2JKc29uIiwiaGFzR3JvdXBzIiwiaGFzVmFyaWF0aW9ucyIsImkiLCJqIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVyY2hpIH0gZnJvbSAnQG1lcmNoaS9zZGsnO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3kgfSBmcm9tICcuLi91dGlscy9jdXJyZW5jeSc7XG5pbXBvcnQgeyBQcm9kdWN0VHlwZSwgRmllbGRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuZXhwb3J0IHsgY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbiB9IGZyb20gJy4uL3V0aWxzL2NsZWFuRm9ybVZhcmlhdGlvbkpzb24nO1xuaW1wb3J0IHsgY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbiB9IGZyb20gJy4uL3V0aWxzL2NsZWFuRm9ybVZhcmlhdGlvbkpzb24nO1xuaW1wb3J0IHsgZGVmYXVsdEdyb3VwUXVhbnRpdHkgfSBmcm9tICcuLi91dGlscy9xdWFudGl0eSc7XG5leHBvcnQge1xuICBkZWZhdWx0R3JvdXBRdWFudGl0eSxcbiAgZW5mb3JjZU1vcVBlckdyb3VwLFxuICBwcm9kdWN0TWluaW11bVF1YW50aXR5LFxuICBwcm9kdWN0TW9xRmxvb3IsXG59IGZyb20gJy4uL3V0aWxzL3F1YW50aXR5JztcbmNvbnN0IHBuZ09wdGlvbk5vdEZvdW5kID0gcmVxdWlyZSgnLi4vaW1hZ2VzL3Byb2R1Y3Qtbm90LWZvdW5kLnBuZycpO1xuXG5mdW5jdGlvbiByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihcbiAgY29zdDogYW55LFxuICBjdXJyZW5jeUNvZGU6IGFueSxcbiAgY29zdFR5cGVTdHJpbmc6IHN0cmluZ1xuKSB7XG4gIGxldCBjdXJyZW5jeU9wdGlvbnMgPSB7IGN1cnJlbmN5OiBjdXJyZW5jeUNvZGUsIHNob3dDb2RlSWZOb1N5bWJvbDogZmFsc2UgfTtcbiAgbGV0IGNvc3RTdHJpbmcgPSAnJztcbiAgY29uc3QgYW1vdW50ID0gcGFyc2VGbG9hdChjb3N0KTtcblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKGFtb3VudCkgJiYgYW1vdW50ID4gMCkge1xuICAgIGNvc3RTdHJpbmcgPSBmb3JtYXRDdXJyZW5jeShhbW91bnQsIGN1cnJlbmN5T3B0aW9ucyk7XG4gICAgY29zdFN0cmluZyA9ICcgKyAnICsgY29zdFN0cmluZyArICcgJyArIGNvc3RUeXBlU3RyaW5nO1xuICB9XG4gIHJldHVybiBjb3N0U3RyaW5nO1xufVxuXG5jb25zdCBjb3N0RGV0YWlsID0gKG9uY2VPZmZDb3N0OiBhbnksIHVuaXRDb3N0OiBhbnksIGN1cnJlbmN5Q29kZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG9uY2VPZmZDb3N0RGVzY3JpcHRpb24gPSByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihcbiAgICBwYXJzZUZsb2F0KG9uY2VPZmZDb3N0KSxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgJ29uY2Ugb2ZmJ1xuICApO1xuICBjb25zdCB1bml0Q29zdERlc2NyaXB0aW9uID0gcmVuZGVyU2luZ2xlQ29zdEluZGljYXRpb24oXG4gICAgcGFyc2VGbG9hdCh1bml0Q29zdCksXG4gICAgY3VycmVuY3lDb2RlLFxuICAgICdwZXIgdW5pdCdcbiAgKTtcbiAgcmV0dXJuIG9uY2VPZmZDb3N0RGVzY3JpcHRpb24gKyB1bml0Q29zdERlc2NyaXB0aW9uO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvbkZpZWxkQ29zdERldGFpbCh2YXJpYXRpb25GaWVsZDogYW55KSB7XG4gIGNvbnN0IHsgdmFyaWF0aW9uQ29zdCwgdmFyaWF0aW9uVW5pdENvc3QsIGN1cnJlbmN5IH0gPSB2YXJpYXRpb25GaWVsZDtcbiAgcmV0dXJuIGNvc3REZXRhaWwodmFyaWF0aW9uQ29zdCEsIHZhcmlhdGlvblVuaXRDb3N0ISwgY3VycmVuY3khKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhdGlvbkNvc3REZXRhaWwodmFyaWF0aW9uOiBhbnkpIHtcbiAgY29uc3QgeyBvbmNlT2ZmQ29zdCwgdW5pdENvc3QsIGN1cnJlbmN5IH0gPSB2YXJpYXRpb247XG4gIHJldHVybiBjb3N0RGV0YWlsKG9uY2VPZmZDb3N0ISwgdW5pdENvc3QhLCBjdXJyZW5jeSEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWF0aW9uRmllbGRPcHRpb25Db3N0RGV0YWlsKG9wdGlvbjogYW55KSB7XG4gIGNvbnN0IHsgY3VycmVuY3kgfSA9IG9wdGlvbjtcbiAgLy8gRmllbGQgb3B0aW9ucyB1c2UgdmFyaWF0aW9uQ29zdDsgc2VsZWN0YWJsZSBWYXJpYXRpb25PcHRpb25zIHVzZSBvbmNlT2ZmQ29zdC5cbiAgY29uc3Qgb25jZU9mZkNvc3QgPSBvcHRpb24ub25jZU9mZkNvc3QgPz8gb3B0aW9uLnZhcmlhdGlvbkNvc3Q7XG4gIGNvbnN0IHVuaXRDb3N0ID0gb3B0aW9uLnVuaXRDb3N0ID8/IG9wdGlvbi52YXJpYXRpb25Vbml0Q29zdDtcbiAgcmV0dXJuIGNvc3REZXRhaWwob25jZU9mZkNvc3QhLCB1bml0Q29zdCEsIGN1cnJlbmN5ISk7XG59XG5cbi8qKiBQcm9kdWN0LWxldmVsIHNldHVwIGZlZSwgc2FtZSBcIisgJFgg4oCmXCIgc3R5bGUgYXMgdmFyaWF0aW9uIG9uY2Utb2ZmIGNvc3RzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2R1Y3RTZXR1cENvc3REZXRhaWwocHJvZHVjdDogYW55KSB7XG4gIGNvbnN0IHNldHVwUHJpY2UgPSBwYXJzZUZsb2F0KHByb2R1Y3Q/LnNldHVwUHJpY2UpO1xuICBpZiAoIXNldHVwUHJpY2UpIHJldHVybiAnJztcbiAgY29uc3QgbGFiZWwgPSBwcm9kdWN0LnNldHVwUGVyR3JvdXAgPyAnc2V0dXAgcGVyIGdyb3VwJyA6ICdzZXR1cCc7XG4gIHJldHVybiByZW5kZXJTaW5nbGVDb3N0SW5kaWNhdGlvbihzZXR1cFByaWNlLCBwcm9kdWN0LmN1cnJlbmN5LCBsYWJlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFNlbGVjdGVkT3B0aW9ucyh2YWx1ZTogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWUodmFyaWF0aW9uOiBhbnkpOiBhbnkge1xuICBpZiAoIXZhcmlhdGlvbiB8fCB0eXBlb2YgdmFyaWF0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhcmlhdGlvbjtcbiAgY29uc3QgZmllbGRUeXBlID0gTnVtYmVyKHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQ/LmZpZWxkVHlwZSk7XG4gIGlmIChmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVCkgcmV0dXJuIHZhcmlhdGlvbjtcblxuICBjb25zdCBzZWxlY3RhYmxlID0gdmFyaWF0aW9uPy5zZWxlY3RhYmxlT3B0aW9ucyB8fCBbXTtcbiAgaWYgKCFzZWxlY3RhYmxlLmxlbmd0aCkgcmV0dXJuIHZhcmlhdGlvbjtcblxuICBjb25zdCBzZWxlY3RlZElkcyA9IHNwbGl0U2VsZWN0ZWRPcHRpb25zKHZhcmlhdGlvbj8udmFsdWUpXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKCFzZWxlY3RlZElkcy5sZW5ndGgpIHJldHVybiB2YXJpYXRpb247XG5cbiAgY29uc3QgcmVzb2x2ZWQgPSBzZWxlY3RhYmxlLmZpbHRlcigob3B0aW9uOiBhbnkpID0+XG4gICAgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoU3RyaW5nKG9wdGlvbi5vcHRpb25JZCkpXG4gICk7XG4gIGlmICghcmVzb2x2ZWQubGVuZ3RoKSByZXR1cm4gdmFyaWF0aW9uO1xuXG4gIHJldHVybiB7IC4uLnZhcmlhdGlvbiwgc2VsZWN0ZWRPcHRpb25zOiByZXNvbHZlZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3luY0pvYlNlbGVjdGVkT3B0aW9uc0Zyb21WYWx1ZXMoam9iOiBhbnkpOiBhbnkge1xuICBpZiAoIWpvYiB8fCB0eXBlb2Ygam9iICE9PSAnb2JqZWN0JykgcmV0dXJuIGpvYjtcbiAgY29uc3QgbmV4dCA9IHsgLi4uam9iIH07XG4gIGlmIChBcnJheS5pc0FycmF5KG5leHQudmFyaWF0aW9ucykpIHtcbiAgICBuZXh0LnZhcmlhdGlvbnMgPSBuZXh0LnZhcmlhdGlvbnMubWFwKHN5bmNTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWUpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG5leHQudmFyaWF0aW9uc0dyb3VwcykpIHtcbiAgICBuZXh0LnZhcmlhdGlvbnNHcm91cHMgPSBuZXh0LnZhcmlhdGlvbnNHcm91cHMubWFwKChncm91cDogYW55KSA9PiAoe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICB2YXJpYXRpb25zOiBBcnJheS5pc0FycmF5KGdyb3VwPy52YXJpYXRpb25zKVxuICAgICAgICA/IGdyb3VwLnZhcmlhdGlvbnMubWFwKHN5bmNTZWxlY3RlZE9wdGlvbnNGcm9tVmFsdWUpXG4gICAgICAgIDogZ3JvdXA/LnZhcmlhdGlvbnMsXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiBuZXh0O1xufVxuXG5leHBvcnQgY29uc3Qgc3VwcGxpZXJTZWxsZXJFZGl0YWJsZVByb2R1Y3RUeXBlczogQXJyYXk8bnVtYmVyPiA9IFtcbiAgUHJvZHVjdFR5cGUuU1VQUExJRVJfTU9ELFxuICBQcm9kdWN0VHlwZS5DTE9ORURfU1VQUExJRVJfTU9ELFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbkltYWdlVXJsKG9wdGlvbjogYW55KSB7XG4gIGNvbnN0IGltYWdlID0gcG5nT3B0aW9uTm90Rm91bmQgPyAocG5nT3B0aW9uTm90Rm91bmQuZGVmYXVsdCB8fCBwbmdPcHRpb25Ob3RGb3VuZCkgOiAnJztcbiAgY29uc3QgaW1hZ2VOb3RGb3VuZCA9IGltYWdlID8gKGltYWdlLnNyYyB8fCBpbWFnZSkgOiAnJztcbiAgcmV0dXJuIG9wdGlvbi5saW5rZWRGaWxlXG4gICAgPyBvcHRpb24ubGlua2VkRmlsZVxuICAgICAgPyBvcHRpb24ubGlua2VkRmlsZS52aWV3VXJsXG4gICAgICA6IGltYWdlTm90Rm91bmRcbiAgICA6IGltYWdlTm90Rm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd2VkRmlsZVR5cGVzKHZhcmlhdGlvbkZpZWxkOiBhbnkpOiBzdHJpbmcge1xuICBjb25zdCBmaWxlVHlwZU1hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgYWxsb3dGaWxlSnBlZzogJy5qcGVnJyxcbiAgICBhbGxvd0ZpbGVHaWY6ICcuZ2lmJyxcbiAgICBhbGxvd0ZpbGVQZGY6ICcucGRmJyxcbiAgICBhbGxvd0ZpbGVQbmc6ICcucG5nJyxcbiAgICBhbGxvd0ZpbGVBaTogJy5haScsXG4gIH07XG5cbiAgY29uc3QgYWxsb3dlZFR5cGVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGZpbGVUeXBlTWFwcGluZylcbiAgICAuZmlsdGVyKChhdHRyaWJ1dGVOYW1lKSA9PiB2YXJpYXRpb25GaWVsZFthdHRyaWJ1dGVOYW1lXSlcbiAgICAubWFwKChhdHRyaWJ1dGVOYW1lKSA9PiBmaWxlVHlwZU1hcHBpbmdbYXR0cmlidXRlTmFtZV0pO1xuXG4gIHJldHVybiBhbGxvd2VkVHlwZXMuam9pbignLCcpO1xufVxuXG5jb25zdCBtZXJjaGkgPSBuZXcgTWVyY2hpKCk7XG5cbmZ1bmN0aW9uIGVuc3VyZVZhcmlhdGlvbk9wdGlvbkZsYWdzKHZhcmlhdGlvbjogYW55KSB7XG4gIGlmICh2YXJpYXRpb24uaXNWaXNpYmxlID09PSB1bmRlZmluZWQpIHZhcmlhdGlvbi5pc1Zpc2libGUgPSB0cnVlO1xuICAodmFyaWF0aW9uLnNlbGVjdGFibGVPcHRpb25zIHx8IFtdKS5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xuICAgIGlmIChvcHRpb24uaXNWaXNpYmxlID09PSB1bmRlZmluZWQpIG9wdGlvbi5pc1Zpc2libGUgPSB0cnVlO1xuICAgIGlmIChvcHRpb24uYXZhaWxhYmxlID09PSB1bmRlZmluZWQpIG9wdGlvbi5hdmFpbGFibGUgPSB0cnVlO1xuICB9KTtcbn1cblxuLyoqIEJ1aWxkIGEgZGVmYXVsdCB2YXJpYXRpb24gSlNPTiBmb3IgYSBwcm9kdWN0IHZhcmlhdGlvbiBmaWVsZCAoZ2F0ZWQgZmllbGRzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtcHR5VmFyaWF0aW9uRnJvbUZpZWxkKGZpZWxkOiBhbnkpIHtcbiAgY29uc3QgZmllbGRFbnQgPSBuZXcgbWVyY2hpLlZhcmlhdGlvbkZpZWxkKCk7XG4gIGZpZWxkRW50LmZyb21Kc29uKHsgLi4uZmllbGQgfSwgeyBtYWtlRGlydHk6IGZhbHNlIH0pO1xuICBjb25zdCB2YXJpYXRpb25Kc29uID0gZmllbGRFbnQuYnVpbGRFbXB0eVZhcmlhdGlvbigpLnRvSnNvbigpO1xuICBlbnN1cmVWYXJpYXRpb25PcHRpb25GbGFncyh2YXJpYXRpb25Kc29uKTtcbiAgcmV0dXJuIHZhcmlhdGlvbkpzb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtcHR5VmFyaWF0aW9uR3JvdXAocHJvZHVjdDogYW55KSB7XG4gIGNvbnN0IHByb2R1Y3RFbnQgPSBuZXcgbWVyY2hpLlByb2R1Y3QoKTtcbiAgcHJvZHVjdEVudC5mcm9tSnNvbih7Li4ucHJvZHVjdH0sIHsgbWFrZURpcnR5OiBmYWxzZX0pO1xuICBjb25zdCBuZXdHcm91cCA9IG5ldyBwcm9kdWN0RW50LmJ1aWxkRW1wdHlWYXJpYXRpb25Hcm91cCgpO1xuICBuZXdHcm91cC5ncm91cENvc3QgPSAwO1xuICBuZXdHcm91cC5xdWFudGl0eSA9IGRlZmF1bHRHcm91cFF1YW50aXR5KHByb2R1Y3QpO1xuICBjb25zdCBncm91cEpzb24gPSBuZXdHcm91cC50b0pzb24oKTtcbiAgLy8gVGhlIFNESydzIGJ1aWxkVmFyaWF0aW9uT3B0aW9uIGRvZXMgbm90IHNldCBgaXNWaXNpYmxlYC9gYXZhaWxhYmxlYCBvbiB0aGVcbiAgLy8gYnVpbHQgc2VsZWN0YWJsZSBvcHRpb25zLiBJbiBzZXJ2ZXIgbW9kZSB0aGVzZSBhcmUgcmVwb3B1bGF0ZWQgYnkgdGhlXG4gIC8vIGVzdGltYXRlIHJvdW5kLXRyaXAgKyBmb3JtIHJlc2V0LCBidXQgaW4gY2xpZW50IG1vZGUgKG5vIHJvdW5kLXRyaXApIHRoZVxuICAvLyBvcHRpb25zIHdvdWxkIHJlbmRlciBkaXNhYmxlZCAoXCItIGRpc2FibGVkXCIpLiBEZWZhdWx0IHRoZW0gaGVyZSBzbyBhIGZyZXNobHlcbiAgLy8gYWRkZWQgZ3JvdXAgaXMgdXNhYmxlOyBvcHRpb24tbGV2ZWwgY29uZGl0aW9uYWwgdmlzaWJpbGl0eSAoc2VsZWN0ZWRCeSkgaXNcbiAgLy8gcmVzb2x2ZWQgb24gc3Vic2VxdWVudCBpbnRlcmFjdGlvbnMgaW4gc2VydmVyIG1vZGUuXG4gIChncm91cEpzb24udmFyaWF0aW9ucyB8fCBbXSkuZm9yRWFjaChlbnN1cmVWYXJpYXRpb25PcHRpb25GbGFncyk7XG4gIHJldHVybiBncm91cEpzb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RTdXBwbGllck1PRChwcm9kdWN0OiBhbnkpIHtcbiAgY29uc3QgcHJvZHVjdFR5cGUgPSBwcm9kdWN0ICYmIHByb2R1Y3QucHJvZHVjdFR5cGU7XG4gIHJldHVybiAoXG4gICAgcHJvZHVjdCAmJlxuICAgIFtcbiAgICAgIFN0cmluZyhQcm9kdWN0VHlwZS5TVVBQTElFUl9NT0QpLFxuICAgICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX1JFU0VMTF9NT0QpLFxuICAgIF0uaW5jbHVkZXMoU3RyaW5nKHByb2R1Y3RUeXBlKSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZHVjdFR5cGVGaWxlRG93bmxvYWQocHJvZHVjdFR5cGU6IGFueSkge1xuICByZXR1cm4gcGFyc2VJbnQocHJvZHVjdFR5cGUsIDEwKSA9PT0gUHJvZHVjdFR5cGUuU0VMTEVSX0ZJTEVfRE9XTkxPQUQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3RGaWxlRG93bmxvYWQocHJvZHVjdDogYW55KSB7XG4gIGNvbnN0IHsgcHJvZHVjdFR5cGUgfSA9IHByb2R1Y3Q7XG4gIHJldHVybiBpc1Byb2R1Y3RUeXBlRmlsZURvd25sb2FkKHByb2R1Y3RUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZHVjdExlYWRGb3JtKHByb2R1Y3Q6IGFueSkge1xuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZTtcbiAgcmV0dXJuIHBhcnNlSW50KHByb2R1Y3RUeXBlLCAxMCkgPT09IFByb2R1Y3RUeXBlLkxFQURfRk9STTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzb0NvdW50cmllczogYW55ID0ge1xuICBBRjogJ0FmZ2hhbmlzdGFuJyxcbiAgQVg6ICdBbGFuZCBJc2xhbmRzJyxcbiAgQUw6ICdBbGJhbmlhJyxcbiAgRFo6ICdBbGdlcmlhJyxcbiAgQVM6ICdBbWVyaWNhbiBTYW1vYScsXG4gIEFEOiAnQW5kb3JyYScsXG4gIEFPOiAnQW5nb2xhJyxcbiAgQUk6ICdBbmd1aWxsYScsXG4gIEFROiAnQW50YXJjdGljYScsXG4gIEFHOiAnQW50aWd1YSBBbmQgQmFyYnVkYScsXG4gIEFSOiAnQXJnZW50aW5hJyxcbiAgQU06ICdBcm1lbmlhJyxcbiAgQVc6ICdBcnViYScsXG4gIEFVOiAnQXVzdHJhbGlhJyxcbiAgQVQ6ICdBdXN0cmlhJyxcbiAgQVo6ICdBemVyYmFpamFuJyxcbiAgQlM6ICdCYWhhbWFzJyxcbiAgQkg6ICdCYWhyYWluJyxcbiAgQkQ6ICdCYW5nbGFkZXNoJyxcbiAgQkI6ICdCYXJiYWRvcycsXG4gIEJZOiAnQmVsYXJ1cycsXG4gIEJFOiAnQmVsZ2l1bScsXG4gIEJaOiAnQmVsaXplJyxcbiAgQko6ICdCZW5pbicsXG4gIEJNOiAnQmVybXVkYScsXG4gIEJUOiAnQmh1dGFuJyxcbiAgQk86ICdCb2xpdmlhJyxcbiAgQkE6ICdCb3NuaWEgQW5kIEhlcnplZ292aW5hJyxcbiAgQlc6ICdCb3Rzd2FuYScsXG4gIEJWOiAnQm91dmV0IElzbGFuZCcsXG4gIEJSOiAnQnJhemlsJyxcbiAgSU86ICdCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnknLFxuICBCTjogJ0JydW5laSBEYXJ1c3NhbGFtJyxcbiAgQkc6ICdCdWxnYXJpYScsXG4gIEJGOiAnQnVya2luYSBGYXNvJyxcbiAgQkk6ICdCdXJ1bmRpJyxcbiAgS0g6ICdDYW1ib2RpYScsXG4gIENNOiAnQ2FtZXJvb24nLFxuICBDQTogJ0NhbmFkYScsXG4gIENWOiAnQ2FwZSBWZXJkZScsXG4gIEtZOiAnQ2F5bWFuIElzbGFuZHMnLFxuICBDRjogJ0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYycsXG4gIFREOiAnQ2hhZCcsXG4gIENMOiAnQ2hpbGUnLFxuICBDTjogJ0NoaW5hJyxcbiAgQ1g6ICdDaHJpc3RtYXMgSXNsYW5kJyxcbiAgQ0M6ICdDb2NvcyAoS2VlbGluZykgSXNsYW5kcycsXG4gIENPOiAnQ29sb21iaWEnLFxuICBLTTogJ0NvbW9yb3MnLFxuICBDRzogJ0NvbmdvJyxcbiAgQ0Q6ICdDb25nbywgRGVtb2NyYXRpYyBSZXB1YmxpYycsXG4gIENLOiAnQ29vayBJc2xhbmRzJyxcbiAgQ1I6ICdDb3N0YSBSaWNhJyxcbiAgQ0k6IFwiQ290ZSBEJ0l2b2lyZVwiLFxuICBIUjogJ0Nyb2F0aWEnLFxuICBDVTogJ0N1YmEnLFxuICBDWTogJ0N5cHJ1cycsXG4gIENaOiAnQ3plY2ggUmVwdWJsaWMnLFxuICBESzogJ0Rlbm1hcmsnLFxuICBESjogJ0RqaWJvdXRpJyxcbiAgRE06ICdEb21pbmljYScsXG4gIERPOiAnRG9taW5pY2FuIFJlcHVibGljJyxcbiAgRUM6ICdFY3VhZG9yJyxcbiAgRUc6ICdFZ3lwdCcsXG4gIFNWOiAnRWwgU2FsdmFkb3InLFxuICBHUTogJ0VxdWF0b3JpYWwgR3VpbmVhJyxcbiAgRVI6ICdFcml0cmVhJyxcbiAgRUU6ICdFc3RvbmlhJyxcbiAgRVQ6ICdFdGhpb3BpYScsXG4gIEZLOiAnRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpJyxcbiAgRk86ICdGYXJvZSBJc2xhbmRzJyxcbiAgRko6ICdGaWppJyxcbiAgRkk6ICdGaW5sYW5kJyxcbiAgRlI6ICdGcmFuY2UnLFxuICBHRjogJ0ZyZW5jaCBHdWlhbmEnLFxuICBQRjogJ0ZyZW5jaCBQb2x5bmVzaWEnLFxuICBURjogJ0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcycsXG4gIEdBOiAnR2Fib24nLFxuICBHTTogJ0dhbWJpYScsXG4gIEdFOiAnR2VvcmdpYScsXG4gIERFOiAnR2VybWFueScsXG4gIEdIOiAnR2hhbmEnLFxuICBHSTogJ0dpYnJhbHRhcicsXG4gIEdSOiAnR3JlZWNlJyxcbiAgR0w6ICdHcmVlbmxhbmQnLFxuICBHRDogJ0dyZW5hZGEnLFxuICBHUDogJ0d1YWRlbG91cGUnLFxuICBHVTogJ0d1YW0nLFxuICBHVDogJ0d1YXRlbWFsYScsXG4gIEdHOiAnR3Vlcm5zZXknLFxuICBHTjogJ0d1aW5lYScsXG4gIEdXOiAnR3VpbmVhLUJpc3NhdScsXG4gIEdZOiAnR3V5YW5hJyxcbiAgSFQ6ICdIYWl0aScsXG4gIEhNOiAnSGVhcmQgSXNsYW5kICYgTWNkb25hbGQgSXNsYW5kcycsXG4gIFZBOiAnSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSknLFxuICBITjogJ0hvbmR1cmFzJyxcbiAgSEs6ICdIb25nIEtvbmcnLFxuICBIVTogJ0h1bmdhcnknLFxuICBJUzogJ0ljZWxhbmQnLFxuICBJTjogJ0luZGlhJyxcbiAgSUQ6ICdJbmRvbmVzaWEnLFxuICBJUjogJ0lyYW4sIElzbGFtaWMgUmVwdWJsaWMgT2YnLFxuICBJUTogJ0lyYXEnLFxuICBJRTogJ0lyZWxhbmQnLFxuICBJTTogJ0lzbGUgT2YgTWFuJyxcbiAgSUw6ICdJc3JhZWwnLFxuICBJVDogJ0l0YWx5JyxcbiAgSk06ICdKYW1haWNhJyxcbiAgSlA6ICdKYXBhbicsXG4gIEpFOiAnSmVyc2V5JyxcbiAgSk86ICdKb3JkYW4nLFxuICBLWjogJ0themFraHN0YW4nLFxuICBLRTogJ0tlbnlhJyxcbiAgS0k6ICdLaXJpYmF0aScsXG4gIEtSOiAnS29yZWEnLFxuICBLVzogJ0t1d2FpdCcsXG4gIEtHOiAnS3lyZ3l6c3RhbicsXG4gIExBOiBcIkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljXCIsXG4gIExWOiAnTGF0dmlhJyxcbiAgTEI6ICdMZWJhbm9uJyxcbiAgTFM6ICdMZXNvdGhvJyxcbiAgTFI6ICdMaWJlcmlhJyxcbiAgTFk6ICdMaWJ5YW4gQXJhYiBKYW1haGlyaXlhJyxcbiAgTEk6ICdMaWVjaHRlbnN0ZWluJyxcbiAgTFQ6ICdMaXRodWFuaWEnLFxuICBMVTogJ0x1eGVtYm91cmcnLFxuICBNTzogJ01hY2FvJyxcbiAgTUs6ICdNYWNlZG9uaWEnLFxuICBNRzogJ01hZGFnYXNjYXInLFxuICBNVzogJ01hbGF3aScsXG4gIE1ZOiAnTWFsYXlzaWEnLFxuICBNVjogJ01hbGRpdmVzJyxcbiAgTUw6ICdNYWxpJyxcbiAgTVQ6ICdNYWx0YScsXG4gIE1IOiAnTWFyc2hhbGwgSXNsYW5kcycsXG4gIE1ROiAnTWFydGluaXF1ZScsXG4gIE1SOiAnTWF1cml0YW5pYScsXG4gIE1VOiAnTWF1cml0aXVzJyxcbiAgWVQ6ICdNYXlvdHRlJyxcbiAgTVg6ICdNZXhpY28nLFxuICBGTTogJ01pY3JvbmVzaWEsIEZlZGVyYXRlZCBTdGF0ZXMgT2YnLFxuICBNRDogJ01vbGRvdmEnLFxuICBNQzogJ01vbmFjbycsXG4gIE1OOiAnTW9uZ29saWEnLFxuICBNRTogJ01vbnRlbmVncm8nLFxuICBNUzogJ01vbnRzZXJyYXQnLFxuICBNQTogJ01vcm9jY28nLFxuICBNWjogJ01vemFtYmlxdWUnLFxuICBNTTogJ015YW5tYXInLFxuICBOQTogJ05hbWliaWEnLFxuICBOUjogJ05hdXJ1JyxcbiAgTlA6ICdOZXBhbCcsXG4gIE5MOiAnTmV0aGVybGFuZHMnLFxuICBBTjogJ05ldGhlcmxhbmRzIEFudGlsbGVzJyxcbiAgTkM6ICdOZXcgQ2FsZWRvbmlhJyxcbiAgTlo6ICdOZXcgWmVhbGFuZCcsXG4gIE5JOiAnTmljYXJhZ3VhJyxcbiAgTkU6ICdOaWdlcicsXG4gIE5HOiAnTmlnZXJpYScsXG4gIE5VOiAnTml1ZScsXG4gIE5GOiAnTm9yZm9sayBJc2xhbmQnLFxuICBNUDogJ05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcycsXG4gIE5POiAnTm9yd2F5JyxcbiAgT006ICdPbWFuJyxcbiAgUEs6ICdQYWtpc3RhbicsXG4gIFBXOiAnUGFsYXUnLFxuICBQUzogJ1BhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQnLFxuICBQQTogJ1BhbmFtYScsXG4gIFBHOiAnUGFwdWEgTmV3IEd1aW5lYScsXG4gIFBZOiAnUGFyYWd1YXknLFxuICBQRTogJ1BlcnUnLFxuICBQSDogJ1BoaWxpcHBpbmVzJyxcbiAgUE46ICdQaXRjYWlybicsXG4gIFBMOiAnUG9sYW5kJyxcbiAgUFQ6ICdQb3J0dWdhbCcsXG4gIFBSOiAnUHVlcnRvIFJpY28nLFxuICBRQTogJ1FhdGFyJyxcbiAgUkU6ICdSZXVuaW9uJyxcbiAgUk86ICdSb21hbmlhJyxcbiAgUlU6ICdSdXNzaWFuIEZlZGVyYXRpb24nLFxuICBSVzogJ1J3YW5kYScsXG4gIEJMOiAnU2FpbnQgQmFydGhlbGVteScsXG4gIFNIOiAnU2FpbnQgSGVsZW5hJyxcbiAgS046ICdTYWludCBLaXR0cyBBbmQgTmV2aXMnLFxuICBMQzogJ1NhaW50IEx1Y2lhJyxcbiAgTUY6ICdTYWludCBNYXJ0aW4nLFxuICBQTTogJ1NhaW50IFBpZXJyZSBBbmQgTWlxdWVsb24nLFxuICBWQzogJ1NhaW50IFZpbmNlbnQgQW5kIEdyZW5hZGluZXMnLFxuICBXUzogJ1NhbW9hJyxcbiAgU006ICdTYW4gTWFyaW5vJyxcbiAgU1Q6ICdTYW8gVG9tZSBBbmQgUHJpbmNpcGUnLFxuICBTQTogJ1NhdWRpIEFyYWJpYScsXG4gIFNOOiAnU2VuZWdhbCcsXG4gIFJTOiAnU2VyYmlhJyxcbiAgU0M6ICdTZXljaGVsbGVzJyxcbiAgU0w6ICdTaWVycmEgTGVvbmUnLFxuICBTRzogJ1NpbmdhcG9yZScsXG4gIFNLOiAnU2xvdmFraWEnLFxuICBTSTogJ1Nsb3ZlbmlhJyxcbiAgU0I6ICdTb2xvbW9uIElzbGFuZHMnLFxuICBTTzogJ1NvbWFsaWEnLFxuICBaQTogJ1NvdXRoIEFmcmljYScsXG4gIEdTOiAnU291dGggR2VvcmdpYSBBbmQgU2FuZHdpY2ggSXNsLicsXG4gIEVTOiAnU3BhaW4nLFxuICBMSzogJ1NyaSBMYW5rYScsXG4gIFNEOiAnU3VkYW4nLFxuICBTUjogJ1N1cmluYW1lJyxcbiAgU0o6ICdTdmFsYmFyZCBBbmQgSmFuIE1heWVuJyxcbiAgU1o6ICdTd2F6aWxhbmQnLFxuICBTRTogJ1N3ZWRlbicsXG4gIENIOiAnU3dpdHplcmxhbmQnLFxuICBTWTogJ1N5cmlhbiBBcmFiIFJlcHVibGljJyxcbiAgVFc6ICdUYWl3YW4nLFxuICBUSjogJ1RhamlraXN0YW4nLFxuICBUWjogJ1RhbnphbmlhJyxcbiAgVEg6ICdUaGFpbGFuZCcsXG4gIFRMOiAnVGltb3ItTGVzdGUnLFxuICBURzogJ1RvZ28nLFxuICBUSzogJ1Rva2VsYXUnLFxuICBUTzogJ1RvbmdhJyxcbiAgVFQ6ICdUcmluaWRhZCBBbmQgVG9iYWdvJyxcbiAgVE46ICdUdW5pc2lhJyxcbiAgVFI6ICdUdXJrZXknLFxuICBUTTogJ1R1cmttZW5pc3RhbicsXG4gIFRDOiAnVHVya3MgQW5kIENhaWNvcyBJc2xhbmRzJyxcbiAgVFY6ICdUdXZhbHUnLFxuICBVRzogJ1VnYW5kYScsXG4gIFVBOiAnVWtyYWluZScsXG4gIEFFOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMnLFxuICBHQjogJ1VuaXRlZCBLaW5nZG9tJyxcbiAgVVM6ICdVbml0ZWQgU3RhdGVzJyxcbiAgVU06ICdVbml0ZWQgU3RhdGVzIE91dGx5aW5nIElzbGFuZHMnLFxuICBVWTogJ1VydWd1YXknLFxuICBVWjogJ1V6YmVraXN0YW4nLFxuICBWVTogJ1ZhbnVhdHUnLFxuICBWRTogJ1ZlbmV6dWVsYScsXG4gIFZOOiAnVmlldCBOYW0nLFxuICBWRzogJ1ZpcmdpbiBJc2xhbmRzLCBCcml0aXNoJyxcbiAgVkk6ICdWaXJnaW4gSXNsYW5kcywgVS5TLicsXG4gIFdGOiAnV2FsbGlzIEFuZCBGdXR1bmEnLFxuICBFSDogJ1dlc3Rlcm4gU2FoYXJhJyxcbiAgWUU6ICdZZW1lbicsXG4gIFpNOiAnWmFtYmlhJyxcbiAgWlc6ICdaaW1iYWJ3ZScsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWUoY291bnRyeUNvZGU6IGFueSkge1xuICBpZiAoaXNvQ291bnRyaWVzLmhhc093blByb3BlcnR5KGNvdW50cnlDb2RlKSkge1xuICAgIHJldHVybiBpc29Db3VudHJpZXNbY291bnRyeUNvZGVdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb3VudHJ5Q29kZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5UYWdJZHMocmF3OiBhbnlbXSkge1xuICByZXR1cm4gcmF3Lm1hcChpZCA9PiBpZC50cmltKCkpICAgICAgICAgICAgLy8gVHJpbSBlYWNoIElEIGVudHJ5IHRvIHJlbW92ZSB3aGl0ZXNwYWNlXG4gICAgLmZpbHRlcihpZCA9PiAvXlxcZCskLy50ZXN0KGlkKSkgIC8vIFVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBlbnN1cmUgdGhlIElEIGlzIGVudGlyZWx5IG51bWVyaWMuXG4gICAgLm1hcChpZCA9PiBOdW1iZXIoaWQpKTsgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmVtYWluaW5nLCB2YWxpZCBJRCBlbnRyaWVzIGludG8gbnVtYmVyc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVyY2hpU291cmNlSm9iVGFncygpOiBhbnlbXSB7XG4gIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhbFN0b3JhZ2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBtZXJjaGlTb3VyY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVyY2hpX3NvdXJjZScpO1xuXG4gICAgaWYgKG1lcmNoaVNvdXJjZSkge1xuICAgICAgY29uc3QgaWRzID0gY2xlYW5UYWdJZHMobWVyY2hpU291cmNlLnNwbGl0KCcsJykpO1xuICAgICAgcmV0dXJuIGlkcy5tYXAoKGlkOiBudW1iZXIpID0+ICh7IGlkIH0pKTtcbiAgICB9XG4gICAgLy8gSWYgXCJtZXJjaGlfc291cmNlXCIgaXMgbm90IGZvdW5kIGluIGxvY2FsU3RvcmFnZSwgcmV0dXJuIGFuIGVtcHR5IGFycmF5LlxuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QnlQb3NpdGlvbihvcHRpb25zOiBhbnlbXSk6IGFueVtdIHtcbiAgcmV0dXJuIG9wdGlvbnMubWFwKChvYmo6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdHlwZW9mIG9iai5wb3NpdGlvbiA9PT0gJ3N0cmluZydcbiAgICAgID8gcGFyc2VJbnQob2JqLnBvc2l0aW9uLCAxMClcbiAgICAgIDogb2JqLnBvc2l0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vYmosXG4gICAgICBwb3NpdGlvbjogdHlwZW9mIHBvc2l0aW9uID09PSAnbnVtYmVyJyA/IHBvc2l0aW9uIDogMCxcbiAgICB9O1xuICB9KS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVBvc2l0aW9uID0gdHlwZW9mIGEucG9zaXRpb24gPT09ICdudW1iZXInID8gYS5wb3NpdGlvbiA6IDA7XG4gICAgY29uc3QgYlBvc2l0aW9uID0gdHlwZW9mIGIucG9zaXRpb24gPT09ICdudW1iZXInID8gYi5wb3NpdGlvbiA6IDA7XG4gICAgcmV0dXJuIGFQb3NpdGlvbiAtIGJQb3NpdGlvbjtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkpvYlZhcmlhdGlvbnNBbmRHcm91cHMoam9iSnNvbjogYW55KSB7XG4gIGNvbnN0IHsgdmFyaWF0aW9ucywgdmFyaWF0aW9uc0dyb3VwcyB9ID0gam9iSnNvbjtcbiAgY29uc3QgaGFzR3JvdXBzID0gQm9vbGVhbih2YXJpYXRpb25zR3JvdXBzICYmIHZhcmlhdGlvbnNHcm91cHMubGVuZ3RoKTtcbiAgY29uc3QgaGFzVmFyaWF0aW9ucyA9IEJvb2xlYW4odmFyaWF0aW9ucyAmJiB2YXJpYXRpb25zLmxlbmd0aCk7XG4gIFxuICAvLyBMb29wIG92ZXIgaW5kaXZpZHVhbCB2YXJpYXRpb25zIGFuZCBjaGVjayBpZiB0aGUgdmFyaWF0aW9uIGlzIGEganNvbiBzdHJpbmcsIGlmIGl0IGlzIGNvbnZlcnQgaXQgdG8gYW4gb2JqZWN0XG4gIGlmIChoYXNWYXJpYXRpb25zKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXJpYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXJpYXRpb25zW2ldID0gY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbih2YXJpYXRpb25zW2ldKTtcbiAgICB9XG4gICAgam9iSnNvbi52YXJpYXRpb25zID0gdmFyaWF0aW9ucztcbiAgfVxuICBcbiAgaWYgKGhhc0dyb3Vwcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFyaWF0aW9uc0dyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgcXVhbnRpdHkgaWYgbm90IHByZXNlbnRcbiAgICAgIGNvbnN0IGdyb3VwID0gdmFyaWF0aW9uc0dyb3Vwc1tpXTtcbiAgICAgIGlmICghZ3JvdXAucXVhbnRpdHkpIHtcbiAgICAgICAgZ3JvdXAucXVhbnRpdHkgPSAwO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBIYW5kbGUgdmFyaWF0aW9ucyB3aXRoaW4gdGhlIGdyb3VwIC0gY29udmVydCBKU09OIHN0cmluZ3MgdG8gb2JqZWN0c1xuICAgICAgaWYgKGdyb3VwLnZhcmlhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShncm91cC52YXJpYXRpb25zKSkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwLnZhcmlhdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBncm91cC52YXJpYXRpb25zW2pdID0gY2xlYW5Gb3JtVmFyaWF0aW9uSnNvbihncm91cC52YXJpYXRpb25zW2pdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBqb2JKc29uLnZhcmlhdGlvbnNHcm91cHMgPSB2YXJpYXRpb25zR3JvdXBzO1xuICB9XG4gIFxuICByZXR1cm4gam9iSnNvbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsTUFBTSxRQUFRLGFBQWE7QUFDcEMsU0FBU0MsY0FBYyxRQUFRLG1CQUFtQjtBQUNsRCxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsUUFBUSxnQkFBZ0I7QUFDdkQsU0FBU0Msc0JBQXNCLFFBQVEsaUNBQWlDO0FBQ3hFLFNBQVNBLHNCQUFzQixRQUFRLGlDQUFpQztBQUN4RSxTQUFTQyxvQkFBb0IsUUFBUSxtQkFBbUI7QUFDeEQsU0FDRUEsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLHNCQUFzQixFQUN0QkMsZUFBZSxRQUNWLG1CQUFtQjtBQUMxQixJQUFNQyxpQkFBaUIsR0FBR0MsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO0FBRXBFLFNBQVNDLDBCQUEwQkEsQ0FDakNDLElBQVMsRUFDVEMsWUFBaUIsRUFDakJDLGNBQXNCLEVBQ3RCO0VBQ0EsSUFBSUMsZUFBZSxHQUFHO0lBQUVDLFFBQVEsRUFBRUgsWUFBWTtJQUFFSSxrQkFBa0IsRUFBRTtFQUFNLENBQUM7RUFDM0UsSUFBSUMsVUFBVSxHQUFHLEVBQUU7RUFDbkIsSUFBTUMsTUFBTSxHQUFHQyxVQUFVLENBQUNSLElBQUksQ0FBQztFQUUvQixJQUFJUyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsTUFBTSxDQUFDLElBQUlBLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDekNELFVBQVUsR0FBR2pCLGNBQWMsQ0FBQ2tCLE1BQU0sRUFBRUosZUFBZSxDQUFDO0lBQ3BERyxVQUFVLEdBQUcsS0FBSyxHQUFHQSxVQUFVLEdBQUcsR0FBRyxHQUFHSixjQUFjO0VBQ3hEO0VBQ0EsT0FBT0ksVUFBVTtBQUNuQjtBQUVBLElBQU1LLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJQyxXQUFnQixFQUFFQyxRQUFhLEVBQUVa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
|