@sapui5/sap.fe.core 1.124.3 → 1.124.4
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/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +38 -37
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +40 -39
- package/src/sap/fe/core/converters/ManifestWrapper.js +3 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +47 -38
- package/src/sap/fe/core/converters/controls/Common/Table.ts +33 -25
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +33 -37
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +30 -28
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
|
@@ -421,46 +421,52 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
421
421
|
});
|
|
422
422
|
}
|
|
423
423
|
/**
|
|
424
|
-
* Sets the 'unit' and '
|
|
424
|
+
* Sets the 'unit', 'textArrangement', 'timezone' and 'exportsettings' properties in columns when necessary.
|
|
425
425
|
*
|
|
426
426
|
* @param entityType The entity type displayed in the table
|
|
427
427
|
* @param tableColumns The columns to be updated
|
|
428
428
|
*/
|
|
429
429
|
function updateLinkedProperties(entityType, tableColumns) {
|
|
430
430
|
tableColumns.forEach(oColumn => {
|
|
431
|
-
const
|
|
432
|
-
if (
|
|
433
|
-
const
|
|
434
|
-
if (
|
|
435
|
-
var
|
|
436
|
-
const
|
|
437
|
-
const
|
|
438
|
-
const
|
|
439
|
-
if (
|
|
440
|
-
const
|
|
441
|
-
|
|
431
|
+
const tableColumn = oColumn;
|
|
432
|
+
if (tableColumn.propertyInfos === undefined && tableColumn.relativePath) {
|
|
433
|
+
const property = entityType.entityProperties.find(prop => prop.name === tableColumn.relativePath);
|
|
434
|
+
if (property) {
|
|
435
|
+
var _property$annotations, _property$annotations2, _property$annotations7;
|
|
436
|
+
const unitProperty = getAssociatedCurrencyProperty(property) || getAssociatedUnitProperty(property);
|
|
437
|
+
const timezoneProperty = getAssociatedTimezoneProperty(property);
|
|
438
|
+
const timezone = property === null || property === void 0 ? void 0 : (_property$annotations = property.annotations) === null || _property$annotations === void 0 ? void 0 : (_property$annotations2 = _property$annotations.Common) === null || _property$annotations2 === void 0 ? void 0 : _property$annotations2.Timezone;
|
|
439
|
+
if (unitProperty) {
|
|
440
|
+
const unitColumn = findColumnByPath(unitProperty.name, tableColumns);
|
|
441
|
+
tableColumn.unit = unitColumn === null || unitColumn === void 0 ? void 0 : unitColumn.name;
|
|
442
442
|
} else {
|
|
443
|
-
var
|
|
444
|
-
const
|
|
445
|
-
if (
|
|
446
|
-
|
|
443
|
+
var _property$annotations3, _property$annotations4, _property$annotations5, _property$annotations6;
|
|
444
|
+
const unit = (property === null || property === void 0 ? void 0 : (_property$annotations3 = property.annotations) === null || _property$annotations3 === void 0 ? void 0 : (_property$annotations4 = _property$annotations3.Measures) === null || _property$annotations4 === void 0 ? void 0 : _property$annotations4.ISOCurrency) || (property === null || property === void 0 ? void 0 : (_property$annotations5 = property.annotations) === null || _property$annotations5 === void 0 ? void 0 : (_property$annotations6 = _property$annotations5.Measures) === null || _property$annotations6 === void 0 ? void 0 : _property$annotations6.Unit);
|
|
445
|
+
if (unit) {
|
|
446
|
+
tableColumn.unitText = `${unit}`;
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
|
-
if (
|
|
450
|
-
const oTimezoneColumn = findColumnByPath(
|
|
451
|
-
|
|
452
|
-
} else if (
|
|
453
|
-
|
|
449
|
+
if (timezoneProperty) {
|
|
450
|
+
const oTimezoneColumn = findColumnByPath(timezoneProperty.name, tableColumns);
|
|
451
|
+
tableColumn.timezone = oTimezoneColumn === null || oTimezoneColumn === void 0 ? void 0 : oTimezoneColumn.name;
|
|
452
|
+
} else if (timezone) {
|
|
453
|
+
tableColumn.timezoneText = timezone.toString();
|
|
454
454
|
}
|
|
455
|
-
const displayMode = getDisplayMode(
|
|
456
|
-
textAnnotation = (
|
|
455
|
+
const displayMode = getDisplayMode(property),
|
|
456
|
+
textAnnotation = (_property$annotations7 = property.annotations.Common) === null || _property$annotations7 === void 0 ? void 0 : _property$annotations7.Text;
|
|
457
457
|
if (isPathAnnotationExpression(textAnnotation) && displayMode !== "Value") {
|
|
458
|
-
const
|
|
459
|
-
if (
|
|
460
|
-
|
|
461
|
-
textProperty:
|
|
458
|
+
const textColumn = findColumnByPath(textAnnotation.path, tableColumns);
|
|
459
|
+
if (textColumn && textColumn.name !== tableColumn.name) {
|
|
460
|
+
tableColumn.textArrangement = {
|
|
461
|
+
textProperty: textColumn.name,
|
|
462
462
|
mode: displayMode
|
|
463
463
|
};
|
|
464
|
+
// If text properties are used but hidden, we must include them to the export as there are used in the paste
|
|
465
|
+
if (!textColumn.exportSettings) {
|
|
466
|
+
textColumn.exportSettings = {
|
|
467
|
+
type: "String"
|
|
468
|
+
};
|
|
469
|
+
}
|
|
464
470
|
}
|
|
465
471
|
}
|
|
466
472
|
}
|
|
@@ -1156,9 +1162,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
1156
1162
|
// but also the property itself as it can be used as within the sortConditions or on custom columns.
|
|
1157
1163
|
// This step must be valid also from the columns added via LineItems or from a column available on the p13n.
|
|
1158
1164
|
if (getDisplayMode(property) === "Description") {
|
|
1159
|
-
var _property$
|
|
1165
|
+
var _property$annotations8, _property$annotations9;
|
|
1160
1166
|
restrictionsOnProperties === null || restrictionsOnProperties === void 0 ? void 0 : restrictionsOnProperties.nonSortableProperties.push(property.name);
|
|
1161
|
-
if (isPathAnnotationExpression(property === null || property === void 0 ? void 0 : (_property$
|
|
1167
|
+
if (isPathAnnotationExpression(property === null || property === void 0 ? void 0 : (_property$annotations8 = property.annotations) === null || _property$annotations8 === void 0 ? void 0 : (_property$annotations9 = _property$annotations8.Common) === null || _property$annotations9 === void 0 ? void 0 : _property$annotations9.Text)) {
|
|
1162
1168
|
tableColumns.push(getColumnDefinitionFromProperty(property, converterContext.getEntitySetBasedAnnotationPath(property.fullyQualifiedName), property.name, false, false, aggregationHelper, converterContext, displayModeOfDescriptionPropertiesMap, restrictionsOnProperties, tableCreationMode));
|
|
1163
1169
|
}
|
|
1164
1170
|
}
|
|
@@ -1185,7 +1191,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
1185
1191
|
*/
|
|
1186
1192
|
_exports.getColumnsFromEntityType = getColumnsFromEntityType;
|
|
1187
1193
|
const getColumnDefinitionFromProperty = function (property, fullPropertyPath, relativePath, useDataFieldPrefix, availableForAdaptation, aggregationHelper, converterContext, displayModeOfDescriptionPropertiesMap, restrictionsOnProperties, tableCreationMode, relatedPropertiesInfo) {
|
|
1188
|
-
var _property$
|
|
1194
|
+
var _property$annotations10, _property$annotations11;
|
|
1189
1195
|
const name = useDataFieldPrefix ? relativePath : `Property::${relativePath}`;
|
|
1190
1196
|
const key = (useDataFieldPrefix ? "DataField::" : "Property::") + replaceSpecialChars(relativePath);
|
|
1191
1197
|
const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, property);
|
|
@@ -1227,7 +1233,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
1227
1233
|
exportSettings: exportSettings,
|
|
1228
1234
|
caseSensitive: isFilteringCaseSensitive(converterContext),
|
|
1229
1235
|
typeConfig: typeConfig,
|
|
1230
|
-
importance: getImportance(converterContext, (_property$
|
|
1236
|
+
importance: getImportance(converterContext, (_property$annotations10 = property.annotations) === null || _property$annotations10 === void 0 ? void 0 : (_property$annotations11 = _property$annotations10.UI) === null || _property$annotations11 === void 0 ? void 0 : _property$annotations11.DataFieldDefault),
|
|
1231
1237
|
required: isRequiredColumn(converterContext, property, tableCreationMode),
|
|
1232
1238
|
additionalLabels: collectedNavigationPropertyLabels
|
|
1233
1239
|
};
|
|
@@ -1282,6 +1288,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
1282
1288
|
wrap: relatedPropertiesInfo === null || relatedPropertiesInfo === void 0 ? void 0 : relatedPropertiesInfo.exportSettings.wrap,
|
|
1283
1289
|
utc: utc
|
|
1284
1290
|
};
|
|
1291
|
+
if (exportSettings.unitProperty || exportSettings.unit) {
|
|
1292
|
+
exportSettings.autoScale = true;
|
|
1293
|
+
}
|
|
1285
1294
|
return removeUndefinedFromExportSettings(exportSettings);
|
|
1286
1295
|
};
|
|
1287
1296
|
/**
|
|
@@ -1477,13 +1486,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
1477
1486
|
return undefined;
|
|
1478
1487
|
}
|
|
1479
1488
|
if (isProperty(property) || isNavigationProperty(property)) {
|
|
1480
|
-
var _annotations, _annotations$UI2, _property$
|
|
1489
|
+
var _annotations, _annotations$UI2, _property$annotations12, _property$annotations13;
|
|
1481
1490
|
const dataFieldDefault = (_annotations = property.annotations) === null || _annotations === void 0 ? void 0 : (_annotations$UI2 = _annotations.UI) === null || _annotations$UI2 === void 0 ? void 0 : _annotations$UI2.DataFieldDefault;
|
|
1482
1491
|
if (dataFieldDefault && !dataFieldDefault.qualifier && dataFieldDefault.Label) {
|
|
1483
1492
|
var _dataFieldDefault$Lab;
|
|
1484
1493
|
return (_dataFieldDefault$Lab = dataFieldDefault.Label) === null || _dataFieldDefault$Lab === void 0 ? void 0 : _dataFieldDefault$Lab.toString();
|
|
1485
1494
|
}
|
|
1486
|
-
return ((_property$
|
|
1495
|
+
return ((_property$annotations12 = property.annotations.Common) === null || _property$annotations12 === void 0 ? void 0 : (_property$annotations13 = _property$annotations12.Label) === null || _property$annotations13 === void 0 ? void 0 : _property$annotations13.toString()) ?? property.name;
|
|
1487
1496
|
} else if (isDataFieldTypes(property)) {
|
|
1488
1497
|
var _property$Label2, _property$Value, _property$Value$$targ, _property$Value$$targ2, _property$Value$$targ3, _property$Value2, _property$Value2$$tar;
|
|
1489
1498
|
if (!!isGroup && property.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation") {
|
|
@@ -3239,15 +3248,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
3239
3248
|
formatOptions: {}
|
|
3240
3249
|
};
|
|
3241
3250
|
if (isProperty(oProperty) && oTargetMapping !== undefined) {
|
|
3242
|
-
var _oTargetMapping$const, _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oProperty$
|
|
3251
|
+
var _oTargetMapping$const, _oTargetMapping$const2, _oTargetMapping$const3, _oTargetMapping$const4, _oTargetMapping$const5, _oProperty$annotation, _oProperty$annotation2, _oProperty$annotation3, _oProperty$annotation4, _oTargetMapping$const6, _oProperty$annotation5, _oProperty$annotation6, _oProperty$annotation7, _oProperty$annotation8, _oTargetMapping$const7, _oProperty$annotation9, _oProperty$annotation10;
|
|
3243
3252
|
propertyTypeConfig.constraints = {
|
|
3244
3253
|
scale: (_oTargetMapping$const = oTargetMapping.constraints) !== null && _oTargetMapping$const !== void 0 && _oTargetMapping$const.$Scale ? oProperty.scale : undefined,
|
|
3245
3254
|
precision: (_oTargetMapping$const2 = oTargetMapping.constraints) !== null && _oTargetMapping$const2 !== void 0 && _oTargetMapping$const2.$Precision ? oProperty.precision : undefined,
|
|
3246
3255
|
maxLength: (_oTargetMapping$const3 = oTargetMapping.constraints) !== null && _oTargetMapping$const3 !== void 0 && _oTargetMapping$const3.$MaxLength ? oProperty.maxLength : undefined,
|
|
3247
3256
|
nullable: (_oTargetMapping$const4 = oTargetMapping.constraints) !== null && _oTargetMapping$const4 !== void 0 && _oTargetMapping$const4.$Nullable ? oProperty.nullable : undefined,
|
|
3248
|
-
minimum: (_oTargetMapping$const5 = oTargetMapping.constraints) !== null && _oTargetMapping$const5 !== void 0 && _oTargetMapping$const5["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN((_oProperty$
|
|
3249
|
-
maximum: (_oTargetMapping$const6 = oTargetMapping.constraints) !== null && _oTargetMapping$const6 !== void 0 && _oTargetMapping$const6["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN((_oProperty$
|
|
3250
|
-
isDigitSequence: propertyTypeConfig.type === "sap.ui.model.odata.type.String" && (_oTargetMapping$const7 = oTargetMapping.constraints) !== null && _oTargetMapping$const7 !== void 0 && _oTargetMapping$const7[`@${"com.sap.vocabularies.Common.v1.IsDigitSequence"}`] && (_oProperty$
|
|
3257
|
+
minimum: (_oTargetMapping$const5 = oTargetMapping.constraints) !== null && _oTargetMapping$const5 !== void 0 && _oTargetMapping$const5["@Org.OData.Validation.V1.Minimum/$Decimal"] && !isNaN((_oProperty$annotation = oProperty.annotations) === null || _oProperty$annotation === void 0 ? void 0 : (_oProperty$annotation2 = _oProperty$annotation.Validation) === null || _oProperty$annotation2 === void 0 ? void 0 : _oProperty$annotation2.Minimum) ? `${(_oProperty$annotation3 = oProperty.annotations) === null || _oProperty$annotation3 === void 0 ? void 0 : (_oProperty$annotation4 = _oProperty$annotation3.Validation) === null || _oProperty$annotation4 === void 0 ? void 0 : _oProperty$annotation4.Minimum}` : undefined,
|
|
3258
|
+
maximum: (_oTargetMapping$const6 = oTargetMapping.constraints) !== null && _oTargetMapping$const6 !== void 0 && _oTargetMapping$const6["@Org.OData.Validation.V1.Maximum/$Decimal"] && !isNaN((_oProperty$annotation5 = oProperty.annotations) === null || _oProperty$annotation5 === void 0 ? void 0 : (_oProperty$annotation6 = _oProperty$annotation5.Validation) === null || _oProperty$annotation6 === void 0 ? void 0 : _oProperty$annotation6.Maximum) ? `${(_oProperty$annotation7 = oProperty.annotations) === null || _oProperty$annotation7 === void 0 ? void 0 : (_oProperty$annotation8 = _oProperty$annotation7.Validation) === null || _oProperty$annotation8 === void 0 ? void 0 : _oProperty$annotation8.Maximum}` : undefined,
|
|
3259
|
+
isDigitSequence: propertyTypeConfig.type === "sap.ui.model.odata.type.String" && (_oTargetMapping$const7 = oTargetMapping.constraints) !== null && _oTargetMapping$const7 !== void 0 && _oTargetMapping$const7[`@${"com.sap.vocabularies.Common.v1.IsDigitSequence"}`] && (_oProperty$annotation9 = oProperty.annotations) !== null && _oProperty$annotation9 !== void 0 && (_oProperty$annotation10 = _oProperty$annotation9.Common) !== null && _oProperty$annotation10 !== void 0 && _oProperty$annotation10.IsDigitSequence ? true : undefined
|
|
3251
3260
|
};
|
|
3252
3261
|
}
|
|
3253
3262
|
propertyTypeConfig.formatOptions = {
|
|
@@ -3341,4 +3350,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
3341
3350
|
getNavigationTargetPath
|
|
3342
3351
|
};
|
|
3343
3352
|
}, false);
|
|
3344
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwic2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJ0YWJsZUFjdGlvbnMiLCJnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsInBhc3RlIiwiY3V0IiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJrZXkiLCJzdGFydHNXaXRoIiwibm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwid2lkdGgiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJleHBvcnRTZXR0aW5ncyIsImFkZENvbXB1dGVkQ29sdW1ucyIsImdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiwiY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsImNvbHVtbiIsInRhYmxlQ29sdW1uIiwidW5pdCIsImFkZCIsImN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsImFubm90YXRpb24iLCJhZ2dyZWdhdGVkUHJvcGVydHkiLCJfZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJmaW5kIiwicHJvcGVydHkiLCJuYW1lIiwicXVhbGlmaWVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwiY3R4RGVmUHJvcGVydHkiLCJ2YWx1ZSIsInJlc3VsdCIsInByb3BlcnR5SW5mb3MiLCJyZWxhdGl2ZVBhdGgiLCJyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiaGFzIiwiZGVmYXVsdEFnZ3JlZ2F0ZSIsImNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSIsImZvdW5kQ29sdW1uIiwiZmluZENvbHVtbkJ5UGF0aCIsInB1c2giLCJsZW5ndGgiLCJ1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlIiwidGFibGVWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb250cm9sIiwiYWdncmVnYXRlc0RlZmluaXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzIiwiZW5hYmxlJHNlbGVjdCIsImVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCIsImFnZ3JlZ2F0ZXMiLCJfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZUJhc2ljU2VhcmNoIiwiaW5jbHVkZXMiLCJncm91cENvbmRpdGlvbnMiLCJnZXRHcm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwic3RyZWFtUHJvcGVydHkiLCJVSSIsIk1lZGlhUmVzb3VyY2UiLCJTdHJlYW0iLCIkdGFyZ2V0IiwidXBsb2FkQWN0aW9uIiwidXBsb2FkVGFibGUiLCJzdHJlYW0iLCJmaWxlTmFtZSIsIkNvcmUiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsInBhdGgiLCJhY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwidG9TdHJpbmciLCJtYXhMZW5ndGgiLCJjbGVhclNlbGVjdGlvbk9uRmlsdGVyIiwiY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyIsImxpbmVJdGVtIiwib3BlcmF0aW9uQXZhaWxhYmxlIiwic2VsZWN0ZWRGaWVsZHMiLCJwdXNoRmllbGQiLCJmaWVsZCIsImluZGV4T2YiLCJwdXNoRmllbGRMaXN0IiwiZmllbGRzIiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsInNwbGl0IiwidmFsaWRQcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJyZXNvbHZlUGF0aCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5Iiwic2VtYW50aWNLZXkiLCJjYXBhYmlsaXRpZXNBbm5vdGF0aW9uIiwiZ2V0RW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiUmVxdWVzdEF0TGVhc3QiLCJwcm9wZXJ0eVBhdGgiLCJnZXROYXZpZ2F0aW9uQXZhaWxhYmxlRmllbGRzRnJvbUxpbmVJdGVtIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiRGVsZXRhYmxlIiwiVXBkYXRlUmVzdHJpY3Rpb25zIiwiVXBkYXRhYmxlIiwicmVjb3JkIiwiJFR5cGUiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9uQ29sdW1uIiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJvUHJvcGVydHkiLCJvUHJvcCIsIm9Vbml0IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5Iiwib1RpbWV6b25lIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJzVGltZXpvbmUiLCJUaW1lem9uZSIsIm9Vbml0Q29sdW1uIiwic1VuaXQiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0Iiwib1RpbWV6b25lQ29sdW1uIiwidGltZXpvbmUiLCJ0aW1lem9uZVRleHQiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwidGV4dEFubm90YXRpb24iLCJUZXh0Iiwib1RleHRDb2x1bW4iLCJ0ZXh0QXJyYW5nZW1lbnQiLCJ0ZXh0UHJvcGVydHkiLCJtb2RlIiwiZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwicGFyYW1zIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblRhcmdldFBhdGgiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUiLCJzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIiwiZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsInRhYmxlQW5ub3RhdGlvbiIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiaGVhZGVyIiwidGl0bGUiLCJvVmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlckluZm9UaXRsZSIsImhlYWRlclZpc2libGUiLCJyZXF1ZXN0QXRMZWFzdCIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0JsYW5rVGFibGUiLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiY3JlYXRpb25Nb2RlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVFeHByZXNzaW9uIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwicHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJzaXplIiwidGl0bGVQcm9wZXJ0eSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImFVaUhpZGRlblBhdGhFeHByZXNzaW9ucyIsImRhdGFGaWVsZCIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwidXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdCIsImRhdGFGaWVsZElkIiwic29tZSIsImFjdGlvbktleSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9uSWQiLCJnZW5lcmF0ZSIsIkFjdGlvbiIsIlNlbWFudGljT2JqZWN0IiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJjdXN0b21BY3Rpb25zIiwicmVkdWNlIiwiYWN0aW9uIiwibWVudSIsIm1lbnVBY3Rpb24iLCJnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJhVmlzaWJsZVBhdGhFeHByZXNzaW9ucyIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uIiwiaXNEZWxldGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwiaXNFbnRpdHlTZXQiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJGb3JjZU11bHRpIiwiTXVsdGkiLCJGb3JjZVNpbmdsZSIsIlNpbmdsZSIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiYk1hc3NFZGl0RW5hYmxlZCIsIkF1dG8iLCJidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm9yIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsImVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjb25jYXQiLCJjb3B5RGF0YUZpZWxkIiwiZ2V0Q29weUFjdGlvbiIsImRhdGFGaWVsZElzQ29weUFjdGlvbiIsInNFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidmlzaWJsZUV4cHJlc3Npb24iLCJub3QiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwidmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbiIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiX3VzZUVuYWJsZWRFeHByZXNzaW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJ0ZXh0IiwiTGFiZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsInRhYmxlQWN0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290T3JOb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJMaXN0UmVwb3J0IiwiQ3JlYXRpb25Nb2RlIiwiTmV3UGFnZSIsIkV4dGVybmFsIiwiTG9nIiwid2FybmluZyIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwidGFyZ2V0QW5ub3RhdGlvbnNDb21tb24iLCJ0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24iLCJTZXNzaW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsImVycm9yIiwiaW5mbyIsIl9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwidGFibGVUeXBlIiwicHJlc3NQcm9wZXJ0eSIsIm9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290IiwiZ2V0RHJhZnROb2RlIiwiZWRpdGFibGUiLCJyZWNyZWF0ZUNvbnRleHQiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJvcGVuSW5OZXdUYWJQcmVzcyIsInJvd05hdmlnYXRlZCIsIklzSW5hY3RpdmUiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJ0YWJsZUNyZWF0aW9uTW9kZSIsImRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAiLCJyZXN0cmljdGlvbnNPblByb3BlcnRpZXMiLCJleGlzdHMiLCJ0YXJnZXRUeXBlIiwicmVsYXRlZFByb3BlcnRpZXNJbmZvIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIiwicmVsYXRlZFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYWRkUHJvcGVydHlUb0Rpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAiLCJjb2x1bW5JbmZvIiwiZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSIsImRhdGFQb2ludFRhcmdldFZhbHVlIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJhbm5vdGF0aW9uUHJvcGVydHkiLCJ1cGRhdGVQcm9wZXJ0eUxhYmVsIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwicmVsYXRlZENvbHVtbnMiLCJfY3JlYXRlUmVsYXRlZENvbHVtbnMiLCJmdWxsUHJvcGVydHlQYXRoIiwidXNlRGF0YUZpZWxkUHJlZml4IiwiYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiIsInJlcGxhY2VTcGVjaWFsQ2hhcnMiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNIaWRkZW4iLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsImdyb3VwUGF0aCIsIl9zbGljZUF0U2xhc2giLCJpc0dyb3VwIiwibGFiZWwiLCJnZXRMYWJlbCIsImRhdGFUeXBlIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwiaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uIiwic29ydGFibGUiLCJmaWx0ZXJhYmxlIiwibm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiY29uc3RyYWludHMiLCJfaXNFeHBvcnRhYmxlQ29sdW1uIiwiY3JlYXRlQ29sdW1uRXhwb3J0U2V0dGluZ3MiLCJjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiQW5ub3RhdGlvbiIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwicmVxdWlyZWQiLCJpc1JlcXVpcmVkQ29sdW1uIiwiYWRkaXRpb25hbExhYmVscyIsIl9hZGRUb29sVGlwIiwiX3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50IiwidW5pdFByb3BlcnR5IiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImlzQVRpbWV6b25lIiwiY3VycmVuY3lQcm9wZXJ0eSIsInNjYWxlIiwiaXNQcm9wZXJ0eSIsImdldFN0YXRpY1VuaXRPckN1cnJlbmN5IiwiZ2V0U3RhdGljVGltZXpvbmUiLCJpc1RpbWV6b25lIiwiZXhwb3J0VHlwZSIsImdldEV4cG9ydERhdGFUeXBlIiwiaW5wdXRGb3JtYXQiLCJnZXREYXRlSW5wdXRGb3JtYXQiLCJkZWxpbWl0ZXIiLCJnZXREZWxpbWl0ZXIiLCJ0ZW1wbGF0ZSIsIndyYXAiLCJyZW1vdmVVbmRlZmluZWRGcm9tRXhwb3J0U2V0dGluZ3MiLCJzZXR0aW5nIiwibGlua2VkQW5ub3RhdGlvbkNvbHVtbnMiLCJjb2wiLCJ0b29sdGlwIiwicHJvcGVydHlUeXBlIiwiZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5IiwiVGFyZ2V0IiwiTWVkaWFUeXBlIiwidGVybSIsImlzVVJMIiwiX2lzVmFsaWRDb2x1bW4iLCJfZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZGF0YUZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJEYXRhIiwiaW5uZXJEYXRhRmllbGQiLCJkYXRhRmllbGREZWZhdWx0IiwiaXNEYXRhRmllbGRUeXBlcyIsIl9nZXRUb29sdGlwIiwiUXVpY2tJbmZvIiwiZGF0YXBvaW50VGFyZ2V0IiwiZ2V0Um93U3RhdHVzVmlzaWJpbGl0eSIsImNvbE5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwicmVsYXRlZENvbHVtbiIsImNvbXB1dGVIaWRkZW5PblJlbGF0ZWRDb2x1bW5zIiwibmV3TmFtZSIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsImNyZWF0ZVRlY2huaWNhbFByb3BlcnR5IiwicmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXAiLCJjb2x1bW5FeGlzdHMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJ0ZWNobmljYWxDb2x1bW4iLCJhZ2dyZWdhdGFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsImNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5NdWx0aVZhbHVlZCIsInByb3BlcnR5T2JqZWN0UGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsIm5vblNvcnRhYmxlQ29sdW1ucyIsImZpbHRlckZ1bmN0aW9ucyIsIl9nZXRGaWx0ZXJGdW5jdGlvbnMiLCJpc0FycmF5IiwiQ29udmVydGVyQ29udGV4dCIsIlR5cGVHdWFyZHMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uIiwic2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJzaG93RXJyb3JPYmplY3RTdGF0dXMiLCJoYXNEcmFmdEluZGljYXRvciIsIl9nZXRJbXBOdW1iZXIiLCJJbXBvcnRhbmNlIiwiX2dldERhdGFGaWVsZEltcG9ydGFuY2UiLCJ0YXJnZXRWYWx1ZWZyb21EUCIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0IiwiX2dldE1heEltcG9ydGFuY2UiLCJtYXhJbXBOdW1iZXIiLCJpbXBOdW1iZXIiLCJEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSIsInJlcXVpcmVkUHJvcGVydGllcyIsImdldFJlcXVpcmVkUHJvcGVydGllcyIsImhpZ2hLZXlzIiwiZmllbGRzV2l0aEltcG9ydGFuY2UiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJkYXRhRmllbGRUYXJnZXQiLCJmaWVsZEdyb3VwRGF0YSIsImZpZWxkR3JvdXBEYXRhRmllbGQiLCJIaWdoIiwiaXRlbSIsImdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyIsImdldFRhYmxlVHlwZSIsImdldEFubm90YXRpb25zQnlUZXJtIiwidGFibGVDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldFRhcmdldE9iamVjdFBhdGgiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsInNMYWJlbCIsImlzRmllbGRHcm91cENvbHVtbiIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwic2l0dWF0aW9uc05hdlByb3BzIiwibmF2aWdhdGlvblByb3BlcnR5IiwiaXNDb2xsZWN0aW9uIiwiU0FQT2JqZWN0Tm9kZVR5cGUiLCJOYW1lIiwic2l0dWF0aW9uc05hdlByb3AiLCJoYXNTaXR1YXRpb25zSW5kaWNhdG9yIiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwiaXNNdWx0aVZhbHVlIiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiSFRNTDUiLCJDc3NEZWZhdWx0cyIsImlzUGFydE9mTGluZUl0ZW0iLCJyZWxhdGVkUHJvcGVydHlOYW1lIiwiZGlzcGxheU1vZGVPZlByb3BlcnR5VXNlZEFzRGVzY3JpcHRpb24iLCJjcmVhdGVQcm9wZXJ0eUFubm90YXRlZFRleHRPbmx5IiwiX2dldFByb3BlcnR5TmFtZXMiLCJtYXRjaGVkUHJvcGVydGllcyIsImlzUmVxdWlyZWRGaWVsZEdyb3VwIiwiZmllbGRHcm91cCIsImlzRGF0YUZpZWxkIiwiaXNTdGF0aWNhbGx5TWFuZGF0b3J5IiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5IiwiaXNSZXF1aXJlZERhdGFGaWVsZEZvckFubm90YXRpb24iLCJkYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSIsImhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSIsImhhc0ZpZWxkR3JvdXBUYXJnZXQiLCJoYXNEYXRhUG9pbnRUYXJnZXQiLCJWaXN1YWxpemF0aW9uIiwiaXNSZXF1aXJlZERhdGFQb2ludCIsImlzUmVxdWlyZWRQcm9wZXJ0eSIsImlzUmF0aW5nVmlzdWFsaXphdGlvbkZyb21EYXRhRmllbGREZWZhdWx0IiwiZGF0YVBvaW50IiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiX2FwcGVuZEN1c3RvbVRlbXBsYXRlIiwiZXhwb3J0UHJvcGVydGllcyIsImludGVybmFsQ29sdW1ucyIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImlzU2xvdENvbHVtbiIsIm1hbmlmZXN0Q29sdW1uIiwiU2xvdCIsImlzQ3VzdG9tQ29sdW1uIiwiX3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMiLCJhbm5vdGF0aW9uVGFibGVDb2x1bW5zIiwicHJvcCIsInJlcGxhY2UiLCJ2YWxpZGF0ZUtleSIsImJhc2VUYWJsZUNvbHVtbiIsIkFmdGVyIiwicHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbiIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZ2V0Q3VzdG9tRXhwb3J0U2V0dGluZ3MiLCJ0b29sdGlwVGV4dCIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJoZWFkZXJUZXh0IiwiY3VzdG9tQ29sdW1uRXhwb3J0U2V0dGluZ3MiLCJiYXNlTWFuaWZlc3RDb2x1bW4iLCJIb3Jpem9udGFsQWxpZ24iLCJCZWdpbiIsImlkIiwiY3VzdG9tVGFibGVDb2x1bW4iLCJtZXNzYWdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIkFubm90YXRpb25Db2x1bW5zIiwiSW52YWxpZEtleSIsImNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yIiwic2l0dWF0aW9uc0luZGljYXRvckNvbHVtbiIsInByb3BlcnR5S2V5IiwiaXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiQ29tcHV0ZWQiLCJjbGlwYm9hcmRTZXR0aW5ncyIsImluZGV4T2ZGaXJzdFZpc2libGVDb2x1bW4iLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3IiLCJpc0RyYWZ0Tm9kZSIsImlzRHJhZnRSb290IiwiZHJhZnRJbmRpY2F0b3JDb2x1bW4iLCJpc0RyYWZ0SW5kaWNhdG9yIiwiY29sdW1uSW5kZXhUb0luc2VydEFmdGVyIiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsImlzQW5hbHl0aWNhbFRhYmxlIiwiaXNSZXNwb25zaXZlVGFibGUiLCJwZXJzb25hbGl6YXRpb24iLCJzb3J0IiwiYWdncmVnYXRlIiwiVmFyaWFudE1hbmFnZW1lbnRUeXBlIiwiQ29udHJvbCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImlzRmlsdGVyQmFySGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsImdldFNvcnRDb25kaXRpb25zIiwic29ydENvbmRpdGlvbnMiLCJTb3J0T3JkZXIiLCJzb3J0ZXJzIiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbiIsImNvbmRpdGlvblByb3BlcnR5IiwiUHJvcGVydHkiLCJpbmZvTmFtZSIsImNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsImdldEluaXRpYWxFeHBhbnNpb25MZXZlbCIsImxldmVsIiwiSW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJjdXJyZW50UGF0aCIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsImFHcm91cExldmVscyIsImdyb3VwTGV2ZWxzIiwiYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lIiwiYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uIiwiY3VzdG9tQWdncmVnYXRlIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mbyIsImdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uIiwiY2FwYWJpbGl0aWVzIiwiSW5zZXJ0UmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiVG90YWwiLCJhVG90YWxzIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwiZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmciLCJpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQiLCJnZXRTdGFuZGFyZEFjdGlvbkN1dCIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJnZXRDcmVhdGlvblJvdyIsInR5cGVOYW1lUGx1cmFsIiwiVHlwZU5hbWVQbHVyYWwiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsImhhc0Fic29sdXRlUGF0aCIsInAxM25Nb2RlIiwiZ2V0VGFibGVJRCIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsImVudGl0eU5hbWUiLCJlbnRpdHlUeXBlTmFtZSIsImNvbGxlY3Rpb24iLCJyb3ciLCJpc0luRGlzcGxheU1vZGUiLCJzZWFyY2hhYmxlIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwiaXNDdXJyZW5jeSIsImV4cG9ydERhdGFUeXBlIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsIl9nZXRNdWx0aVNlbGVjdE1vZGUiLCJtdWx0aVNlbGVjdE1vZGUiLCJzZWxlY3RBbGwiLCJ1c2VJY29uVGFiQmFyIiwiX2dldFRhYmxlTW9kZSIsImlzVGVtcGxhdGVMaXN0UmVwb3J0Iiwicm93Q291bnRNb2RlIiwicm93Q291bnQiLCJfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQiLCJfdGFibGVUeXBlIiwiX3RhYmxlU2V0dGluZ3MiLCJjb25kZW5zZWRUYWJsZUxheW91dCIsIl9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0Iiwic2VsZWN0aW9uTGltaXQiLCJfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsIl9nZXRFbmFibGVFeHBvcnQiLCJlbmFibGVQYXN0ZSIsImVuYWJsZUV4cG9ydCIsIl9nZXRGcm96ZW5Db2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50IiwiX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImhpZGVUYWJsZVRpdGxlIiwiZmlsdGVycyIsInF1aWNrVmFyaWFudFNlbGVjdGlvbiIsInF1aWNrRmlsdGVyUGF0aHMiLCJmaWx0ZXJQYXRocyIsInF1aWNrRmlsdGVycyIsInNob3dDb3VudHMiLCJoaWRkZW5GaWx0ZXJzIiwibmF2UHJvcGVydHkiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJzb3VyY2VUeXBlIiwicGFyYW1ldGVycyIsInVwZGF0ZVRyZWVUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiIsInRhYmxlQ29uZmlndXJhdGlvbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiZ2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZ2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJpc05vZGVNb3ZhYmxlIiwiZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvIiwiaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQiLCJjcmVhdGVFbmFibGVtZW50IiwiaXNDcmVhdGVFbmFibGVkIiwibm9kZVR5cGUiLCJsYXN0RG90SW5kZXgiLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCIsImRpc2FibGVSZXF1ZXN0Q2FjaGUiLCJjaGVja0NvbmRlbnNlZExheW91dCIsIl9tYW5pZmVzdFdyYXBwZXIiLCJlbmFibGVBdXRvQ29sdW1uV2lkdGgiLCJpc1Bob25lIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsInRlbXBsYXRlVHlwZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJleHBvcnRSZXF1ZXN0U2l6ZSIsInRhYmxlUm93TW9kZSIsImlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUiLCJvQ29uZmlndXJhdGlvbiIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJlbmFibGVNYXNzRWRpdCIsImVuYWJsZUFkZENhcmRUb0luc2lnaHRzIiwic2hvd1Jvd0NvdW50IiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsImlzQ29tcGFjdFR5cGUiLCJiZWZvcmVSZWJpbmRUYWJsZSIsInNlbGVjdGlvbkNoYW5nZSIsImlzUHJvcGVydHlOYXZpZ2F0ZWQiLCJpbmhlcmVkUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNJbmhlcmVkUHJvcGVydHlOYXZpZ2F0ZWQiLCJvVGFyZ2V0TWFwcGluZyIsImlzVHlwZURlZmluaXRpb24iLCJFRE1fVFlQRV9NQVBQSU5HIiwidW5kZXJseWluZ1R5cGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIklzRGlnaXRTZXF1ZW5jZSIsInBhcnNlQXNTdHJpbmciLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsInJlbGF0ZWRBbm5vdGF0aW9uQ29sdW1ucyIsImV4aXN0aW5nQ29sdW1uIiwiY29sdW1uS2V5IiwiY29sdW1uRnJvbUFubm90YXRpb25zIiwiY3VzdG9tRXhwb3J0U2V0dGluZ3MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGhcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZ1bmN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY0tleSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvbl9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0Q3JpdGljYWxpdHksXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlcyxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBsZXhQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyxcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHksXG5cdGdldERhdGFGaWVsZERhdGFUeXBlLFxuXHRnZXRTZW1hbnRpY09iamVjdFBhdGgsXG5cdGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQsXG5cdGhhc0RhdGFQb2ludFRhcmdldCxcblx0aGFzRmllbGRHcm91cFRhcmdldCxcblx0aXNEYXRhRmllbGQsXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0aXNEYXRhRmllbGRUeXBlcyxcblx0aXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCxcblx0aXNSYXRpbmdWaXN1YWxpemF0aW9uRnJvbURhdGFGaWVsZERlZmF1bHRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQge1xuXHRkYXRhRmllbGRJc0NvcHlBY3Rpb24sXG5cdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QsXG5cdGdldENvcHlBY3Rpb24sXG5cdGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCwgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgRW50aXR5LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSwgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBUeXBlR3VhcmRzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7XG5cdGlzQW5ub3RhdGlvbk9mVHlwZSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5LFxuXHRpc1R5cGVEZWZpbml0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbixcblx0Z2V0SGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0Z2V0Tm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdGdldFRhcmdldE9iamVjdFBhdGgsXG5cdGlzUGF0aERlbGV0YWJsZSxcblx0aXNQYXRoU2VhcmNoYWJsZSxcblx0aXNQYXRoVXBkYXRhYmxlLFxuXHR0eXBlIERhdGFNb2RlbE9iamVjdFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RGlzcGxheU1vZGUsIHR5cGUgRGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLCB0eXBlIFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzRmllbGRDb250cm9sTm90TWFuZGF0b3J5LCBpc1N0YXRpY2FsbHlNYW5kYXRvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0U3RhdGljVGltZXpvbmUsXG5cdGdldFN0YXRpY1VuaXRPckN1cnJlbmN5LFxuXHRpc1RpbWV6b25lXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgdGFibGVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlQ29sdW1uU2V0dGluZ3MsXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEhvcml6b250YWxBbGlnbixcblx0SW1wb3J0YW5jZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9EYXRhRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7XG5cdFN0YW5kYXJkQWN0aW9uS2V5cyxcblx0Z2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRnZXRDcmVhdGlvblJvdyxcblx0Z2V0Q3V0VmlzaWJpbGl0eSxcblx0Z2V0RGVsZXRlVmlzaWJpbGl0eSxcblx0Z2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcsXG5cdGdldE1hc3NFZGl0VmlzaWJpbGl0eSxcblx0Z2V0UmVzdHJpY3Rpb25zLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25DdXQsXG5cdGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzLFxuXHRnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0LFxuXHRnZXRTdGFuZGFyZEFjdGlvblBhc3RlLFxuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQsXG5cdGlzSW5EaXNwbGF5TW9kZVxufSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcblxudHlwZSBVcGxvYWRUYWJsZVNldHRpbmdzID0ge1xuXHRzdHJlYW06IHN0cmluZztcblx0ZmlsZU5hbWU/OiBzdHJpbmc7XG5cdGFjY2VwdGFibGVNZWRpYVR5cGVzPzogc3RyaW5nO1xuXHRtYXhMZW5ndGg/OiBpbnQ7XG5cdHVwbG9hZEFjdGlvbj86IFN0YW5kYXJkQWN0aW9uO1xufTtcbnR5cGUgUm93Q29uZmlndXJhdGlvbiA9IHtcblx0YWN0aW9uPzogc3RyaW5nO1xuXHRwcmVzcz86IHN0cmluZztcblx0b3BlbkluTmV3VGFiUHJlc3M/OiBzdHJpbmc7XG5cdHJvd0hpZ2hsaWdodGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHJvd05hdmlnYXRlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGNvbGxlY3Rpb246IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdGlkOiBzdHJpbmc7XG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdHAxM25Nb2RlPzogc3RyaW5nO1xuXHRyb3c/OiBSb3dDb25maWd1cmF0aW9uO1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhbjtcblx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0ZW50aXR5VHlwZU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXHRhbGxvd0Ryb3BCZXR3ZWVuTm9kZXM/OiBib29sZWFuO1xuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dXBsb2FkVGFibGU/OiBVcGxvYWRUYWJsZVNldHRpbmdzO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlQmVoYXZpb3IgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlcm5hbE1ldGhvZENvbmZpZyA9IHtcblx0bW9kdWxlTmFtZTogc3RyaW5nO1xuXHRtZXRob2ROYW1lOiBzdHJpbmc7XG59O1xuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5leHBvcnQgdHlwZSBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiA9IHtcblx0aXNEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzVXBkYXRhYmxlOiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdHBhdGhzOiB7XG5cdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0fVtdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRkaXNhYmxlUmVxdWVzdENhY2hlOiBib29sZWFuO1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRmcm96ZW5Db2x1bW5Db3VudD86IG51bWJlcjtcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI/OiBib29sZWFuO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRmaWx0ZXJzPzogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdHR5cGU6IFRhYmxlVHlwZTtcblx0cm93Q291bnRNb2RlPzogVGFibGVSb3dDb3VudE1vZGU7XG5cdHJvd0NvdW50PzogbnVtYmVyO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW47XG5cdGRpc2FibGVDb3B5VG9DbGlwYm9hcmQ/OiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGlubGluZUNyZWF0aW9uUm93Q291bnQ/OiBudW1iZXI7XG5cdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU/OiBib29sZWFuO1xuXHRlbmFibGVNYXNzRWRpdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBib29sZWFuO1xuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aXNDb21wYWN0VHlwZT86IGJvb2xlYW47XG5cdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0aXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlPzogYm9vbGVhbjtcblx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRub2RlVHlwZT86IHtcblx0XHRwcm9wZXJ0eU5hbWU6IHN0cmluZztcblx0XHR2YWx1ZXM6IHsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXTtcblx0fTtcblx0Y3JlYXRlRW5hYmxlbWVudD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc05vZGVNb3ZhYmxlPzogRXh0ZXJuYWxNZXRob2RDb25maWc7XG5cdGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkPzogRXh0ZXJuYWxNZXRob2RDb25maWc7XG5cdHNlbGVjdGlvbkNoYW5nZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRhZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzPzogc3RyaW5nW107XG5cdGJlZm9yZVJlYmluZFRhYmxlPzogc3RyaW5nO1xuXHRleHBvcnRSZXF1ZXN0U2l6ZT86IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBUYWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiIHwgXCJSZXNwb25zaXZlVGFibGVcIiB8IFwiQW5hbHl0aWNhbFRhYmxlXCIgfCBcIlRyZWVUYWJsZVwiIHwgXCJVcGxvYWRUYWJsZVwiO1xuZXhwb3J0IHR5cGUgVGFibGVSb3dDb3VudE1vZGUgPSBcIkF1dG9cIiB8IFwiRml4ZWRcIjtcblxuZW51bSBDb2x1bW5UeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLCAvLyBEZWZhdWx0IFR5cGUgKEN1c3RvbSBDb2x1bW4pXG5cdEFubm90YXRpb24gPSBcIkFubm90YXRpb25cIixcblx0U2xvdCA9IFwiU2xvdFwiLFxuXHRDb21wdXRlZCA9IFwiQ29tcHV0ZWRcIlxufVxuLy8gQ3VzdG9tIENvbHVtbiBmcm9tIE1hbmlmZXN0XG5leHBvcnQgdHlwZSBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU/OiBDb2x1bW5UeXBlLkRlZmF1bHQ7XG59O1xuLy8gU2xvdCBDb2x1bW4gZnJvbSBCdWlsZGluZyBCbG9ja1xuZXhwb3J0IHR5cGUgRnJhZ21lbnREZWZpbmVkU2xvdENvbHVtbiA9IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiAmIHtcblx0dHlwZTogQ29sdW1uVHlwZS5TbG90O1xufTtcbi8vIFByb3BlcnRpZXMgYWxsIENvbHVtblR5cGVzIGhhdmU6XG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tXG5cdHdpZHRoPzogc3RyaW5nO1xuXHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47XG5cdGltcG9ydGFuY2U/OiBJbXBvcnRhbmNlO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG59O1xuLy8gUHJvcGVydGllcyBvbiBDdXN0b20gQ29sdW1ucyBhbmQgU2xvdCBDb2x1bW5zXG5leHBvcnQgdHlwZSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRleHBvcnRTZXR0aW5ncz86IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbDtcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGU7XG5cdGlzR3JvdXBhYmxlOiBib29sZWFuO1xuXHRpc05hdmlnYWJsZTogYm9vbGVhbjtcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHZpc3VhbFNldHRpbmdzOiB7IHdpZHRoQ2FsY3VsYXRpb246IG51bGwgfTtcblx0cHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRyZXF1aXJlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcHV0ZWRUYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0bmFtZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRwcm9wZXJ0eUtleTogc3RyaW5nO1xuXHRpc0RyYWZ0SW5kaWNhdG9yPzogYm9vbGVhbjtcblx0aXNTaXR1YXRpb25zSW5kaWNhdG9yPzogYm9vbGVhbjtcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnNUeXBlIHwgbnVsbDtcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdIHwgbnVsbDtcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdGNsaXBib2FyZFNldHRpbmdzPzogT2JqZWN0IHwgbnVsbDtcblx0cmVxdWlyZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbi8vIFByb3BlcnRpZXMgZGVyaXZlZCBmcm9tIE1hbmlmZXN0IHRvIG92ZXJyaWRlIEFubm90YXRpb24gY29uZmlndXJhdGlvbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZTtcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGw7XG59O1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlQ29uc3RyYWludHMgPSBQYXJ0aWFsPHtcblx0c2NhbGU6IG51bWJlcjtcblx0cHJlY2lzaW9uOiBudW1iZXI7XG5cdG1heExlbmd0aDogbnVtYmVyO1xuXHRudWxsYWJsZTogYm9vbGVhbjtcblx0bWluaW11bTogc3RyaW5nO1xuXHRtYXhpbXVtOiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZTogYm9vbGVhbjtcbn0+O1xuZXhwb3J0IHR5cGUgUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRwYXJzZUFzU3RyaW5nOiBib29sZWFuO1xuXHRlbXB0eVN0cmluZzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IGJvb2xlYW47XG59PjtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHR0eXBlSW5zdGFuY2U/OiB1bmtub3duO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcbn07XG5leHBvcnQgdHlwZSBDb2x1bW5FeHBvcnRTZXR0aW5ncyA9IFBhcnRpYWw8e1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHR3cmFwOiBib29sZWFuO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlucHV0Rm9ybWF0OiBzdHJpbmc7XG5cdGZvcm1hdDogc3RyaW5nO1xuXHRzY2FsZTogbnVtYmVyO1xuXHRkZWxpbWl0ZXI6IGJvb2xlYW47XG5cdHVuaXQ6IHN0cmluZztcblx0dW5pdFByb3BlcnR5OiBzdHJpbmc7XG5cdHRpbWV6b25lOiBzdHJpbmc7XG5cdHRpbWV6b25lUHJvcGVydHk6IHN0cmluZztcblx0dXRjOiBib29sZWFuO1xuXHRkYXRhUG9pbnRUYXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRpc0N1cnJlbmN5OiBib29sZWFuO1xuXHRwcm9wZXJ0eTogc3RyaW5nW107XG5cdHdpZHRoOiBudW1iZXI7XG59Pjtcbi8vIFByb3BlcnRpZXMgZm9yIEFubm90YXRpb24gQ29sdW1uc1xuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7XG5cdG5hbWU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd0RhdGFGaWVsZHNMYWJlbD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlzS2V5PzogYm9vbGVhbjtcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0dGltZXpvbmVUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZT86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiB7XG5cdFx0dGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bW9kZTogRGlzcGxheU1vZGU7XG5cdH07XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdHR5cGVDb25maWc/OiBQcm9wZXJ0eVR5cGVDb25maWc7XG5cdGlzUGFydE9mTGluZUl0ZW0/OiBib29sZWFuOyAvLyB0ZW1wb3JhcnkgaW5kaWNhdG9yIHRvIG9ubHkgYWxsb3cgZmlsdGVyaW5nIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcyB3aGVuIHRoZXkncmUgcGFydCBvZiBhIGxpbmUgaXRlbVxuXHRhZGRpdGlvbmFsTGFiZWxzPzogc3RyaW5nW107XG5cdGV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGFibGU/OiBib29sZWFuO1xuXHRleHRlbnNpb24/OiBFeHRlbnNpb25Gb3JBbmFseXRpY3M7XG5cdGlzTXVsdGlWYWx1ZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uRm9yQW5hbHl0aWNzID0ge1xuXHRjdXN0b21BZ2dyZWdhdGU/OiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xufTtcbmV4cG9ydCB0eXBlIFRlY2huaWNhbENvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbiAmIHtcblx0ZXh0ZW5zaW9uPzoge1xuXHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiBib29sZWFuO1xuXHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiBib29sZWFuO1xuXHR9O1xufTtcbmV4cG9ydCB0eXBlIFZpc3VhbFNldHRpbmdzID0ge1xuXHR3aWR0aENhbGN1bGF0aW9uPzogV2lkdGhDYWxjdWxhdGlvbjtcbn07XG5leHBvcnQgdHlwZSBXaWR0aENhbGN1bGF0aW9uID0gbnVsbCB8IHtcblx0bWluV2lkdGg/OiBudW1iZXI7XG5cdG1heFdpZHRoPzogbnVtYmVyO1xuXHRkZWZhdWx0V2lkdGg/OiBudW1iZXI7XG5cdHRydW5jYXRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCBDb21wdXRlZFRhYmxlQ29sdW1uO1xuZXhwb3J0IHR5cGUgTWFuaWZlc3RDb2x1bW4gPSBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT47XG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVEYXRhID0ge1xuXHRkZWZhdWx0QWdncmVnYXRlOiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRyZXF1ZXN0QXRMZWFzdD86IHN0cmluZ1tdO1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVCYXNpY1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZSRzZWxlY3Q6IGJvb2xlYW47XG5cdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogYm9vbGVhbjtcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBib29sZWFuO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRjbGVhclNlbGVjdGlvbk9uRmlsdGVyOiBib29sZWFuO1xufTtcbnR5cGUgU29ydGVyVHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIG9wZW4gaW4gbmV3IHRhYnMgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIgPSAxMDtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3RhbmRhcmQsIGFubm90YXRpb24tYmFzZWQsIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uW1wic3RhbmRhcmRBY3Rpb25zXCJdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGRlbkFjdGlvbnMgPSB0YWJsZUFjdGlvbnMuaGlkZGVuVGFibGVBY3Rpb25zO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMgYXMgUmVjb3JkPFxuXHRcdFx0c3RyaW5nLFxuXHRcdFx0TWFuaWZlc3RBY3Rpb25cblx0XHQ+LFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dHJ1ZSxcblx0XHRoaWRkZW5BY3Rpb25zXG5cdCk7XG5cdC8vIFRoZSBcIkNvcHlcIiBhY3Rpb24gYWx3YXlzIG5lZWRzIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgXCJDcmVhdGVcIiBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgaXRcblx0Y29uc3QgY29weUFjdGlvbnMgPSB0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLmZpbHRlcigoYSkgPT4gYS50eXBlID09PSBBY3Rpb25UeXBlLkNvcHkpO1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgIT09IEFjdGlvblR5cGUuQ29weSk7XG5cdC8vIENvbWJpbmUgc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyB0b2dldGhlciwgcmVzcGVjdGluZyB0aGUgZml4ZWQgb3JkZXIgb2Ygc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zID0gW1xuXHRcdC4uLmFubm90YXRpb25BY3Rpb25zLFxuXHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGUsXG5cdFx0Li4uY29weUFjdGlvbnMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmRlbGV0ZSxcblx0XHRzdGFuZGFyZEFjdGlvbnMubWFzc0VkaXQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmluc2lnaHRzLFxuXHRcdC8vIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXJlIG5vdCB0ZW1wbGF0ZWQgYXMgYnV0dG9uc1xuXHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGlvblJvdyxcblx0XHRzdGFuZGFyZEFjdGlvbnMucGFzdGUsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmN1dFxuXHRdIGFzIEJhc2VBY3Rpb25bXTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRsZXQgYWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25BbmRTdGFuZGFyZEFjdGlvbnMsIG5vblN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHRhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgc3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIHtcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0LWJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFJldHVybnMgYWxsIHRhYmxlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIHRlbXBsYXRpbmcgb3IgcGVyc29uYWxpemF0aW9uIG9yIHRoZWlyIG9yaWdpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucyA/PyB7fSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblxuXHRjb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyBhcyBUYWJsZUNvbHVtbltdLFxuXHRcdG1hbmlmZXN0Q29sdW1ucyBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPj4sXG5cdFx0e1xuXHRcdFx0d2lkdGg6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGltcG9ydGFuY2U6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0fVxuXHQpO1xuXG5cdHJldHVybiBhZGRDb21wdXRlZENvbHVtbnModGFibGVDb2x1bW5zLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0ZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29uc3QgdGFibGVDb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmICh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCByYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gZGVmaW5pdGlvbnNbdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXTtcblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlXG5cdFx0XHRpZiAocmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJiAhY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5uYW1lKSkge1xuXHRcdFx0XHRyZXN1bHRbdGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmb3VuZENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlXG4pOiB2b2lkIHtcblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHRjb25zdCBhZ2dyZWdhdGVzRGVmaW5pdGlvbnMgPSBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSRzZWxlY3QgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXHRcdFx0X3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRlc0RlZmluaXRpb25zXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFsbG93RHJvcEJldHdlZW5Ob2RlcyA9XG5cdFx0XHQhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bYFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHt0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXVxuXHRcdFx0XHQ/LkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uO1xuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiVXBsb2FkVGFibGVcIikge1xuXHRcdGNvbnN0IHN0cmVhbVByb3BlcnR5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uTWVkaWFSZXNvdXJjZT8uU3RyZWFtPy4kdGFyZ2V0O1xuXHRcdGlmICghc3RyZWFtUHJvcGVydHkpIHtcblx0XHRcdHRocm93IFwiVUkuTWVkaWFSZXNvdXJjZSBhbm5vdGF0aW9uIHdpdGggU3RyZWFtIHByb3BlcnR5IG1pc3NpbmdcIjtcblx0XHR9XG5cblx0XHQvLyB0aGUgdXBsb2FkIGFjdGlvbiBpcyB0cmVhdGVkIGFzIHRoZSBjcmVhdGUgYWN0aW9uXG5cdFx0Y29uc3QgdXBsb2FkQWN0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIGFzIFN0YW5kYXJkQWN0aW9uO1xuXHRcdC8vIHRodXMgd2UgYWxzbyByZW1vdmUgdGhlIGNyZWF0ZSBhY3Rpb25cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWN0aW9ucyA9IHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zLmZpbHRlcigoYSkgPT4gYS5rZXkgIT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpO1xuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24udXBsb2FkVGFibGUgPSB7XG5cdFx0XHRzdHJlYW06IHN0cmVhbVByb3BlcnR5Lm5hbWUsXG5cdFx0XHRmaWxlTmFtZTogKHN0cmVhbVByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/LkNvbnRlbnREaXNwb3NpdGlvbj8uRmlsZW5hbWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQpPy5wYXRoLFxuXHRcdFx0YWNjZXB0YWJsZU1lZGlhVHlwZXM6IHN0cmVhbVByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzPy50b1N0cmluZygpLFxuXHRcdFx0bWF4TGVuZ3RoOiBzdHJlYW1Qcm9wZXJ0eS5tYXhMZW5ndGgsXG5cdFx0XHR1cGxvYWRBY3Rpb246IHVwbG9hZEFjdGlvblxuXHRcdH07XG5cdH1cblxuXHQvLyBXZSBkb24ndCBrZWVwIHRhYmxlIHNlbGVjdGlvbiBhZnRlciBzZWFyY2hpbmcvZmlsdGVyaW5nLCBleGNlcHQgaW4gcmVzcG9uc2l2ZS91cGxvYWQgdGFibGVzXG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiICYmIHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVXBsb2FkVGFibGVcIikge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jbGVhclNlbGVjdGlvbk9uRmlsdGVyID0gdHJ1ZTtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzZWxlY3QgcXVlcnkgd2l0aCB0aGUgc2VsZWN0ZWQgZmllbGRzIGZyb20gdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW0gVGhlIExpbmVJdGVtIHdlIHdhbnQgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZSBvcGVyYXRpb24sIHdoaWNoIHdlJ2xsIHRha2UgdGhlIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBzZWxlY3QgcXVlcnkuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb24gd2hpY2ggd2UnbGwgdGFrZSB0aGUgUmVxdWVzdEF0TGVhc3QgcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMgVGhlICdzZWxlY3QnIHF1ZXJ5IHRoYXQgaGFzIHRoZSBzZWxlY3RlZCBmaWVsZHMgZnJvbSB0aGUgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyhcblx0bGluZUl0ZW06IExpbmVJdGVtLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRvcGVyYXRpb25BdmFpbGFibGU/OiBzdHJpbmcsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IHN0cmluZ1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW0pO1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0ZnVuY3Rpb24gcHVzaEZpZWxkKGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoZmllbGQgJiYgIXNlbGVjdGVkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSAmJiBmaWVsZC5pbmRleE9mKFwiL1wiKSAhPT0gMCkge1xuXHRcdFx0Ly8gRG8gbm90IGFkZCBzaW5nbGV0b24gcHJvcGVydHkgKHdpdGggYWJzb2x1dGUgcGF0aCkgdG8gJHNlbGVjdFxuXHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChmaWVsZCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcHVzaEZpZWxkTGlzdChmaWVsZHM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0aWYgKGZpZWxkcz8ubGVuZ3RoKSB7XG5cdFx0XHRmaWVsZHMuZm9yRWFjaChwdXNoRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMgPSAob3BlcmF0aW9uQXZhaWxhYmxlIHx8IFwiXCIpLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgdmFsaWRQcm9wZXJ0aWVzID0gb3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcy5maWx0ZXIoZnVuY3Rpb24gKHByb3BOYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wTmFtZSk7XG5cdH0pO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXSkubWFwKChzZW1hbnRpY0tleSkgPT4gc2VtYW50aWNLZXkudmFsdWUpO1xuXHRjb25zdCBjYXBhYmlsaXRpZXNBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcztcblxuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRwdXNoRmllbGRMaXN0KHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlJlcXVlc3RBdExlYXN0Py5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLnZhbHVlKSk7XG5cdH1cblx0cHVzaEZpZWxkTGlzdChnZXROYXZpZ2F0aW9uQXZhaWxhYmxlRmllbGRzRnJvbUxpbmVJdGVtKGxpbmVJdGVtLCBlbnRpdHlUeXBlKSk7XG5cdHB1c2hGaWVsZExpc3QodmFsaWRQcm9wZXJ0aWVzKTtcblx0cHVzaEZpZWxkTGlzdChzZW1hbnRpY0tleXMpO1xuXHRpZiAoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbikge1xuXHRcdHB1c2hGaWVsZCgoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbi5EZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pPy5wYXRoKTtcblx0XHRwdXNoRmllbGQoKGNhcGFiaWxpdGllc0Fubm90YXRpb24uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPGJvb2xlYW4+KT8ucGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogVGhpcyByZXR1cm4gdGhlIHByb3BlcnR5IHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBOYXZpZ2F0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gb24gSUJOIEZpZWxkcy5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgbGluZSBpdGVtIGFubm90YXRpb24uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5IFR5cGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0obGluZUl0ZW06IExpbmVJdGVtLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0bGluZUl0ZW0uZm9yRWFjaChmdW5jdGlvbiAocmVjb3JkKSB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdCFyZWNvcmQuSW5saW5lICYmXG5cdFx0XHQhcmVjb3JkLkRldGVybWluaW5nICYmXG5cdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhdGggPSAocmVjb3JkLk5hdmlnYXRpb25BdmFpbGFibGUgYXMgdW5rbm93biBhcyB7IHBhdGg6IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChwYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0Y29uc3QgbmF2Q29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdGlmIChPYmplY3Qua2V5cyhuYXZDb25maWcpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRcdH1cblx0fVxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcsIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdH0pO1xufVxuLyoqXG4gKiBTZXRzIHRoZSAndW5pdCcgYW5kICd0ZXh0QXJyYW5nZW1lbnQnIHByb3BlcnRpZXMgaW4gY29sdW1ucyB3aGVuIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgY29sdW1ucyB0byBiZSB1cGRhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbHVtbikgPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChvUHJvcDogUHJvcGVydHkpID0+IG9Qcm9wLm5hbWUgPT09IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBvVW5pdCA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBvVGltZXpvbmUgPSBnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCBzVGltZXpvbmUgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXHRcdFx0XHRpZiAob1VuaXQpIHtcblx0XHRcdFx0XHRjb25zdCBvVW5pdENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgob1VuaXQubmFtZSwgdGFibGVDb2x1bW5zKTtcblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdCA9IG9Vbml0Q29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHNVbml0ID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0XHRcdGlmIChzVW5pdCkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnVuaXRUZXh0ID0gYCR7c1VuaXR9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9UaW1lem9uZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9UaW1lem9uZUNvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgob1RpbWV6b25lLm5hbWUsIHRhYmxlQ29sdW1ucyk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lID0gb1RpbWV6b25lQ29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNUaW1lem9uZSkge1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZVRleHQgPSBzVGltZXpvbmUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eSksXG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24gPSBvUHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGV4dEFubm90YXRpb24pICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpIHtcblx0XHRcdFx0XHRjb25zdCBvVGV4dENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgodGV4dEFubm90YXRpb24ucGF0aCwgdGFibGVDb2x1bW5zKTtcblx0XHRcdFx0XHRpZiAob1RleHRDb2x1bW4gJiYgb1RleHRDb2x1bW4ubmFtZSAhPT0gb1RhYmxlQ29sdW1uLm5hbWUpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogb1RleHRDb2x1bW4ubmFtZSxcblx0XHRcdFx0XHRcdFx0bW9kZTogZGlzcGxheU1vZGVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiB7XG5cdGhlYWRlckluZm9UaXRsZVBhdGg6IHN0cmluZztcblx0c2VtYW50aWNLZXlDb2x1bW5zOiBzdHJpbmdbXTtcblx0aGVhZGVySW5mb1R5cGVOYW1lOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+IHwgdW5kZWZpbmVkO1xufSB7XG5cdGNvbnN0IGhlYWRlckluZm9UaXRsZVBhdGggPSAoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWVcblx0XHQ/LnBhdGg7XG5cdGNvbnN0IHNlbWFudGljS2V5QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljS2V5O1xuXHRjb25zdCBoZWFkZXJJbmZvVHlwZU5hbWUgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpPy5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lO1xuXHRjb25zdCBzZW1hbnRpY0tleUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG5cdGlmIChzZW1hbnRpY0tleUFubm90YXRpb25zKSB7XG5cdFx0c2VtYW50aWNLZXlBbm5vdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uKSB7XG5cdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMucHVzaChvQ29sdW1uLnZhbHVlKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwYXJhbXM/OiBQYXJ0aWFsPHtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGU7XG5cdFx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IGJvb2xlYW47XG5cdH0+XG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB7IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiB9ID0gcGFyYW1zID8/IHt9O1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IHRhYmxlQW5ub3RhdGlvbiA9IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRjb2x1bW5zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLnN0YW5kYXJkQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgaGVhZGVyID0gdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXI7XG5cdGhlYWRlciA/Pz0gdGFibGVBbm5vdGF0aW9uLnRpdGxlID09PSBcIlwiID8gdW5kZWZpbmVkIDogdGFibGVBbm5vdGF0aW9uLnRpdGxlO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IHRhYmxlQW5ub3RhdGlvbixcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnModGFibGVBY3Rpb25zLmFjdGlvbnMpLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiB0YWJsZUFjdGlvbnMuY29tbWFuZEFjdGlvbnMsXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogb3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IGhlYWRlcixcblx0XHRoZWFkZXJWaXNpYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlclZpc2libGUsXG5cdFx0cmVxdWVzdEF0TGVhc3Q6IGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMobGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBvcGVyYXRpb25BdmFpbGFibGUsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSxcblx0XHRjbGVhclNlbGVjdGlvbk9uRmlsdGVyOiBmYWxzZVxuXHR9O1xuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNCbGFua1RhYmxlPzogYm9vbGVhblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdHt9LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFtdLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy50eXBlLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcuY3JlYXRpb25Nb2RlLFxuXHRcdHt9XG5cdCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgXCJcIik7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uID0gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0XHR1bmRlZmluZWQsXG5cdFx0XCJcIixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzXG5cdCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFwiXCIsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGlzQmxhbmtUYWJsZSA/IFtdIDogY29sdW1ucyxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb25cblx0XHQpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZSxcblx0XHRoZWFkZXI6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyVmlzaWJsZSxcblx0XHRjbGVhclNlbGVjdGlvbk9uRmlsdGVyOiBmYWxzZVxuXHR9O1xuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG4vKipcbiAqIEdldHMgdGhlIG1hcCBvZiBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRocyBmb3IgYWxsIERhdGFGaWVsZEZvckFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGxpbmUgaXRlbVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHJlY29yZCBjb250YWluaW5nIGFsbCBhY3Rpb24gbmFtZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0cmV0dXJuIEFjdGlvbkhlbHBlci5nZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uLCBcInRhYmxlXCIsIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBHZXRzIHVwZGF0YWJsZSBwcm9wZXJ0eVBhdGggZm9yIHRoZSBjdXJyZW50IGVudGl0eXNldCBpZiB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBzdHJpbmcge1xuXHRjb25zdCByZXN0cmljdGlvbnMgPSBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IHVwZGF0YWJsZSA9IHJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZTtcblx0Y29uc3QgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA9ICFpc0NvbnN0YW50KHVwZGF0YWJsZS5leHByZXNzaW9uKSAmJiB1cGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCI7XG5cdGNvbnN0IHVwZGF0YWJsZUV4cHJlc3Npb24gPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGU7XG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVwZGF0YWJsZUV4cHJlc3Npb24pICYmIHVwZGF0YWJsZUV4cHJlc3Npb24ucGF0aDtcblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHByb3BlcnR5IHBhdGhzIGFzc2lnbmVkIHRvIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb25BdmFpbGFibGVNYXAgVGhlIHJlY29yZCBjb25zaXN0aW5nIG9mIGFjdGlvbnMgYW5kIHRoZWlyIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ1NWIHN0cmluZyBvZiBhbGwgcHJvcGVydHkgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBhbm5vdGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMoXG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IG9wZXJhdGlvbkF2YWlsYWJsZU1hcFthY3Rpb25OYW1lXTtcblx0XHRpZiAocHJvcGVydHlOYW1lID09PSBudWxsKSB7XG5cdFx0XHQvLyBBbm5vdGF0aW9uIGNvbmZpZ3VyZWQgd2l0aCBleHBsaWNpdCAnbnVsbCcgKGFjdGlvbiBhZHZlcnRpc2VtZW50IHJlbGV2YW50KVxuXHRcdFx0cHJvcGVydGllcy5hZGQoYWN0aW9uTmFtZSk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHQvLyBBZGQgcHJvcGVydHkgcGF0aHMgYW5kIG5vdCBDb25zdGFudCB2YWx1ZXMuXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eU5hbWUpO1xuXHRcdH1cblx0fVxuXHRpZiAocHJvcGVydGllcy5zaXplKSB7XG5cdFx0Ly8gU29tZSBhY3Rpb25zIGhhdmUgYW4gb3BlcmF0aW9uIGF2YWlsYWJsZSBiYXNlZCBvbiBwcm9wZXJ0eSAtLT4gd2UgbmVlZCB0byBsb2FkIHRoZSBIZWFkZXJJbmZvLlRpdGxlIHByb3BlcnR5XG5cdFx0Ly8gc28gdGhhdCB0aGUgZGlhbG9nIG9uIHBhcnRpYWwgYWN0aW9ucyBpcyBkaXNwbGF5ZWQgcHJvcGVybHkgKEJDUCAyMTgwMjcxNDI1KVxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCB0aXRsZVByb3BlcnR5ID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoO1xuXHRcdGlmICh0aXRsZVByb3BlcnR5KSB7XG5cdFx0XHRwcm9wZXJ0aWVzLmFkZCh0aXRsZVByb3BlcnR5KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogcmV0dXJucyBhbGwgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGV4cHJlc3Npb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB1c2VkIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggT2JqZWN0IHBhdGggb2YgdGhlIGRhdGEgbW9kZWxcbiAqIEByZXR1cm5zIEFsbCB0aGUgYFVJLkhpZGRlbmAgcGF0aCBleHByZXNzaW9ucyBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoKSwgZmFsc2UpKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgYmluZGluZyBleHByZXNzaW9uIG9mIHRoZSBwYXRoIG9mIGEgRGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBleHByZXNzaW9uIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbihleHByZXNzaW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGg6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbi5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhdGggPSBleHByZXNzaW9uO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufVxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKFxuXHRzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB7XG5cdGNvbnN0IGV4cHJlc3Npb24gPSBzb3VyY2UuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGxldCBwYXRoID0gZ2V0UGF0aEZyb21BY3Rpb25Bbm5vdGF0aW9uKGV4cHJlc3Npb24pO1xuXHRpZiAodHlwZW9mIHBhdGggPT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKFwidmlzaWJsZVwiIGluIHNvdXJjZSkge1xuXHRcdFx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDEsIHBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGlmIChwYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3Qgc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5ID0gcGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eVswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNOYXZpZ2F0aW9uUHJvcGVydHkoY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdCkgJiZcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhcnRuZXIgPT09IG5hdmlnYXRpb25QYXRoXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKHNwbGl0UGF0aEZvck5hdmlnYXRpb25Qcm9wZXJ0eS5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb25zdGFudCh0cnVlKTtcbn1cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBtYW5pZmVzdCBhY3Rpb25zIGFuZCBjaGVjayB0aGUgZm9sbG93aW5nOlxuICpcbiAqIElmIHRoZSBkYXRhIGZpZWxkIGlzIGFsc28gcmVmZXJlbmNlZCBhcyBhIGN1c3RvbSBhY3Rpb24uXG4gKiBJZiB0aGUgdW5kZXJseWluZyBtYW5pZmVzdCBhY3Rpb24gaXMgZWl0aGVyIGEgYm91bmQgYWN0aW9uIG9yIGhhcyB0aGUgJ1JlcXVpcmVzQ29udGV4dCcgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogSWYgc28sIHRoZSAncmVxdWlyZXNTZWxlY3Rpb24nIHByb3BlcnR5IGlzIGZvcmNlZCB0byAndHJ1ZScgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRJZCBJZCBvZiB0aGUgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZXZhbHVhdGVkXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIERhdGFGaWVsZCBpcyBmb3VuZCBhbW9uZyB0aGUgbWFuaWZlc3QgYWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRkYXRhRmllbGRJZDogc3RyaW5nLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZSgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0aWYgKGFjdGlvbktleSA9PT0gZGF0YUZpZWxkSWQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgfHxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5SZXF1aXJlc0NvbnRleHRcblx0XHRcdCkge1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNbZGF0YUZpZWxkSWRdLnJlcXVpcmVzU2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9mIGEgbGluZSBpdGVtIGFuZFxuICogY2hlY2sgdGhlIGZvbGxvd2luZzpcbiAqIElmIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGlzIGFsd2F5cyB2aXNpYmxlIGluIHRoZSB0YWJsZSB0b29sYmFyIGFuZCByZXF1aXJlcyBhIGNvbnRleHRcbiAqIElmIGFuIGFjdGlvbiBpcyBhbHNvIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LCBpdCBpcyBzZXQgYXNpZGUgYW5kIHdpbGwgYmUgY29uc2lkZXJlZFxuICogd2hlbiBnb2luZyB0aHJvdWdoIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKChkYXRhRmllbGQpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25JZCA9IGdlbmVyYXRlKFtcIkRhdGFGaWVsZEZvckFjdGlvblwiLCBkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZ10pO1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9yQWN0b24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQobWFuaWZlc3RBY3Rpb25JZCwgZGF0YUZpZWxkLCBtYW5pZmVzdEFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHQvLyBpZiB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gYW5ub3RhdGlvbiBhbHNvIGV4aXN0cyBpbiB0aGUgbWFuaWZlc3QsIGl0cyB2aXNpYmlsaXR5IHdpbGwgYmUgZXZhbHVhdGVkIGxhdGVyIG9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRcdFx0XHRcdFx0YERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjo6JHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9Ojoke2RhdGFGaWVsZC5BY3Rpb259YCxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYSBjdXN0b20gYWN0aW9uIHRoYXQgcmVxdWlyZXMgYSBjb250ZXh0IGlzIGFsd2F5cyB2aXNpYmxlIGluIHRoZSB0b29sYmFyLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGFjdGlvbiB0aGF0IG1lZXRzIHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBib29sZWFuIHtcblx0Y29uc3QgY3VzdG9tQWN0aW9ucyA9IE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykucmVkdWNlKChhY3Rpb25zOiBDdXN0b21BY3Rpb25bXSwgYWN0aW9uS2V5KSA9PiB7XG5cdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0aWYgKCFhY3Rpb24ubWVudSkge1xuXHRcdFx0Ly9zaW1wbGUgY3VzdG9tIGFjdGlvblxuXHRcdFx0YWN0aW9ucy5wdXNoKGFjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGdyb3VwZWQgYWN0aW9uc1xuXHRcdFx0YWN0aW9ucyA9IFsuLi5hY3Rpb25zLCAuLi4oYWN0aW9uLm1lbnUuZmlsdGVyKChtZW51QWN0aW9uKSA9PiB0eXBlb2YgbWVudUFjdGlvbiAhPT0gXCJzdHJpbmdcIikgYXMgQ3VzdG9tQWN0aW9uW10pXTtcblx0XHR9XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sIFtdKTtcblx0cmV0dXJuICEhY3VzdG9tQWN0aW9ucy5maW5kKFxuXHRcdChhY3Rpb24pID0+IGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiAmJiAoYWN0aW9uLnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBhY3Rpb24udmlzaWJsZT8udG9TdHJpbmcoKSA9PT0gXCJ0cnVlXCIpXG5cdCk7XG59XG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIGN1c3RvbSBhY3Rpb25zICh3aXRoIGtleSByZXF1aXJlc1NlbGVjdGlvbikgZGVjbGFyZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB0aGUgY3VycmVudCBsaW5lIGl0ZW0gYW5kIHJldHVybnMgYWxsIHRoZVxuICogdmlzaWJsZSBrZXkgdmFsdWVzIGFzIGFuIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgQXJyYXk8RXhwcmVzc2lvbjxib29sZWFuPj4gQWxsIHRoZSB2aXNpYmxlIHBhdGggZXhwcmVzc2lvbnMgb2YgdGhlIGFjdGlvbnMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYVxuICovXG5mdW5jdGlvbiBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaCgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUgJiYgYWN0aW9uLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0LypUaGUgZmluYWwgYWltIHdvdWxkIGJlIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgcGFyZW50IGNvbnRleHRcblx0XHRcdFx0XHRhbmQgY29uc2lkZXJzIG9ubHkgdGhvc2UgZXhwcmVzc2lvbnMgZm9yIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb24sXG5cdFx0XHRcdFx0YnV0IGN1cnJlbnRseSBub3QgcG9zc2libGUgZnJvbSB0aGUgbWFuaWZlc3QgYXMgdGhlIHZpc2libGUga2V5IGlzIGJvdW5kIG9uIHRoZSBwYXJlbnQgZW50aXR5LlxuXHRcdFx0XHRcdFRyaWNreSB0byBkaWZmZXJlbnRpYXRlIHRoZSBwYXRoIGFzIGl0J3MgZG9uZSBmb3IgdGhlIEhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0XHRcdEZvciB0aGUgdGltZSBiZWluZyB3ZSBjb25zaWRlciBhbGwgdGhlIHBhdGhzIG9mIHRoZSBtYW5pZmVzdCovXG5cdFx0XHRcdFx0YVZpc2libGVQYXRoRXhwcmVzc2lvbnMucHVzaChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24/LnZpc2libGU/LnZhbHVlT2YoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zO1xufVxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSksXG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSlcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpO1xuXHRsZXQgc2VsZWN0aW9uTW9kZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzPy5zZWxlY3Rpb25Nb2RlO1xuXHQvLyBJZiB0aGUgc2VsZWN0aW9uIG1vZGUgaXMgZm9yY2VkIHRvICdOb25lJyBpbiB0aGUgbWFuaWZlc3QvbWFjcm8gdGFibGUgcGFyYW1ldGVycywgd2UgaWdub3JlIHRoZSByZXN0IG9mIHRoZSBsb2dpYyBhbmQga2VlcCBpdCBhcyBzcGVjaWZpZWRcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24gfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0fVxuXHRpZiAoc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Gb3JjZU11bHRpKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH0gZWxzZSBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Gb3JjZVNpbmdsZSkge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLlNpbmdsZTtcblx0fVxuXHRsZXQgYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXSxcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlRXhwcmVzc2lvbihpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHRjb25zdCBiTWFzc0VkaXRFbmFibGVkOiBib29sZWFuID0gIWlzQ29uc3RhbnQobWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbikgfHwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbi52YWx1ZSAhPT0gZmFsc2U7XG5cdGlmICghc2VsZWN0aW9uTW9kZSB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkF1dG8pIHtcblx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXHRpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIE92ZXJyaWRlIGRlZmF1bHQgc2VsZWN0aW9uIG1vZGUgd2hlbiBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdHNlbGVjdGlvbk1vZGUgPSBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA/IFNlbGVjdGlvbk1vZGUuU2luZ2xlIDogU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgfHxcblx0XHRoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpXG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblx0Ly8gTm8gYWN0aW9uIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdGlmIChcblx0XHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJlxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJlxuXHRcdChjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCBiTWFzc0VkaXRFbmFibGVkKVxuXHQpIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdFx0Ly8gQnVpbGRpbmcgZXhwcmVzc2lvbiBmb3IgZGVsZXRlIGFuZCBtYXNzIGVkaXRcblx0XHRcdFx0Y29uc3QgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBvcihcblx0XHRcdFx0XHRjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiB8fCB0cnVlLFxuXHRcdFx0XHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsIC8vIGRlZmF1bHQgZGVsZXRlIHZpc2liaWxpdHkgYXMgdHJ1ZVxuXHRcdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShhbmQoVUkuSXNFZGl0YWJsZSwgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRpZkVsc2UoY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuU2luZ2xlKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdC8vIEVudGl0eVNldCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBleGFtcGxlOiBMUiBzY2VuYXJpb1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgJiYgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBVc2Ugc2VsZWN0aW9uTW9kZSBpbiBlZGl0IG1vZGUgaWYgZGVsZXRlIGlzIGVuYWJsZWQgb3IgbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRcdGNvbnN0IGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRcdGJNYXNzRWRpdEVuYWJsZWQgJiYgIXRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSxcblx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIEV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBNZXRob2QgdG8gcmV0cmlldmUgYWxsIHRhYmxlIGFjdGlvbnMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyB0YWJsZUFjdGlvbnM6IEFubm90YXRpb25BY3Rpb25bXTsgaGlkZGVuVGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gfSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQW5ub3RhdGlvbkFjdGlvbltdID0gW107XG5cdGNvbnN0IGhpZGRlblRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGNvbnN0IGNvcHlEYXRhRmllbGQgPSBnZXRDb3B5QWN0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMpO1xuXHRcdH0pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW11cblx0KTtcblx0Y29uc3Qgc0VudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5mdWxseVF1YWxpZmllZE5hbWU7XG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgdW5kZWZpbmVkXG5cdCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5vdChcblx0XHRcdGVxdWFsKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0KSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH07XG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IHVuZGVmaW5lZFxuXHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBhbmQodmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkKSwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcblx0fTtcblx0aWYgKGNvcHlEYXRhRmllbGQpIHtcblx0XHRjb25zdCB1c2VFbmFibGVkRXhwcmVzc2lvbiA9IF91c2VFbmFibGVkRXhwcmVzc2lvbihjb3B5RGF0YUZpZWxkLCBzRW50aXR5VHlwZSk7XG5cdFx0dGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5Db3B5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChjb3B5RGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoY29weURhdGFGaWVsZCksXG5cdFx0XHQvLyBVc2UgT3BlcmF0aW9uQXZhaWxhYmxlIGlmIGRlZmluZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIG9uZSBzZWxlY3RlZCBpdGVtXG5cdFx0XHRlbmFibGVkOiB1c2VFbmFibGVkRXhwcmVzc2lvblxuXHRcdFx0XHQ/IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGNvcHlEYXRhRmllbGQuQWN0aW9uVGFyZ2V0LCB0cnVlKVxuXHRcdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpKSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQpKSxcblx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihjb3B5RGF0YUZpZWxkKSksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdC5maWx0ZXIoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuICFkYXRhRmllbGRJc0NvcHlBY3Rpb24oZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0aGlkZGVuVGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdFx0ZGF0YUZpZWxkLkRldGVybWluaW5nPy52YWx1ZU9mKCkgIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBY3Rpb246IEFubm90YXRpb25BY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkKSksXG5cdFx0XHRcdFx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihkYXRhRmllbGQpKSxcblx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpZiAoX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZCwgc0VudGl0eVR5cGUpKSB7XG5cdFx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uLmVuYWJsZWQgPSBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0LCB0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVFeHByZXNzaW9uKGRhdGFGaWVsZCkpLFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHZpc2libGVGb3JDb250ZXh0TWVudUV4cHJlc3Npb24oZGF0YUZpZWxkKSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdHJldHVybiB7XG5cdFx0dGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uc1xuXHR9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiBQYXRoIG9yIHZhbHVlIG9mIHRoZSBjcml0aWNhbGl0eVxuICogQHBhcmFtIGlzRHJhZnRSb290T3JOb2RlICBJcyB0aGUgY3VycmVudCBlbnRpdHlTZXQgYW4gRHJhZnQgcm9vdCBvciBhIG5vZGVcbiAqIEBwYXJhbSB0YXJnZXRFbnRpdHlUeXBlIFRoZSB0YXJnZXRlZCBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uQmluZGluZ1xuICovXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRjcml0aWNhbGl0eUFubm90YXRpb246IENyaXRpY2FsaXR5IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdE9yTm9kZTogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdE9yTm9kZX1gLFxuXHRcdFx0cGF0aEluTW9kZWwoXCJAJHVpNS5mZS5jb250ZXh0UGF0aFwiKVxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5mdW5jdGlvbiBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuRXh0ZXJuYWxdLmluY2x1ZGVzKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSlcblx0KSB7XG5cdFx0Ly8gRmFsbGJhY2sgdG8gXCJOZXdQYWdlXCJcblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBDcmVhdGlvbiBtb2RlICcke3RhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZX0nIGNhbiBub3QgYmUgdXNlZCB3aXRoaW4gdGhlIExpc3QgUmVwb3J0LiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH0gZWxzZSBpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiICYmXG5cdFx0IVtDcmVhdGlvbk1vZGUuTmV3UGFnZSwgQ3JlYXRpb25Nb2RlLklubGluZV0uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIiBpbiBjYXNlIG9mIGEgbm9uLXN1cHBvcnRlZCBtb2RlIGZvciBhIFRyZWVUYWJsZVxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBUcmVlIFRhYmxlLiBJbnN0ZWFkLCB0aGUgZGVmYXVsdCBtb2RlIFwiTmV3UGFnZVwiIGlzIHVzZWQuYFxuXHRcdCk7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdH1cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0Ly8gbm8gbmF2aWdhdGlvbiBvciBubyByb3V0ZSBzcGVjaWZpZWQgLSBmYWxsYmFjayB0byBpbmxpbmUgY3JlYXRlIGlmIG9yaWdpbmFsIGNyZWF0aW9uIG1vZGUgd2FzICdOZXdQYWdlJ1xuXHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuTmV3UGFnZSkge1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0TG9nLmVycm9yKFwiVGhlIGNyZWF0aW9uIG1vZGUgJ05ld1BhZ2UnIGlzIHVzZWQgYnV0IHRoZSBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YiBwYWdlIGlzIG1pc3NpbmcuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSB3YXMgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNyZWF0ZUF0RW5kIHdlIGZvcmNlIGl0IHRvIGZhbHNlXG5cdFx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0TG9nLmluZm8oXCJUaGUgY3JlYXRpb24gbW9kZSB3YXMgY2hhbmdlZCBmcm9tICdOZXdQYWdlJyB0byAnSW5saW5lJyBkdWUgdG8gbWlzc2luZyBuYXZpZ2F0aW9uIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHN1YiBwYWdlLlwiKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKVxuXHR9O1xufVxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhcmdldFBhdGg6IHN0cmluZyxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGVcbik6IFJvd0NvbmZpZ3VyYXRpb24ge1xuXHRsZXQgcHJlc3NQcm9wZXJ0eSwgb3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSwgbmF2aWdhdGlvblRhcmdldDtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBjb25zdGFudChNZXNzYWdlVHlwZS5Ob25lKTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRpZiAobmF2aWdhdGlvblNldHRpbmdzICYmIGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheT8udGFyZ2V0IHx8IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/Lm91dGJvdW5kO1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eSxcblx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHQpO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRwcmVzc1Byb3BlcnR5ID0gYC5oYW5kbGVycy5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoICRjb250cm9sbGVyICwnJHtuYXZpZ2F0aW9uVGFyZ2V0fScsIFxcJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0pYDtcblx0XHRcdG9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHkgPSBgLm9uT3BlbkluTmV3VGFiTmF2aWdhdGVPdXRCb3VuZCgnJHtuYXZpZ2F0aW9uVGFyZ2V0fScsICV7aW50ZXJuYWw+Y29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c30sIFwiXCIsICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWA7XG5cdFx0fVxuXHRcdGlmICghbmF2aWdhdGlvblRhcmdldCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZSkge1xuXHRcdFx0Y29uc3QgZWRpdGFibGUgPVxuXHRcdFx0XHRNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QodGFyZ2V0RW50aXR5U2V0KSB8fCBNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KVxuXHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIjtcblx0XHRcdGNvbnN0IHJlY3JlYXRlQ29udGV4dCA9IHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiA/IFwiLCByZWNyZWF0ZUNvbnRleHQ6IHRydWVcIiA6IFwiXCI7XG5cdFx0XHRwcmVzc1Byb3BlcnR5ID0gYEFQSS5vblRhYmxlUm93UHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgXFwkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnJHt0YXJnZXRQYXRofScsIGVkaXRhYmxlOiAke2VkaXRhYmxlfSAke3JlY3JlYXRlQ29udGV4dH0gfSlgOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdG9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHkgPSBgQVBJLm9uT3BlbkluTmV3VGFiUHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgJXtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnJHt0YXJnZXRQYXRofScsIG5hdk1vZGU6ICdvcGVuSW5OZXdUYWInIH0sICR7c2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWJ9KWA7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGZvcm1hdFJlc3VsdChcblx0XHRbcGF0aEluTW9kZWwoXCIvZGVlcGVzdFBhdGhcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLm5hdmlnYXRlZFJvdyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IHByZXNzUHJvcGVydHksXG5cdFx0b3BlbkluTmV3VGFiUHJlc3M6IG9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHksXG5cdFx0YWN0aW9uOiBwcmVzc1Byb3BlcnR5ID8gXCJOYXZpZ2F0aW9uXCIgOiB1bmRlZmluZWQsXG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBjb21waWxlRXhwcmVzc2lvbihjcml0aWNhbGl0eVByb3BlcnR5KSxcblx0XHRyb3dOYXZpZ2F0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKHJvd05hdmlnYXRlZEV4cHJlc3Npb24pLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChVSS5Jc0luYWN0aXZlKSlcblx0fTtcbn07XG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb2x1bW5zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCBUaGUgbWFwIG9mIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyBkZXNjcmlwdGlvbiBvbiBhIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSByZXN0cmljdGlvbnNPblByb3BlcnRpZXMgVGhlIGV4aXN0aW5nIHJlc3RyaWN0aW9ucyBvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1uIGZyb20gdGhlIGVudGl0eVR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSxcblx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcDogUmVjb3JkPHN0cmluZywgRGlzcGxheU1vZGU+LFxuXHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXM/OiBSZXN0cmljdGlvbnNPblByb3BlcnRpZXNcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0aWYgKGFubm90YXRpb25Db2x1bW5zID09PSB1bmRlZmluZWQpIHtcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyA9IFtdO1xuXHR9XG5cdGNvbnN0IHRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBhbm5vdGF0aW9uQ29sdW1ucztcblx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoKGNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi5uYW1lID09PSBwcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Ly8gSW5jbHVkZSB0aGUgdGV4dCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRleHQgYXJyYW5nZW1lbnRcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0YWRkUHJvcGVydHlUb0Rpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAoZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCwgcmVsYXRlZFByb3BlcnRpZXNJbmZvLCBuYW1lKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCxcblx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZSxcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXNJbmZvXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29sdW1uSW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXS5hbm5vdGF0aW9uUHJvcGVydHk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIFByb3BlcnR5IExhYmVsIHdoZW4gaXQncyByZWZlcmVuY2VkIG9ubHkgb25jZSBpbiBhIGNvbHVtbiwgbmV3IGxhYmVsIHdpbGwgYmUgdGhlIGxhYmVsIG9mIHRoZSBjb2x1bW5cblx0XHRcdHVwZGF0ZVByb3BlcnR5TGFiZWwoYW5ub3RhdGlvbkNvbHVtbnMsIGNvbHVtbnNUb0JlQ3JlYXRlZCwgY29sdW1uSW5mbyk7XG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFthZGRpdGlvbmFsUHJvcGVydHlOYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlOYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBhIHByb3BlcnR5IGhhcyBkZWZpbmVkIGEgI1RleHRPbmx5IHRleHQgYXJyYW5nZW1lbnQgdGhhdCBwb2ludHMgdG8gYSB0ZXh0IHByb3BlcnR5IChhbmQgbm90IGEgJ2hhcmQgY29kZWQgdGV4dCcpIGRvbid0IG9ubHkgY3JlYXRlIHRoZSBjb21wbGV4IHByb3BlcnR5IHdpdGggdGhlIHRleHQgcHJvcGVydHkgYXMgYSBjaGlsZCBwcm9wZXJ0eSxcblx0XHQvLyBidXQgYWxzbyB0aGUgcHJvcGVydHkgaXRzZWxmIGFzIGl0IGNhbiBiZSB1c2VkIGFzIHdpdGhpbiB0aGUgc29ydENvbmRpdGlvbnMgb3Igb24gY3VzdG9tIGNvbHVtbnMuXG5cdFx0Ly8gVGhpcyBzdGVwIG11c3QgYmUgdmFsaWQgYWxzbyBmcm9tIHRoZSBjb2x1bW5zIGFkZGVkIHZpYSBMaW5lSXRlbXMgb3IgZnJvbSBhIGNvbHVtbiBhdmFpbGFibGUgb24gdGhlIHAxM24uXG5cdFx0aWYgKGdldERpc3BsYXlNb2RlKHByb3BlcnR5KSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXM/Lm5vblNvcnRhYmxlUHJvcGVydGllcy5wdXNoKHByb3BlcnR5Lm5hbWUpO1xuXHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KSkge1xuXHRcdFx0XHR0YWJsZUNvbHVtbnMucHVzaChcblx0XHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCxcblx0XHRcdFx0XHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdC8vIENyZWF0ZSBhIHByb3BlcnR5SW5mbyBmb3IgZWFjaCByZWxhdGVkIHByb3BlcnR5LlxuXHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0dGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlLFxuXHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllc1xuXHQpO1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG59O1xuLyoqXG4gKiBDcmVhdGUgYSBjb2x1bW4gZGVmaW5pdGlvbiBmcm9tIGEgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEVudGl0eSB0eXBlIHByb3BlcnR5IGZvciB3aGljaCB0aGUgY29sdW1uIGlzIGNyZWF0ZWRcbiAqIEBwYXJhbSBmdWxsUHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5IGJhc2VkIG9uIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gdXNlRGF0YUZpZWxkUHJlZml4IFNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIFwiRGF0YUZpZWxkOjpcIiwgZWxzZSBpdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggXCJQcm9wZXJ0eTo6XCJcbiAqIEBwYXJhbSBhdmFpbGFibGVGb3JBZGFwdGF0aW9uIERlY2lkZXMgd2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGFkYXB0YXRpb25cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb25IZWxwZXIgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAgVGhlIG1hcCBvZiBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYXMgZGVzY3JpcHRpb24gb24gYSB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb25cbiAqIEBwYXJhbSByZXN0cmljdGlvbnNPblByb3BlcnRpZXMgVGhlIGV4aXN0aW5nIHJlc3RyaWN0aW9ucyBvbiBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXNJbmZvIFRoZSBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgc28gZmFyIGZvciB0aGUgY29sdW1uXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdHVzZURhdGFGaWVsZFByZWZpeDogYm9vbGVhbixcblx0YXZhaWxhYmxlRm9yQWRhcHRhdGlvbjogYm9vbGVhbixcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXA6IFJlY29yZDxzdHJpbmcsIERpc3BsYXlNb2RlPixcblx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzPzogUmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLFxuXHR0YWJsZUNyZWF0aW9uTW9kZT86IENyZWF0aW9uTW9kZSxcblx0cmVsYXRlZFByb3BlcnRpZXNJbmZvPzogQ29tcGxleFByb3BlcnR5SW5mb1xuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IGBQcm9wZXJ0eTo6JHtyZWxhdGl2ZVBhdGh9YDtcblx0Y29uc3Qga2V5ID0gKHVzZURhdGFGaWVsZFByZWZpeCA/IFwiRGF0YUZpZWxkOjpcIiA6IFwiUHJvcGVydHk6OlwiKSArIHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGlzSGlkZGVuID0gaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4ocHJvcGVydHkpO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBsYWJlbCA9IGdldExhYmVsKHByb3BlcnR5LCBpc0dyb3VwKTtcblx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKHByb3BlcnR5KTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgZGF0YVR5cGUpO1xuXHRjb25zdCBpc0FQcm9wZXJ0eUZyb21UZXh0T25seUFubm90YXRpb24gPSBkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwW3JlbGF0aXZlUGF0aF0gPT09IFwiRGVzY3JpcHRpb25cIjtcblx0Y29uc3Qgc29ydGFibGUgPVxuXHRcdCghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiAhcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzPy5ub25Tb3J0YWJsZVByb3BlcnRpZXMuaW5jbHVkZXMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZmlsdGVyYWJsZSA9ICFpc0FQcm9wZXJ0eUZyb21UZXh0T25seUFubm90YXRpb24gJiYgIXJlc3RyaWN0aW9uc09uUHJvcGVydGllcz8ubm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuaW5jbHVkZXMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IHtcblx0XHRjbGFzc05hbWU6IHByb3BlcnR5LnR5cGUgfHwgZGF0YVR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHR9O1xuXHRsZXQgZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKHByb3BlcnR5KSkge1xuXHRcdGV4cG9ydFNldHRpbmdzID0gY3JlYXRlQ29sdW1uRXhwb3J0U2V0dGluZ3MocHJvcGVydHksIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyk7XG5cdH1cblx0Y29uc3QgYXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlID1cblx0XHQhYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiB8fCBpc0hpZGRlbiB8fCBkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwW3JlbGF0aXZlUGF0aF0gPyBcIkhpZGRlblwiIDogXCJBZGFwdGF0aW9uXCI7XG5cdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uID0ge1xuXHRcdGtleToga2V5LFxuXHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRsYWJlbDogbGFiZWwsXG5cdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKHByb3BlcnR5KSA6IHVuZGVmaW5lZCxcblx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IHVuZGVmaW5lZCxcblx0XHRhbm5vdGF0aW9uUGF0aDogZnVsbFByb3BlcnR5UGF0aCxcblx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0YXZhaWxhYmlsaXR5OiBhdmFpbGFiaWxpdHksXG5cdFx0bmFtZTogbmFtZSxcblx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0ZmlsdGVyYWJsZTogZmlsdGVyYWJsZSxcblx0XHRpc0dyb3VwYWJsZTogYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSA/ICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkgOiBzb3J0YWJsZSxcblx0XHRpc0tleTogcHJvcGVydHkuaXNLZXksXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzLFxuXHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0eXBlQ29uZmlnOiB0eXBlQ29uZmlnIGFzIFByb3BlcnR5VHlwZUNvbmZpZyxcblx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCksXG5cdFx0cmVxdWlyZWQ6IGlzUmVxdWlyZWRDb2x1bW4oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHksIHRhYmxlQ3JlYXRpb25Nb2RlKSxcblx0XHRhZGRpdGlvbmFsTGFiZWxzOiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHNcblx0fTtcblx0X2FkZFRvb2xUaXAocHJvcGVydHksIGNvbHVtbik7XG5cdF9zZXRFeHBvcnRTZXR0aW5nc0ZvckRhdGFQb2ludChwcm9wZXJ0eSwgY29sdW1uKTtcblx0cmV0dXJuIGNvbHVtbjtcbn07XG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIGZvciBhIGdpdmVuIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBnaXZlbiBjb2x1bW4gZnJvbSBhIGxpbmUgaXRlbSBhcyBhIGRhdGEgZmllbGQgb3IgYSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnRpdHkgdHlwZVxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGxpbmtlZCB0byB0aGUgY29sdW1uIChuYW1lZCBhbHNvIGNvbXBsZXggcHJvcGVydHkpXG4gKiBAcmV0dXJucyBUaGUgZXhwb3J0IHNldHRpbmdzIGluIGEgdGhlIGdpdmVuIGNvbHVtblxuICovXG5jb25zdCBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uOiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz86IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0bGV0IHVuaXRQcm9wZXJ0eSwgdGltZXpvbmVQcm9wZXJ0eSwgdW5pdFRleHQsIHRpbWV6b25lVGV4dCwgdXRjLCBpc0FUaW1lem9uZSwgY3VycmVuY3lQcm9wZXJ0eSwgc2NhbGU7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvID8gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpIDogW107XG5cdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8gJiYgcmVsYXRlZFByb3BlcnR5TmFtZXM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIGJhc2VkIG9uIHRoZSByZWxhdGVkIChjaGlsZCkgcHJvcGVydHkgaW4gY2FzZSB0aGVyZSBpcyBvbmx5IG9uZS5cblx0XHQvLyBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gd2UgaGF2ZSBhIHRleHQgb25seSBhbm5vdGF0aW9uIHRvIGNvbXB1dGUgdGhlIGV4cG9ydCBzZXR0aW5ncyBmcm9tIHRoZSB0ZXh0IGluc3RlYWQgb2YgdGhlIHZhbHVlXG5cdFx0Y29sdW1uID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZXNbMF1dLmFubm90YXRpb25Qcm9wZXJ0eTtcblx0fVxuXHRjb25zdCBkYXRhVHlwZSA9IGdldERhdGFGaWVsZERhdGFUeXBlKGNvbHVtbik7XG5cdGlmIChpc1Byb3BlcnR5KGNvbHVtbikpIHtcblx0XHR1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KGNvbHVtbik7XG5cdFx0Y3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KGNvbHVtbik7XG5cdFx0dGltZXpvbmVQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KGNvbHVtbik7XG5cdFx0dW5pdFRleHQgPSBnZXRTdGF0aWNVbml0T3JDdXJyZW5jeShjb2x1bW4pO1xuXHRcdHRpbWV6b25lVGV4dCA9IGdldFN0YXRpY1RpbWV6b25lKGNvbHVtbik7XG5cdFx0aXNBVGltZXpvbmUgPSBpc1RpbWV6b25lKGNvbHVtbik7XG5cdFx0c2NhbGUgPSBjb2x1bW4uc2NhbGU7XG5cdH1cblx0dW5pdFByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncz8udW5pdFByb3BlcnR5ID8/IHVuaXRQcm9wZXJ0eT8ubmFtZSA/PyBjdXJyZW5jeVByb3BlcnR5Py5uYW1lO1xuXHR0aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncz8udGltZXpvbmVQcm9wZXJ0eSA/PyB0aW1lem9uZVByb3BlcnR5Py5uYW1lO1xuXHRzY2FsZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz8uZXhwb3J0U2V0dGluZ3M/LnNjYWxlID8/IHNjYWxlO1xuXHRjb25zdCBleHBvcnRUeXBlID0gZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGUsIGlzQVRpbWV6b25lLCAhIWN1cnJlbmN5UHJvcGVydHksIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz8uZXhwb3J0U2V0dGluZ3MpO1xuXHRpZiAodGltZXpvbmVQcm9wZXJ0eSB8fCAoZXhwb3J0VHlwZSA9PT0gXCJEYXRlVGltZVwiICYmICF0aW1lem9uZVRleHQpKSB7XG5cdFx0dXRjID0gZmFsc2U7XG5cdH1cblx0Y29uc3QgZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzID0ge1xuXHRcdHR5cGU6IGV4cG9ydFR5cGUsXG5cdFx0aW5wdXRGb3JtYXQ6IGdldERhdGVJbnB1dEZvcm1hdChkYXRhVHlwZSksXG5cdFx0ZGVsaW1pdGVyOiBnZXREZWxpbWl0ZXIoZGF0YVR5cGUpLFxuXHRcdHNjYWxlOiBzY2FsZSxcblx0XHR1bml0UHJvcGVydHk6IHVuaXRQcm9wZXJ0eSxcblx0XHR1bml0OiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLnVuaXQgPz8gdW5pdFRleHQsXG5cdFx0dGltZXpvbmVQcm9wZXJ0eTogdGltZXpvbmVQcm9wZXJ0eSxcblx0XHR0aW1lem9uZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncy50aW1lem9uZSA/PyB0aW1lem9uZVRleHQ/LnRvU3RyaW5nKCksXG5cdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz8uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUsXG5cdFx0Ly9vbmx5IGluIGNhc2Ugb2YgY29tcGxleCBwcm9wZXJ0aWVzLCB3cmFwIHRoZSBjZWxsIGNvbnRlbnRcdG9uIHRoZSBleGNlbCBleHBvcnRlZCBmaWxlXG5cdFx0d3JhcDogcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncy53cmFwLFxuXHRcdHV0YzogdXRjXG5cdH07XG5cdHJldHVybiByZW1vdmVVbmRlZmluZWRGcm9tRXhwb3J0U2V0dGluZ3MoZXhwb3J0U2V0dGluZ3MpO1xufTtcbi8qKlxuICogR2V0cyB0aGUgZXhwb3J0IGZvcm1hdCB0ZW1wbGF0ZSBmb3IgY29sdW1ucyB3aXRoIGRhdGVzLlxuICpcbiAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBjb2x1bW5cbiAqIEByZXR1cm5zIFRoZSBpbnB1dEZvcm1hdFxuICovXG5jb25zdCBnZXREYXRlSW5wdXRGb3JtYXQgPSBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xufTtcbi8qKlxuICogR2V0cyB0aGUgZGVsaW1pdGVyIGluIG51bWVyaWMgY29sdW1ucy5cbiAqIFRoZSBkZWxpbWl0ZXIgaXMgdXNlZCB0byBkaXNwbGF5IHRob3VzYW5kcyBzZXBhcmF0b3IgaW4gbnVtZXJpYyBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBkYXRhVHlwZSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBjb2x1bW5cbiAqIEByZXR1cm5zIFRydWUgdG8gZGlzcGxheSB0aG91c2FuZHMgc2VwYXJhdG9yIGluIG51bWVyaWMgY29sdW1uc1xuICovXG5jb25zdCBnZXREZWxpbWl0ZXIgPSBmdW5jdGlvbiAoZGF0YVR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGRhdGFUeXBlID09PSBcIkVkbS5JbnQ2NFwiID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIFJlbW92ZXMgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2JqZWN0IG9mIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgZXhwb3J0IHNldHRpbmdzIGNvbmZpZ3VyYXRpb25zIGZvciBhIGNvbHVtblxuICogQHJldHVybnMgVGhlIGV4cG9ydCBzZXR0aW5ncyBjb25maWd1cmF0aW9ucyB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXNcbiAqL1xuY29uc3QgcmVtb3ZlVW5kZWZpbmVkRnJvbUV4cG9ydFNldHRpbmdzID0gZnVuY3Rpb24gKGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyk6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0Ly9SZW1vdmUgdW5kZWZpbmVkIHNldHRpbmdzIGZyb20gZXhwb3J0U2V0dGluZyBvYmplY3Rcblx0Zm9yIChjb25zdCBzZXR0aW5nIGluIGV4cG9ydFNldHRpbmdzKSB7XG5cdFx0aWYgKGV4cG9ydFNldHRpbmdzW3NldHRpbmcgYXMga2V5b2YgQ29sdW1uRXhwb3J0U2V0dGluZ3NdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBleHBvcnRTZXR0aW5nc1tzZXR0aW5nIGFzIGtleW9mIENvbHVtbkV4cG9ydFNldHRpbmdzXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGV4cG9ydFNldHRpbmdzO1xufTtcbi8qKlxuICogVXBkYXRlIHByb3BlcnR5IGxhYmVsIGluIGNhc2UgaXQncyBvbmx5IHJlZmVyZW5jZWQgaW4gb25lIGNvbHVtbi4gVGhlIGxhYmVsIG9mIHRoZSBjb2x1bW4gbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHByb3BlcnR5IGxhYmVsLlxuICogVGhpcyB1cGRhdGUgYWxzbyBpcyBhcHBsaWVkIGZvciB0aGUgdG9vbHRpcCBhcyBpdCBpcyBiYXNlZCBvbiB0aGUgY29sdW1uJ3MgbGFiZWwuXG4gKlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSBjb2x1bW5JbmZvIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eUxhYmVsKFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRjb2x1bW5JbmZvOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5cbik6IHZvaWQge1xuXHRjb25zdCBsaW5rZWRBbm5vdGF0aW9uQ29sdW1ucyA9IGFubm90YXRpb25Db2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMoY29sdW1uSW5mby5yZWxhdGl2ZVBhdGgpKTtcblx0aWYgKFxuXHRcdGxpbmtlZEFubm90YXRpb25Db2x1bW5zPy5sZW5ndGggPT09IDEgJiZcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbY29sdW1uSW5mby5yZWxhdGl2ZVBhdGhdICYmXG5cdFx0bGlua2VkQW5ub3RhdGlvbkNvbHVtbnNbMF0ucHJvcGVydHlJbmZvcz8ubGVuZ3RoID09PSAxXG5cdCkge1xuXHRcdGNvbHVtbkluZm8ubGFiZWwgPSBsaW5rZWRBbm5vdGF0aW9uQ29sdW1uc1swXS5sYWJlbDtcblx0XHRjb2x1bW5JbmZvLnRvb2x0aXAgPSBsaW5rZWRBbm5vdGF0aW9uQ29sdW1uc1swXS50b29sdGlwO1xuXHR9XG59XG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbnMsIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIGRhdGFGaWVsZCBvciBwcm9wZXJ0eSB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1uLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1uXG4gKi9cbmZ1bmN0aW9uIF9pc0V4cG9ydGFibGVDb2x1bW4oc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBib29sZWFuIHtcblx0bGV0IHByb3BlcnR5VHlwZSwgcHJvcGVydHk7XG5cdGNvbnN0IGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eSA9IChzb3VyY2UgYXMgUHJvcGVydHkpLmFubm90YXRpb25zLlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UpKSB7XG5cdFx0aWYgKGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHNvdXJjZSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cHJvcGVydHlUeXBlID0gZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5Py4kVHlwZTtcblx0fSBlbHNlIGlmIChpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnR5ID0gc291cmNlO1xuXHRcdHByb3BlcnR5VHlwZSA9IHByb3BlcnR5LiRUeXBlO1xuXHRcdGlmIChwcm9wZXJ0eVR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdC8vRm9yIENoYXJ0XG5cdFx0XHRwcm9wZXJ0eVR5cGUgPSAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZTtcblx0XHRcdHJldHVybiBwcm9wZXJ0eVR5cGUgIT09IHVuZGVmaW5lZCAmJiAhVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQocHJvcGVydHkgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8udGVybSA9PT0gXCJPcmcuT0RhdGEuQ29yZS5WMS5NZWRpYVR5cGVcIiAmJlxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5pc1VSTCAhPT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Ly9Gb3IgU3RyZWFtXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVcblx0XHQ/ICFbXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHRcdCAgXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpXG5cdFx0OiB0cnVlO1xufVxuLyoqXG4gKiBSZXR1cm5zIEJvb2xlYW4gdHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqL1xuY29uc3QgX2lzVmFsaWRDb2x1bW4gPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogYm9vbGVhbiB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHRcdC8vICB0aHJvdyBuZXcgRXJyb3IoXCJVbmhhbmRsZWQgRGF0YUZpZWxkIEFic3RyYWN0IHR5cGU6IFwiICsgZGF0YUZpZWxkLiRUeXBlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludCBhbm5vdGF0aW9uLlxuICpcbiAqIFNBUCBGaW9yaSBlbGVtZW50cyB3aWxsIGV2YWx1YXRlIGVpdGhlciB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZGVmaW5lZCBvbiB0aGUgYW5ub3RhdGlvbiBpdHNlbGYgb3Igb24gdGhlIHRhcmdldCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkTW9kZWxQYXRoIFRoZSBtZXRhcGF0aCByZWZlcnJpbmcgdG8gdGhlIGFubm90YXRpb24gdGhhdCBpcyBldmFsdWF0ZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBfZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdDtcblx0bGV0IHByb3BlcnR5VmFsdWU7XG5cdGlmICh0YXJnZXRPYmplY3QpIHtcblx0XHRzd2l0Y2ggKHRhcmdldE9iamVjdC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0Ly8gaWYgaXQgaXMgYSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHBvaW50aW5nIHRvIGEgRGF0YVBvaW50IHdlIGxvb2sgYXQgdGhlIGRhdGFQb2ludCdzIHZhbHVlXG5cdFx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlRhcmdldC4kdGFyZ2V0Py5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQgPSAvKmZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gVUkuSXNFeHBhbmRlZCA6Ki8gY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0FuYWx5dGljYWxMZWFmID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IGVxdWFsKFVJLk5vZGVMZXZlbCwgMCkgOiovIGNvbnN0YW50KGZhbHNlKTtcblx0Ly8gQSBkYXRhIGZpZWxkIGlzIHZpc2libGUgaWY6XG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSBvcmlnaW5hbCBhbm5vdGF0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgdGFyZ2V0IHByb3BlcnR5IGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIGluIGNhc2Ugb2YgQW5hbHl0aWNzIGl0J3Mgbm90IHZpc2libGUgZm9yIGFuIGV4cGFuZGVkIEdyb3VwSGVhZGVyXG5cdHJldHVybiBhbmQoXG5cdFx0Li4uW1xuXHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHQhIXByb3BlcnR5VmFsdWUsXG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgJiYgbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpLFxuXHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdF1cblx0KTtcbn07XG4vKipcbiAqIFJldHVybnMgaGlkZGVuIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIGEgZmllbGQgZ3JvdXAuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZEdyb3VwIERhdGFGaWVsZCBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgQ29tcGlsZSBiaW5kaW5nIG9mIGZpZWxkIGdyb3VwIGV4cHJlc3Npb25zLlxuICovXG5jb25zdCBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gZnVuY3Rpb24gKGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGlmIChkYXRhRmllbGRHcm91cD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZEdyb3VwLmFubm90YXRpb25zLlVJLkhpZGRlbiksIHRydWUpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucy5wdXNoKFxuXHRcdFx0XHRcdF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFxuXHRcdFx0XHRcdFx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlc1xuXHRcdFx0XHRcdD4pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2Uob3IoLi4uZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKSwgY29uc3RhbnQodHJ1ZSksIGNvbnN0YW50KGZhbHNlKSkpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHByb3BlcnR5IGFuZCBkYXRhRmllbGQuXG4gKlxuICogQHBhcmFtIFtwcm9wZXJ0eV0gUHJvcGVydHksIERhdGFGaWVsZCBvciBOYXZpZ2F0aW9uIFByb3BlcnR5IGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcGFyYW0gaXNHcm91cFxuICogQHJldHVybnMgTGFiZWwgb2YgdGhlIHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICovXG5jb25zdCBnZXRMYWJlbCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5LCBpc0dyb3VwID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRcdGlmIChkYXRhRmllbGREZWZhdWx0ICYmICFkYXRhRmllbGREZWZhdWx0LnF1YWxpZmllciAmJiBkYXRhRmllbGREZWZhdWx0LkxhYmVsKSB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udG9TdHJpbmcoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBwcm9wZXJ0eT8uTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHRwcm9wZXJ0eT8uTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsLCBbXSwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcm9wZXJ0eS5MYWJlbD8udG9TdHJpbmcoKSA/P1xuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbigocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHByb3BlcnR5LkxhYmVsPy50b1N0cmluZygpO1xuXHR9XG59O1xuY29uc3QgX2dldFRvb2x0aXAgPSBmdW5jdGlvbiAoc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXNvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSB8fCBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNvdXJjZS5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkVHlwZXMoc291cmNlKSkge1xuXHRcdHJldHVybiBzb3VyY2UuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oc291cmNlLlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzb3VyY2UuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRjb25zdCBkYXRhcG9pbnRUYXJnZXQgPSBzb3VyY2UuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRyZXR1cm4gZGF0YXBvaW50VGFyZ2V0Py5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhcG9pbnRUYXJnZXQuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvKSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShjb2xOYW1lOiBzdHJpbmcsIGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXA/OiBib29sZWFuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRwYXRoSW5Nb2RlbChgc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcmAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRjb2xOYW1lLFxuXHRcdFx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcblx0KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIFByb3BlcnR5SW5mbyBmb3IgZWFjaCBpZGVudGlmaWVkIHByb3BlcnR5IGNvbnN1bWVkIGJ5IGEgTGluZUl0ZW0uXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBJZGVudGlmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZXhpc3RpbmdDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZm9yIHRoZSBMaW5lSXRlbVxuICogQHBhcmFtIGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAgVGhlIG1hcCBvZiBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYXMgdGV4dCBvbiBhIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSByZXN0cmljdGlvbnNPblByb3BlcnRpZXMgVGhlIGV4aXN0aW5nIHJlc3RyaWN0aW9ucyBvbiBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkLlxuICovXG5jb25zdCBfY3JlYXRlUmVsYXRlZENvbHVtbnMgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXA6IFJlY29yZDxzdHJpbmcsIERpc3BsYXlNb2RlPixcblx0dGFibGVDcmVhdGlvbk1vZGU/OiBDcmVhdGlvbk1vZGUsXG5cdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcz86IFJlc3RyaWN0aW9uc09uUHJvcGVydGllc1xuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwLFxuXHRcdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXMsXG5cdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlXG5cdFx0XHQpO1xuXHRcdFx0Y29tcHV0ZUhpZGRlbk9uUmVsYXRlZENvbHVtbnMoZXhpc3RpbmdDb2x1bW5zLCBuYW1lLCBjb2x1bW4pO1xuXHRcdFx0dXBkYXRlUHJvcGVydHlMYWJlbChleGlzdGluZ0NvbHVtbnMsIGNvbHVtbnNUb0JlQ3JlYXRlZCwgY29sdW1uKTtcblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRDb2x1bW4uYW5ub3RhdGlvblBhdGggIT09IGFubm90YXRpb25QYXRoIHx8IHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Ly8gQ2FzZSAyOiBUaGUgZXhpc3RpbmcgY29sdW1uIHBvaW50cyB0byBhIExpbmVJdGVtIChvcilcblx0XHRcdC8vIENhc2UgMzogVGhpcyBpcyBhIHNlbGYgcmVmZXJlbmNlIGZyb20gYW4gZXhpc3RpbmcgY29sdW1uXG5cdFx0XHRjb25zdCBuZXdOYW1lID0gYFByb3BlcnR5Ojoke25hbWV9YDtcblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCxcblx0XHRcdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXMsXG5cdFx0XHRcdFx0dGFibGVDcmVhdGlvbk1vZGVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29tcHV0ZUhpZGRlbk9uUmVsYXRlZENvbHVtbnMoZXhpc3RpbmdDb2x1bW5zLCBuYW1lLCBjb2x1bW4pO1xuXHRcdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpICYmXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcFtuYW1lXSA9PT0gXCJEZXNjcmlwdGlvblwiICYmXG5cdFx0XHQhcmVsYXRlZENvbHVtbi5maWx0ZXJhYmxlICYmXG5cdFx0XHQhcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzPy5ub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhuYW1lKVxuXHRcdCkge1xuXHRcdFx0Ly8gQ2FzZSA0OiBUaGUgY29sdW1uIGlzIGEgcmVmZXJlbmNlZCB0ZXh0IG9ubHkgcHJvcGVydHkuIFNldCBpdCB0byBoaWRkZW4sIG5vbiBzb3J0YWJsZSBub3IgZ3JvdXBhYmxlLlxuXHRcdFx0Ly8gQ2FzZSA1OiBUaGUgY29sdW1uIGlzbid0IGFscmVhZHkgYXZhaWxhYmxlIGZvciBmaWx0ZXJpbmcgYXMgaXQgY291bGQgYmUgcmVmZXJlbmNlZCBvbiBhbm90aGVyIGNvbHVtbiAoZS5nLiB0ZXh0IGZpcnN0KS5cblx0XHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcz8ubm9uU29ydGFibGVQcm9wZXJ0aWVzLnB1c2gobmFtZSk7XG5cdFx0XHRjb25zdCBjb2x1bW4gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHt9LFxuXHRcdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXMsXG5cdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlXG5cdFx0XHQpO1xuXHRcdFx0Y29sdW1uLmlzR3JvdXBhYmxlID0gZmFsc2U7XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fVxuXHR9KTtcblx0Ly8gVGhlIHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eTo6JyBmb3IgdW5pcXVlbmVzcy5cblx0Ly8gVXBkYXRlIHRoZSBzYW1lIGluIG90aGVyIHByb3BlcnR5SW5mb3NbXSByZWZlcmVuY2VzIHdoaWNoIHBvaW50IHRvIHRoaXMgcHJvcGVydHkuXG5cdGV4aXN0aW5nQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAoKHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mbyk7XG5cdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5tYXAoXG5cdFx0XHQocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvXG5cdFx0KTtcblx0fSk7XG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5LCBpdCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgbmFtZVxuICogaGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGZsZXggY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICovXG5jb25zdCBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0Ly8gVGhpcyBpcyBuZWVkZWQgYXMgd2UgaGF2ZSBmbGV4aWJpbGl0eSBjaGFuZ2VzIGFscmVhZHkgdGhhdCB3ZSBoYXZlIHRvIGNoZWNrIGFnYWluc3Rcblx0aWYgKGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBkYXRhRmllbGQuVmFsdWU/LnBhdGgpIHtcblx0XHRyZXR1cm4gZGF0YUZpZWxkLlZhbHVlPy5wYXRoO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8ucGF0aCkge1xuXHRcdC8vIFRoaXMgaXMgZm9yIHJlbW92aW5nIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSwgJ1Byb2dyZXNzJyBQcm9wZXJ0eSBpcyByZW1vdmVkIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIERhdGFQb2ludFxuXHRcdHJldHVybiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdH1cbn07XG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIHRoZSBpZGVudGlmaWVkIGFkZGl0aW9uYWwgcHJvcGVydHkgZm9yIHRoZSBBTFAgdGFibGUgdXNlLWNhc2UuXG4gKlxuICogRm9yIGUuZy4gSWYgVUkuSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5LCBpbmNsdWRlIHRoaXMgdGVjaG5pY2FsIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEBwYXJhbSByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFxuICovXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bmFtZTogc3RyaW5nLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKTogdm9pZCB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBUZWNobmljYWxDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRleHRlbnNpb246IHtcblx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWUsXG5cdFx0XHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb2x1bW5zLnB1c2godGVjaG5pY2FsQ29sdW1uKTtcblx0XHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IHRlY2huaWNhbENvbHVtbi5uYW1lO1xuXHR9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBkYXRhIGZpZWxkIGxhYmVscyBoYXZlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXG4gKlxuICogQHBhcmFtIGZpZWxkR3JvdXBOYW1lIFRoZSBgRGF0YUZpZWxkYCBuYW1lIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGBzaG93RGF0YUZpZWxkc0xhYmVsYCB2YWx1ZSBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uIChcblx0ZmllbGRHcm91cE5hbWU6IHN0cmluZyxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY29sdW1ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpPy5jb2x1bW5zO1xuXHRjb25zdCBjb2x1bW5LZXlzID0gY29sdW1ucyAmJiBPYmplY3Qua2V5cyhjb2x1bW5zKTtcblx0cmV0dXJuIChcblx0XHRjb2x1bW5LZXlzICYmXG5cdFx0ISFjb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4ga2V5ID09PSBmaWVsZEdyb3VwTmFtZSAmJiAoY29sdW1uc1trZXldIGFzIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlKS5zaG93RGF0YUZpZWxkc0xhYmVsO1xuXHRcdH0pXG5cdCk7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QgZW50aXR5LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGBEYXRhRmllbGRgIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGl2ZSBwYXRoXG4gKi9cbmNvbnN0IF9nZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogc3RyaW5nIHtcblx0bGV0IHJlbGF0aXZlUGF0aCA9IFwiXCI7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gZGF0YUZpZWxkPy5UYXJnZXQ/LnZhbHVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuY29uc3QgX3NsaWNlQXRTbGFzaCA9IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGlzTGFzdFNsYXNoOiBib29sZWFuLCBpc0xhc3RQYXJ0OiBib29sZWFuKTogc3RyaW5nIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblx0aWYgKGlTbGFzaEluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBwYXRoO1xuXHR9XG5cdHJldHVybiBpc0xhc3RQYXJ0ID8gcGF0aC5zdWJzdHJpbmcoaVNsYXNoSW5kZXggKyAxLCBwYXRoLmxlbmd0aCkgOiBwYXRoLnN1YnN0cmluZygwLCBpU2xhc2hJbmRleCk7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBjb2x1bW4gY29udGFpbnMgYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBEYXRhRmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIERhdGFGaWVsZCBjb3JyZXNwb25kcyB0byBhIG11bHRpLXZhbHVlIGZpZWxkLlxuICovXG5jb25zdCBfaXNDb2x1bW5NdWx0aVZhbHVlZCA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IGJvb2xlYW4ge1xuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5WYWx1ZSkpIHtcblx0XHRjb25zdCBwcm9wZXJ0eU9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRkYXRhRmllbGQuVmFsdWUucGF0aFxuXHRcdCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBDb2xsZWN0aW9uIG9mIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXMgYXMgcGVyIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IW5vblNvcnRhYmxlQ29sdW1ucy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpICYmIC8vIENvbHVtbiBpcyBub3QgbWFya2VkIGFzIG5vbi1zb3J0YWJsZSB2aWEgYW5ub3RhdGlvblxuXHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbilcblx0KTtcbn07XG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpbHRlckZ1bmN0aW9uczogRmlsdGVyRnVuY3Rpb25zIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZ1bmN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkoZmlsdGVyRnVuY3Rpb25zKSA/ICEoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmNsdWRlcyhcInRvbG93ZXJcIikgOiB0cnVlO1xufTtcbmZ1bmN0aW9uIF9nZXRGaWx0ZXJGdW5jdGlvbnMoQ29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogRmlsdGVyRnVuY3Rpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0aWYgKFR5cGVHdWFyZHMuaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnMgPz9cblx0XHRcdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnNcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFJldHVybnMgZGVmYXVsdCBmb3JtYXQgb3B0aW9ucyBmb3IgdGV4dCBmaWVsZHMgaW4gYSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9uc1xuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBmb3JtYXQgb3B0aW9ucyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlIHwgdW5kZWZpbmVkKTogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gZm9ybWF0T3B0aW9ucyA9PT0gdW5kZWZpbmVkXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHtcblx0XHRcdFx0dGV4dExpbmVzRWRpdDogNCxcblx0XHRcdFx0Li4uZm9ybWF0T3B0aW9uc1xuXHRcdCAgfTtcbn1cbmZ1bmN0aW9uIF9maW5kU2VtYW50aWNLZXlWYWx1ZXMoc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSwgbmFtZTogc3RyaW5nKTogeyB2YWx1ZXM6IHN0cmluZ1tdOyBzZW1hbnRpY0tleUZvdW5kOiBib29sZWFuIH0ge1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGFTZW1hbnRpY0tleVZhbHVlcy5wdXNoKHNlbWFudGljS2V5c1tpXS52YWx1ZSk7XG5cdFx0aWYgKHNlbWFudGljS2V5c1tpXS52YWx1ZSA9PT0gbmFtZSkge1xuXHRcdFx0YlNlbWFudGljS2V5Rm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHZhbHVlczogYVNlbWFudGljS2V5VmFsdWVzLFxuXHRcdHNlbWFudGljS2V5Rm91bmQ6IGJTZW1hbnRpY0tleUZvdW5kXG5cdH07XG59XG5mdW5jdGlvbiBfZmluZFByb3BlcnRpZXMoXG5cdHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSxcblx0ZmllbGRHcm91cFByb3BlcnRpZXM6IHN0cmluZ1tdXG4pOiB7IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IGJvb2xlYW47IGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluY2x1ZGVzKHRtcCkpKSB7XG5cdFx0XHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAgPSB0cnVlO1xuXHRcdFx0XHRzUHJvcGVydHlQYXRoID0gc2VtYW50aWNLZXlWYWx1ZXNbaV07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAsXG5cdFx0ZmllbGRHcm91cFByb3BlcnR5UGF0aDogc1Byb3BlcnR5UGF0aFxuXHR9O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBmaXJzdCBwcm9wZXJ0eSBpbiB0aGUgZmllbGRHcm91cCB0aGF0IGlzIHBhcnQgb2YgdGhlIHNlbWFudGljIGtleXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZEdyb3VwXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlWYWx1ZXNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIGEgZmxhZyB0cnVlIGlmIGEgcHJvcGVydHkgaXMgZm91bmQgYW5kIGEgcHJvcGVydHlQYXRoLlxuICovXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsXG5cdHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXVxuKTogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBwcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSB7XG5cdC8vIHRoaXMgaW5mbyBpcyB1c2VkIGluIEZpZWxkSGVscGVyI2lzRHJhZnRJbmRpY2F0b3JWaXNpYmxlSW5GaWVsZEdyb3VwIHRvIHNob3cgYSBkcmFmdCBpbmRpY2F0b3IgYXQgdGhlIGVuZCBvZiBhIGZpZWxkIGdyb3VwXG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgX3Byb3BlcnRpZXNGb3VuZDogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoPzogc3RyaW5nIH0gPSB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogZmFsc2UsXG5cdFx0ZmllbGRHcm91cFByb3BlcnR5UGF0aDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cCAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0KSB7XG5cdFx0ZGF0YUZpZWxkR3JvdXAuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGlubmVyRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHwgaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmXG5cdFx0XHRcdGlubmVyRGF0YUZpZWxkLlZhbHVlXG5cdFx0XHQpIHtcblx0XHRcdFx0YVByb3BlcnRpZXMucHVzaChpbm5lckRhdGFGaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdH1cblx0XHRcdF9wcm9wZXJ0aWVzRm91bmQgPSBfZmluZFByb3BlcnRpZXMoc2VtYW50aWNLZXlWYWx1ZXMsIGFQcm9wZXJ0aWVzKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IF9wcm9wZXJ0aWVzRm91bmQuc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCxcblx0XHRwcm9wZXJ0eVBhdGg6IF9wcm9wZXJ0aWVzRm91bmQuZmllbGRHcm91cFByb3BlcnR5UGF0aFxuXHR9O1xufVxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgd2l0aCBkcmFmdEluZGljYXRvciBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBmb3JtYXQgb3B0aW9ucyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihcblx0bmFtZTogc3RyaW5nLFxuXHRzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5LFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbik6IFBhcnRpYWw8e1xuXHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZmllbGRHcm91cE5hbWU6IHN0cmluZztcblx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG59PiB7XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXMsIG5hbWUpO1xuXHRjb25zdCBzZW1hbnRpY0tleUluRmllbGRHcm91cCA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXAsIHNlbWFudGljS2V5LnZhbHVlcyk7XG5cdGlmIChzZW1hbnRpY0tleUluRmllbGRHcm91cC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwKSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHQvL1RPRE8gd2Ugc2hvdWxkIHJhdGhlciBzdG9yZSBoYXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogbmFtZSxcblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1czogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSlcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHNlbWFudGljS2V5LnNlbWFudGljS2V5Rm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgZmFsc2UpKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHt9O1xufVxuZnVuY3Rpb24gX2dldEltcE51bWJlcihkYXRhRmllbGQ6IERhdGFGaWVsZFR5cGVzKTogbnVtYmVyIHtcblx0Y29uc3QgaW1wb3J0YW5jZSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlIGFzIHN0cmluZztcblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL0hpZ2hcIikpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXHRpZiAoaW1wb3J0YW5jZSAmJiBpbXBvcnRhbmNlLmluY2x1ZGVzKFwiVUkuSW1wb3J0YW5jZVR5cGUvTWVkaXVtXCIpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL0xvd1wiKSkge1xuXHRcdHJldHVybiAxO1xuXHR9XG5cdHJldHVybiAwO1xufVxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IHNldHRpbmdzIG9mIGEgY29sdW1uIGNvbnRhaW5pbmcgZGF0YXBvaW50cy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHJlZmVyZW5jZWQgb24gYSBnaXZlbiBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB0byBiZSB1cGRhdGVkXG4gKi9cblxuZnVuY3Rpb24gX3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50KHByb3BlcnR5OiBQcm9wZXJ0eSwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgdGFyZ2V0VmFsdWVmcm9tRFAgPSBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KTtcblx0aWYgKFxuXHRcdGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQocHJvcGVydHkpICYmXG5cdFx0dHlwZW9mIHRhcmdldFZhbHVlZnJvbURQID09PSBcInN0cmluZ1wiICYmXG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzICYmXG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzPy51bml0ICE9PSBcIiVcIlxuXHQpIHtcblx0XHRjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSB0YXJnZXRWYWx1ZWZyb21EUDtcblx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgPSBcInswfS9cIiArIHRhcmdldFZhbHVlZnJvbURQO1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRNYXhJbXBvcnRhbmNlKGZpZWxkczogRGF0YUZpZWxkVHlwZXNbXSk6IEltcG9ydGFuY2Uge1xuXHRpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0bGV0IG1heEltcE51bWJlciA9IC0xO1xuXHRcdGxldCBpbXBOdW1iZXIgPSAtMTtcblx0XHRsZXQgRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2U7XG5cdFx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcblx0XHRcdGltcE51bWJlciA9IF9nZXRJbXBOdW1iZXIoZmllbGQpO1xuXHRcdFx0aWYgKGltcE51bWJlciA+IG1heEltcE51bWJlcikge1xuXHRcdFx0XHRtYXhJbXBOdW1iZXIgPSBpbXBOdW1iZXI7XG5cdFx0XHRcdERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlID0gZmllbGQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlcyk7XG5cdH1cblx0cmV0dXJuIEltcG9ydGFuY2UuTm9uZTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW1wb3J0YW5jZSB2YWx1ZSBmb3IgYSBjb2x1bW4uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IHVuZGVmaW5lZFxuKTogSW1wb3J0YW5jZSB8IHVuZGVmaW5lZCB7XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBzZW1hbnRpY0tleXMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNLZXkgPz8gW107XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldFJlcXVpcmVkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlnaEtleXMgPSBbLi4uc2VtYW50aWNLZXlzLCAuLi5yZXF1aXJlZFByb3BlcnRpZXNdLm1hcCgocHJvcGVydHlQYXRoKSA9PiBwcm9wZXJ0eVBhdGguJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0Ly9FdmFsdWF0ZSBkZWZhdWx0IEltcG9ydGFuY2UgaXMgbm90IHNldCBleHBsaWNpdGx5XG5cdGxldCBmaWVsZHNXaXRoSW1wb3J0YW5jZTtcblx0aWYgKGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkVGFyZ2V0ID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RmllbGRHcm91cD4oZGF0YUZpZWxkVGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkpIHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhID0gZGF0YUZpZWxkVGFyZ2V0LkRhdGE7XG5cdFx0XHQvL0lmIGEgRmllbGRHcm91cCBjb250YWlucyBhIHNlbWFudGljS2V5IG9yIHJlcXVpcmVkIHByb3BlcnR5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGZpZWxkR3JvdXBEYXRhLnNvbWUoZnVuY3Rpb24gKGZpZWxkR3JvdXBEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhmaWVsZEdyb3VwRGF0YUZpZWxkKSAmJiBoaWdoS2V5cy5pbmNsdWRlcyhmaWVsZEdyb3VwRGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gSW1wb3J0YW5jZS5IaWdoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9JZiB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgYW4gSW1wb3J0YW5jZSB3ZSB0YWtlIGl0XG5cdFx0XHRcdGlmIChkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZWxzZSB0aGUgaGlnaGVzdCBpbXBvcnRhbmNlIChpZiBhbnkpIGlzIHJldHVybmVkXG5cdFx0XHRcdGZpZWxkc1dpdGhJbXBvcnRhbmNlID0gZmllbGRHcm91cERhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW0/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBfZ2V0TWF4SW1wb3J0YW5jZShmaWVsZHNXaXRoSW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlc1tdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGhpZ2hLZXlzLmluY2x1ZGVzKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlPy4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUpXG5cdFx0PyBJbXBvcnRhbmNlLkhpZ2hcblx0XHQ6IF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcbn1cbi8qKlxuICogUmV0dXJucyBsaW5lIGl0ZW1zIGZyb20gbWV0YWRhdGEgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHdpdGggdGhlaXIgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgdmlzdWFsaXphdGlvbiBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge30sXG5cdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcDogUmVjb3JkPHN0cmluZywgRGlzcGxheU1vZGU+ID0ge30sXG5cdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzID0gZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZSA9IGdldFRhYmxlVHlwZShjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LmNyZWF0aW9uTW9kZT8ubmFtZSA/PyBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXSBhcyBTZW1hbnRpY0tleTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHRhYmxlQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KFxuXHRcdFx0Z2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSlcblx0XHQpO1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChsaW5lSXRlbSkgPT4ge1xuXHRcdFx0Ly8gVE9ETzogdmFyaWFibGUgbmFtZSBzaG91bGQgYmUgZGF0YWZpZWxkIGFuZCBub3QgbGluZUl0ZW1cblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWxhdGl2ZVBhdGggPyBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoID8gZ3JvdXBQYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWApIDogZmFsc2U7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuIHwgdW5kZWZpbmVkID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKGdldERlZmF1bHREcmFmdEluZGljYXRvckZvckNvbHVtbihuYW1lLCBzZW1hbnRpY0tleXMsIGxpbmVJdGVtKSk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdHJlbGF0aXZlUGF0aFxuXHRcdFx0KTtcblx0XHRcdC8vIERldGVybWluZSBpZiB3ZSBuZWVkIGEgc2l0dWF0aW9ucyBpbmRpY2F0b3Jcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3Qgc2l0dWF0aW9uc05hdlByb3BzID0gbmF2aWdhdGlvblByb3BlcnRpZXMuZmlsdGVyKFxuXHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PlxuXHRcdFx0XHRcdCFuYXZpZ2F0aW9uUHJvcGVydHkuaXNDb2xsZWN0aW9uICYmXG5cdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnR5LnRhcmdldFR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TQVBPYmplY3ROb2RlVHlwZT8uTmFtZSA9PT0gXCJCdXNpbmVzc1NpdHVhdGlvblwiXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgc2l0dWF0aW9uc05hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCA9IHNpdHVhdGlvbnNOYXZQcm9wcy5sZW5ndGggPj0gMSA/IHNpdHVhdGlvbnNOYXZQcm9wc1swXSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChzaXR1YXRpb25zTmF2UHJvcCAmJiBmb3JtYXRPcHRpb25zKSB7XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnMuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdC8vZXhjbHVkZSB0aGUgdHlwZXMgbGlzdGVkIGFib3ZlIGZvciB0aGUgRXhwb3J0IChnZW5lcmF0ZXMgZXJyb3Igb24gRXhwb3J0IGFzIFBERilcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MgPSBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyhsaW5lSXRlbSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblx0XHRcdH1cblx0XHRcdGxldCBwcm9wZXJ0eVR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChkYXRhVHlwZSkge1xuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKGxpbmVJdGVtLCBkYXRhVHlwZSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB0eXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdFx0XHRcdGNsYXNzTmFtZTogZGF0YVR5cGUgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0Li4ucHJvcGVydHlUeXBlQ29uZmlnPy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnN0cmFpbnRzOiB7IC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uY29uc3RyYWludHMgfVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHZpc3VhbFNldHRpbmdzOiBWaXN1YWxTZXR0aW5ncyA9IHt9O1xuXHRcdFx0aWYgKCFkYXRhVHlwZSB8fCAhdHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gX2lzQ29sdW1uTXVsdGlWYWx1ZWQobGluZUl0ZW0sIHRhYmxlQ29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRjb25zdCBzb3J0YWJsZSA9ICFpc011bHRpVmFsdWUgJiYgX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLm5vblNvcnRhYmxlUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhdmFpbGFiaWxpdHkgPSBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihsaW5lSXRlbSkgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRjb25zdCBjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbiA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGxpbmVJdGVtKSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRsYWJlbDogc0xhYmVsLFxuXHRcdFx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gZ2V0TGFiZWwobGluZUl0ZW0pIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRncm91cDogaXNHcm91cCA/IGdyb3VwUGF0aCA6IHVuZGVmaW5lZCxcblx0XHRcdFx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgobGluZUl0ZW0uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IGF2YWlsYWJpbGl0eSxcblx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0c2hvd0RhdGFGaWVsZHNMYWJlbDogc2hvd0RhdGFGaWVsZHNMYWJlbCxcblx0XHRcdFx0cmVxdWlyZWQ6IGlzUmVxdWlyZWRDb2x1bW4oY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0gYXMgRGF0YUZpZWxkVHlwZXMsIHRhYmxlQ3JlYXRpb25Nb2RlKSxcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBzb3J0YWJsZSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID8gcmVsYXRlZFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zOiBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gYWRkaXRpb25hbFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBleHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0d2lkdGg6IChsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aD8udmFsdWVPZigpIGFzIHN0cmluZykgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBnZXRJbXBvcnRhbmNlKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtIGFzIERhdGFGaWVsZFR5cGVzKSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHZpc3VhbFNldHRpbmdzLFxuXHRcdFx0XHR0aW1lem9uZVRleHQ6IGV4cG9ydFNldHRpbmdzPy50aW1lem9uZSxcblx0XHRcdFx0aXNQYXJ0T2ZMaW5lSXRlbTogdHJ1ZSxcblx0XHRcdFx0aXNNdWx0aVZhbHVlXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgdG9vbHRpcCA9IF9nZXRUb29sdGlwKGxpbmVJdGVtKSA/PyBzTGFiZWw7XG5cdFx0XHRpZiAodG9vbHRpcCkge1xuXHRcdFx0XHRjb2x1bW4udG9vbHRpcCA9IHRvb2x0aXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlKSB7XG5cdFx0XHRcdGNvbHVtbi5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5ncy5kYXRhUG9pbnRUYXJnZXRWYWx1ZTtcblx0XHRcdH1cblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChyZWxhdGVkUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtyZWxhdGVkUHJvcGVydHlOYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdLmFubm90YXRpb25Qcm9wZXJ0eTtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBhIG11bHRpLXZhbHVlLCByZWxhdGVkIHByb3BlcnRpZXMgY2Fubm90IGJlIHNvcnRlZCBhcyB3ZSBnbyB0aHJvdWdoIGEgMS1uIHJlbGF0aW9uXG5cdFx0XHRcdGlmIChpc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXMubm9uU29ydGFibGVQcm9wZXJ0aWVzLnB1c2gocmVsYXRlZFByb3BlcnR5TmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWRkUHJvcGVydHlUb0Rpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAoXG5cdFx0XHRcdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllc0luZm8sXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBsaW5lSXRlbSBwb2ludHMgdG8gYSBuYXZpZ2F0aW9uIHByb3BlcnR5IHdpdGggYSB0ZXh0QXJyYW5nZW1lbnQgVGV4dE9ubHksIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBjb2x1bW4gd2l0aCB0aGUgdmFsdWUgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIHRleHQgcHJvcGVydHkgaXMgcmVmZXJlbmNlZCBvbiB0aGUgcmVsYXRlZCBwcm9wZXJ0aWVzIG9mIHRoZSBsaW5lSXRlbSwgc28gd2lsbCBiZSBjcmVhdGVkIG9uIHRoZSBfY3JlYXRlUmVsYXRlZENvbHVtbnMgbWV0aG9kLlxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV0uZGlzcGxheU1vZGVPZlByb3BlcnR5VXNlZEFzRGVzY3JpcHRpb24gPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRcdGNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkoXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdFx0bGluZUl0ZW0sXG5cdFx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0XHRcdFx0XHRyZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaCgoYWRkaXRpb25hbFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFthZGRpdGlvbmFsUHJvcGVydHlOYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlOYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8vIEdldCBjb2x1bW5zIGZyb20gdGhlIFByb3BlcnRpZXMgb2YgRW50aXR5VHlwZVxuXHRyZXR1cm4gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlLFxuXHRcdHRhYmxlQ3JlYXRpb25Nb2RlLFxuXHRcdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAsXG5cdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzXG5cdCk7XG59O1xuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdGxldCBtYXRjaGVkUHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0bWF0Y2hlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocHJvcGVydHlQYXRoKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gYW5ub3RhdGlvbkNvbHVtbnMuZmluZChmdW5jdGlvbiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHByb3BlcnR5UGF0aCAmJiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ubmFtZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKFxuXHRcdFx0XHRcdHsgW3Byb3BlcnR5UGF0aF06IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSB9LFxuXHRcdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHR7fVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKHJlbGF0ZWRDb2x1bW5zWzBdKTtcblx0XHRcdFx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zWzBdLm5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBmaWVsZCBncm91cCBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWVsZEdyb3VwIFRoZSBmaWVsZEdyb3VwIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZEdyb3VwIGlzIHJlcXVpcmVkLlxuICovXG5jb25zdCBpc1JlcXVpcmVkRmllbGRHcm91cCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmaWVsZEdyb3VwOiBGaWVsZEdyb3VwLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0Y29uc3QgZmllbGRHcm91cERhdGEgPSBmaWVsZEdyb3VwLkRhdGE7XG5cdHJldHVybiBmaWVsZEdyb3VwRGF0YS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0Ly8gd2UgZXhjbHVkZSBib29sZWFuIHR5cGUsIHRoZSBlbmQtdXNlciBtYXkgd2FudCB0byBrZWVwIHRoZSB1bmRlcmx5aW5nIGNoZWNrIGJveCBlbXB0eSBvbiBwdXJwb3NlXG5cdFx0aWYgKGlzRGF0YUZpZWxkKGl0ZW0pICYmIGl0ZW0/LlZhbHVlPy4kdGFyZ2V0LnR5cGUgIT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0aXNTdGF0aWNhbGx5TWFuZGF0b3J5KGl0ZW0pIHx8XG5cdFx0XHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShpdGVtLlZhbHVlLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIFRoZSBwcm9wZXJ0eSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQuXG4gKi9cbmNvbnN0IGlzUmVxdWlyZWREYXRhRmllbGRGb3JBbm5vdGF0aW9uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRhdGFGaWVsZEZvckFubm90YXRpb246IERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdHRhYmxlQ3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGVcbik6IGJvb2xlYW4ge1xuXHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCBEYXRhRmllbGRGb3JBbm5vdGF0aW9uRmllbGRDb250cm9sTm90TWFuZGF0b3J5ID0gaGFzRmllbGRDb250cm9sTm90TWFuZGF0b3J5KGRhdGFGaWVsZEZvckFubm90YXRpb24pO1xuXHQvLyBDaGVjayBpZiB0aGUgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludHMgdG8gYSBGaWVsZEdyb3VwXG5cdGlmIChoYXNGaWVsZEdyb3VwVGFyZ2V0KGRhdGFGaWVsZEZvckFubm90YXRpb24pKSB7XG5cdFx0aWYgKGlzUmVxdWlyZWRGaWVsZEdyb3VwKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZFRhcmdldCBhcyBGaWVsZEdyb3VwLCB0YWJsZUNyZWF0aW9uTW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IChkYXRhRmllbGRUYXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YTtcblx0XHRyZXR1cm4gZmllbGRHcm91cERhdGEuc29tZSgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdHJldHVybiBpc1JlcXVpcmVkQ29sdW1uKGNvbnZlcnRlckNvbnRleHQsIGlubmVyRGF0YUZpZWxkLCB0YWJsZUNyZWF0aW9uTW9kZSk7XG5cdFx0fSk7XG5cdH1cblx0LypJZiB0aGUgdW5kZXJseWluZyBkYXRhcG9pbnQgaXMgYSByYXRpbmcgaW5kaWNhdG9yLCB0aGUgZW5kLXVzZXIgbWF5IHdhbnQgdG8ga2VlcCB0aGUgcmF0aW5nIGVtcHR5ICh2YWx1ZSAwKSBvbiBwdXJwb3NlLlxuXHRCZXNpZGVzLCBjdXJyZW50bHksIG9ubHkgYSBmaWVsZENvbnRyb2wgc2V0IG9uIGEgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIGRhdGFQb2ludCBoYXMgYW4gaW5mbHVlbmNlIGluIHRoZSB0YWJsZS5cblx0QWNjb3JkaW5nbHksIGlmIGEgZGF0YXBvaW50IGNvbWVzIGZyb20gYSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIHdpdGggYSBmaWVsZENvbnRyb2wgc2V0IGFzIG5vdCBtYW5kYXRvcnksIHRoaXMgZGF0YVBvaW50IG11c3Qgbm90IGJlIGZsYWdnZWQgYXMgXCJyZXF1aXJlZFwiKi9cblx0aWYgKGhhc0RhdGFQb2ludFRhcmdldChkYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJiAoZGF0YUZpZWxkVGFyZ2V0IGFzIERhdGFQb2ludCkuVmlzdWFsaXphdGlvbiAhPT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdGlmIChEYXRhRmllbGRGb3JBbm5vdGF0aW9uRmllbGRDb250cm9sTm90TWFuZGF0b3J5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChpc1N0YXRpY2FsbHlNYW5kYXRvcnkoZGF0YUZpZWxkRm9yQW5ub3RhdGlvbikpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNSZXF1aXJlZERhdGFQb2ludChjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGRUYXJnZXQgYXMgRGF0YVBvaW50LCB0YWJsZUNyZWF0aW9uTW9kZSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm9wZXJ0eSBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHJlcXVpcmVkLlxuICovXG5jb25zdCBpc1JlcXVpcmVkUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRwcm9wZXJ0eS50eXBlICE9PSBcIkVkbS5Cb29sZWFuXCIgJiZcblx0XHQhaXNSYXRpbmdWaXN1YWxpemF0aW9uRnJvbURhdGFGaWVsZERlZmF1bHQocHJvcGVydHkpICYmXG5cdFx0KGlzU3RhdGljYWxseU1hbmRhdG9yeShwcm9wZXJ0eSkgfHxcblx0XHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0XHRpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0KSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGFQb2ludCBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBkYXRhUG9pbnQgVGhlIGRhdGFQb2ludCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YVBvaW50IGlzIHJlcXVpcmVkLlxuICovXG5jb25zdCBpc1JlcXVpcmVkRGF0YVBvaW50ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGRhdGFQb2ludDogRGF0YVBvaW50LFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRpc1N0YXRpY2FsbHlNYW5kYXRvcnkoZGF0YVBvaW50KSB8fFxuXHRcdCh0YWJsZUNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyAmJlxuXHRcdFx0aXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5KGRhdGFQb2ludC5WYWx1ZS4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dCkpXG5cdCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHVuZGVybHlpbmcgY29sdW1uIGhhcyB0byBiZSBmbGFnZ2VkIGFzIHJlcXVpcmVkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3JlcXVpcmVkJyBwcm9wZXJ0eSBvZiB0aGUgdGFibGUgY29sdW1uLlxuICovXG5jb25zdCBpc1JlcXVpcmVkQ29sdW1uID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhcmdldDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5LFxuXHR0YWJsZUNyZWF0aW9uTW9kZT86IENyZWF0aW9uTW9kZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBjcmVhdGlvbk1vZGUgPSB0YWJsZUNyZWF0aW9uTW9kZSB8fCBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRpZiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkodGFyZ2V0KSkge1xuXHRcdHJldHVybiBpc1JlcXVpcmVkUHJvcGVydHkoY29udmVydGVyQ29udGV4dCwgdGFyZ2V0LCBjcmVhdGlvbk1vZGUpID8gY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSkgOiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gQ2hlY2sgaWYgdGhlIGRhdGFGaWVsZCBpcyBvZiB0eXBlIERhdGFGaWVsZEZvckFubm90YXRpb25cblx0aWYgKGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbih0YXJnZXQpKSB7XG5cdFx0cmV0dXJuIGlzUmVxdWlyZWREYXRhRmllbGRGb3JBbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQsIHRhcmdldCwgY3JlYXRpb25Nb2RlKSA/IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpIDogdW5kZWZpbmVkO1xuXHR9XG5cdC8vSWYgdGhlIHVuZGVybHlpbmcgcHJvcGVydHkgaXMgYSBib29sZWFuLCB0aGUgZW5kLXVzZXIgbWF5IHdhbnQgdG8ga2VlcCB0aGUgY2hlY2sgYm94IGVtcHR5IG9uIHB1cnBvc2Vcblx0aWYgKGlzRGF0YUZpZWxkKHRhcmdldCkgJiYgdGFyZ2V0LlZhbHVlPy4kdGFyZ2V0Py50eXBlICE9PSBcIkVkbS5Cb29sZWFuXCIpIHtcblx0XHRyZXR1cm4gaXNTdGF0aWNhbGx5TWFuZGF0b3J5KHRhcmdldCkgfHxcblx0XHRcdChjcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MgJiZcblx0XHRcdFx0aXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5KHRhcmdldC5WYWx1ZS4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dCkpXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcbmNvbnN0IF9hcHBlbmRDdXN0b21UZW1wbGF0ZSA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgZXhwb3J0UHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoZXhwb3J0UHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0cHJvcGVydGllcyA9IGV4cG9ydFByb3BlcnRpZXM7XG5cdH1cblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdFx0Lm1hcCgocHJvcGVydHkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzIS5pbmRleE9mKHByb3BlcnR5KX19YDtcblx0XHRcdH0pXG5cdFx0XHQuam9pbihgJHtcIlxcblwifWApO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9ucyBmcm9tIG1hbmlmZXN0LlxuICpcbiAqIFRoZXNlIG1heSBiZSBjdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgc2xvdCBjb2x1bW5zIGNvbWluZyB0aHJvdWdoXG4gKiBhIGJ1aWxkaW5nIGJsb2NrLCBvciBhbm5vdGF0aW9uIGNvbHVtbnMgdG8gb3ZlcndyaXRlIGFubm90YXRpb24tYmFzZWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1xuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBjb2x1bW5zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tTWFuaWZlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiB8IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlPixcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0Q29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+ID0ge307XG5cdGZ1bmN0aW9uIGlzQW5ub3RhdGlvbkNvbHVtbihcblx0XHRjb2x1bW46IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiB8IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRcdGtleTogc3RyaW5nXG5cdCk6IGNvbHVtbiBpcyBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW5zLnNvbWUoKGFubm90YXRpb25Db2x1bW4pID0+IGFubm90YXRpb25Db2x1bW4ua2V5ID09PSBrZXkpO1xuXHR9XG5cdGZ1bmN0aW9uIGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uKTogbWFuaWZlc3RDb2x1bW4gaXMgRnJhZ21lbnREZWZpbmVkU2xvdENvbHVtbiB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IENvbHVtblR5cGUuU2xvdDtcblx0fVxuXHRmdW5jdGlvbiBpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uKTogbWFuaWZlc3RDb2x1bW4gaXMgTWFuaWZlc3REZWZpbmVkQ3VzdG9tQ29sdW1uIHtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkICYmICEhbWFuaWZlc3RDb2x1bW4udGVtcGxhdGU7XG5cdH1cblx0ZnVuY3Rpb24gX3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMocHJvcGVydHlJbmZvczogc3RyaW5nW10sIGFubm90YXRpb25UYWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzID0gZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGFubm90YXRpb25UYWJsZUNvbHVtbnMuZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAocHJvcC5uYW1lID09PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHByb3Auc29ydGFibGUgPSAhcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLm5vblNvcnRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wZXJ0eS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSk7XG5cdFx0XHRcdFx0cHJvcC5pc0dyb3VwYWJsZSA9IHByb3Auc29ydGFibGU7XG5cdFx0XHRcdFx0cHJvcC5maWx0ZXJhYmxlID0gIXJlc3RyaWN0aW9uc09uUHJvcGVydGllcy5ub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wZXJ0eS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHRLZXlIZWxwZXIudmFsaWRhdGVLZXkoa2V5KTtcblx0XHQvLyBCYXNlVGFibGVDb2x1bW5cblx0XHRjb25zdCBiYXNlVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyOiBtYW5pZmVzdENvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdHdpZHRoOiBtYW5pZmVzdENvbHVtbi53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdFx0aWYgKGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjogQ3VzdG9tRWxlbWVudDxBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4gPSB7XG5cdFx0XHRcdC4uLmJhc2VUYWJsZUNvbHVtbixcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSlcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUobWFuaWZlc3RDb2x1bW4uZm9ybWF0T3B0aW9ucyksXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBnZXRDdXN0b21FeHBvcnRTZXR0aW5ncyhcblx0XHRcdFx0XHRtYW5pZmVzdENvbHVtbj8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRrZXlcblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdFx0bWFuaWZlc3RDb2x1bW4ucHJvcGVydGllcyxcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB0b29sdGlwVGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdENvbHVtbi50b29sdGlwKSxcblx0XHRcdFx0aGVhZGVyVGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChtYW5pZmVzdENvbHVtbi5oZWFkZXIpO1xuXG5cdFx0XHRjb25zdCBjdXN0b21Db2x1bW5FeHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gcHJvcGVydHlJbmZvc1xuXHRcdFx0XHQ/IGdldEN1c3RvbUV4cG9ydFNldHRpbmdzKG1hbmlmZXN0Q29sdW1uPy5leHBvcnRTZXR0aW5ncywgYW5ub3RhdGlvbkNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUsIHByb3BlcnR5SW5mb3MpXG5cdFx0XHRcdDogbnVsbDtcblx0XHRcdGNvbnN0IGJhc2VNYW5pZmVzdENvbHVtbiA9IHtcblx0XHRcdFx0Li4uYmFzZVRhYmxlQ29sdW1uLFxuXHRcdFx0XHRoZWFkZXI6IGhlYWRlclRleHQsXG5cdFx0XHRcdGltcG9ydGFuY2U6IG1hbmlmZXN0Q29sdW1uPy5pbXBvcnRhbmNlIHx8IEltcG9ydGFuY2UuTm9uZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduIHx8IEhvcml6b250YWxBbGlnbi5CZWdpbixcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RDb2x1bW4udGVtcGxhdGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBjdXN0b21Db2x1bW5FeHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0aWQ6IGBDdXN0b21Db2x1bW46OiR7a2V5fWAsXG5cdFx0XHRcdG5hbWU6IGBDdXN0b21Db2x1bW46OiR7a2V5fWAsXG5cdFx0XHRcdC8vTmVlZGVkIGZvciBNREM6XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHsgdGV4dExpbmVzRWRpdDogNCB9LFxuXHRcdFx0XHRpc0dyb3VwYWJsZTogZmFsc2UsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBmYWxzZSxcblx0XHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH0sXG5cdFx0XHRcdHRvb2x0aXA6IHRvb2x0aXBUZXh0ID8gdG9vbHRpcFRleHQgOiBoZWFkZXJUZXh0LFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiBtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRyZXF1aXJlZDpcblx0XHRcdFx0XHRtYW5pZmVzdENvbHVtbi5yZXF1aXJlZCAmJlxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zLCBhbm5vdGF0aW9uQ29sdW1ucyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5TbG90XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gYFRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnJHtrZXl9JyByZWZlcmVuY2VkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmRgO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5Mb3csXG5cdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbkNvbHVtbnM/LkludmFsaWRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBBZGRzIGNvbXB1dGVkIGNvbHVtbnMgc3VjaCBhcyB0aGUgZHJhZnQgc3RhdHVzIGFuZCBzaXR1YXRpb25zIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSB0YWJsZSBjb2x1bW5zIGNvbGxlY3RlZCBzbyBmYXJcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBlbnJpY2hlZCBzZXQgb2YgdGFibGUgY29sdW1uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29tcHV0ZWRDb2x1bW5zKFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVR5cGUgPSBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzKTtcblxuXHRpZiAodGFibGVUeXBlICE9PSBcIkdyaWRUYWJsZVwiICYmIHRhYmxlVHlwZSAhPT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIFRvZGF5IHdlIG9ubHkgZG8gc29tZXRoaW5nIGhlcmUgaW4gY2FzZSBvZiBncmlkIG9yIHRyZWUgdGFibGVcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zO1xuXHR9XG5cblx0Ly8gSW4gY2FzZSBhIGdyaWQgdGFibGUgb3IgdHJlZSB0YWJsZSBpcyB1c2VkLCB3ZSBkaXNwbGF5IHRoZSBzaXR1YXRpb25zIGluZGljYXRvciBpbiBhIHNlcGFyYXRlIGNvbHVtblxuXHQvLyBzbyB3ZSBoYXZlIHRvIGRpc2FibGUgaXQgaGVyZSB0byBlbnN1cmUsIHRoYXQgdGhlIGZpZWxkIGJ1aWxkaW5nIGJsb2NrXG5cdC8vIGRvZXMgbm90IHJlbmRlciBpdCBpbnRvIHRoZSBJRCBjb2x1bW5cblx0Y29uc3QgY29sdW1uV2l0aFNpdHVhdGlvbnNJbmRpY2F0b3I6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkID0gdGFibGVDb2x1bW5zLmZpbmQoXG5cdFx0KGNvbHVtbikgPT4gY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IgIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzU2l0dWF0aW9uc0luZGljYXRvciA9PT0gdHJ1ZVxuXHQpO1xuXHRpZiAoY29sdW1uV2l0aFNpdHVhdGlvbnNJbmRpY2F0b3I/LmZvcm1hdE9wdGlvbnMpIHtcblx0XHQvLyBTd2l0Y2ggb2ZmIHRoZSBzaXR1YXRpb25zIGluZGljYXRvciBpbiB0aGUgZm91bmQgY29sdW1uXG5cdFx0Y29sdW1uV2l0aFNpdHVhdGlvbnNJbmRpY2F0b3IuZm9ybWF0T3B0aW9ucy5oYXNTaXR1YXRpb25zSW5kaWNhdG9yID0gZmFsc2U7XG5cblx0XHQvLyBJbnNlcnQgYSBzZXBhcmF0ZSBzaXR1YXRpb25zIGluZGljYXRvciBjb2x1bW5cblx0XHRjb25zdCBzaXR1YXRpb25zSW5kaWNhdG9yQ29sdW1uOiBDb21wdXRlZFRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIixcblx0XHRcdG5hbWU6IFwic2l0dWF0aW9uc0luZGljYXRvclwiLFxuXHRcdFx0cHJvcGVydHlLZXk6IGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yLm5hbWUsXG5cdFx0XHRpc1NpdHVhdGlvbnNJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IFwiRGVmYXVsdFwiLFxuXHRcdFx0bGFiZWw6IFwie3NhcC5mZS5pMThuPkNfU0lUVUFUSU9OU19TVEFUVVNfQ09MVU1OX0xBQkVMX1RPT0xUSVB9XCIsXG5cdFx0XHR0b29sdGlwOiBcIntzYXAuZmUuaTE4bj5DX1NJVFVBVElPTlNfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Db21wdXRlZCxcblx0XHRcdGZvcm1hdE9wdGlvbnM6IG51bGwsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogbnVsbCxcblx0XHRcdGNsaXBib2FyZFNldHRpbmdzOiBudWxsLFxuXHRcdFx0cHJvcGVydHlJbmZvczogbnVsbCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGZhbHNlXG5cdFx0fTtcblxuXHRcdC8vIFBsYWNlIHRoZSBkcmFmdCBzdGF0dXMgY29sdW1uIGFmdGVyIHRoZSBmaXJzdCB2aXNpYmxlIGNvbHVtblxuXHRcdGNvbnN0IGluZGV4T2ZGaXJzdFZpc2libGVDb2x1bW46IGludCA9IHRhYmxlQ29sdW1ucy5maW5kSW5kZXgoKGNvbHVtbikgPT4gY29sdW1uLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIik7XG5cdFx0dGFibGVDb2x1bW5zLnNwbGljZShpbmRleE9mRmlyc3RWaXNpYmxlQ29sdW1uICsgMSwgMCwgc2l0dWF0aW9uc0luZGljYXRvckNvbHVtbik7XG5cdH1cblxuXHQvLyBJbiBjYXNlIGEgZ3JpZCB0YWJsZSBvciB0cmVlIHRhYmxlIGlzIHVzZWQsIHdlIGRpc3BsYXkgdGhlIGRyYWZ0IGluZGljYXRvciBpbiBhIHNlcGFyYXRlIGNvbHVtblxuXHQvLyBzbyB3ZSBoYXZlIHRvIGRpc2FibGUgaXQgaGVyZSB0byBlbnN1cmUsIHRoYXQgdGhlIGZpZWxkIGJ1aWxkaW5nIGJsb2NrXG5cdC8vIGRvZXMgbm90IHJlbmRlciBpdCBpbnRvIHRoZSBJRCBjb2x1bW5cblx0Ly8gVGhlIGFkZGl0aW9uYWwgY29sdW1uIGlzIG9ubHkgYWRkZWQgZm9yIHRhYmxlcyBvbiBhIExSIGFuZCBpbiBjYXNlIHRlaGUgZW50aXR5IGlzIGRyYWZ0IGVuYWJsZWQhXG5cdGNvbnN0IGNvbHVtbldpdGhEcmFmdEluZGljYXRvcjogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQgPSB0YWJsZUNvbHVtbnMuZmluZChcblx0XHQoY29sdW1uKSA9PiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IgIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IgPT09IHRydWVcblx0KTtcblx0aWYgKFxuXHRcdGNvbHVtbldpdGhEcmFmdEluZGljYXRvcj8uZm9ybWF0T3B0aW9ucyAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0KE1vZGVsSGVscGVyLmlzRHJhZnROb2RlKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpIHx8IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKVxuXHQpIHtcblx0XHQvLyBTd2l0Y2ggb2ZmIHRoZSBkcmFmdCBpbmRpY2F0b3IgaW4gdGhlIGZvdW5kIGNvbHVtblxuXHRcdGNvbHVtbldpdGhEcmFmdEluZGljYXRvci5mb3JtYXRPcHRpb25zLmhhc0RyYWZ0SW5kaWNhdG9yID0gZmFsc2U7XG5cblx0XHQvLyBJbnNlcnQgYSBzZXBhcmF0ZSBkcmFmdCBpbmRpY2F0b3IgY29sdW1uXG5cdFx0Y29uc3QgZHJhZnRJbmRpY2F0b3JDb2x1bW46IENvbXB1dGVkVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IFwiZHJhZnRTdGF0dXNcIixcblx0XHRcdG5hbWU6IFwiZHJhZnRTdGF0dXNcIixcblx0XHRcdHByb3BlcnR5S2V5OiBjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3IubmFtZSxcblx0XHRcdGlzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IFwiRGVmYXVsdFwiLFxuXHRcdFx0bGFiZWw6IFwie3NhcC5mZS5pMThuPkNfRFJBRlRfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dG9vbHRpcDogXCJ7c2FwLmZlLmkxOG4+Q19EUkFGVF9TVEFUVVNfQ09MVU1OX0xBQkVMX1RPT0xUSVB9XCIsXG5cdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkNvbXB1dGVkLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogbnVsbCxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBudWxsLFxuXHRcdFx0cHJvcGVydHlJbmZvczogbnVsbCxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGZhbHNlXG5cdFx0fTtcblx0XHRsZXQgY29sdW1uSW5kZXhUb0luc2VydEFmdGVyOiBpbnQgPSAwO1xuXHRcdGlmIChjb2x1bW5XaXRoU2l0dWF0aW9uc0luZGljYXRvcikge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBhIHNpdHVhdGlvbnMgaW5kaWNhdG9yIGNvbHVtbiwgcGxhY2UgdGhlIGRyYWZ0IHN0YXR1cyBjb2x1bW4gYmVmb3JlIGl0XG5cdFx0XHRjb2x1bW5JbmRleFRvSW5zZXJ0QWZ0ZXIgPVxuXHRcdFx0XHR0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IChjb2x1bW4gYXMgQ29tcHV0ZWRUYWJsZUNvbHVtbikuaXNTaXR1YXRpb25zSW5kaWNhdG9yID09PSB0cnVlKSAtIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE90aGVyd2lzZSBwbGFjZSB0aGUgZHJhZnQgc3RhdHVzIGNvbHVtbiBhZnRlciB0aGUgZmlyc3QgdmlzaWJsZSBjb2x1bW5cblx0XHRcdGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlciA9IHRhYmxlQ29sdW1ucy5maW5kSW5kZXgoKGNvbHVtbikgPT4gY29sdW1uLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIik7XG5cdFx0fVxuXHRcdHRhYmxlQ29sdW1ucy5zcGxpY2UoY29sdW1uSW5kZXhUb0luc2VydEFmdGVyICsgMSwgMCwgZHJhZnRJbmRpY2F0b3JDb2x1bW4pO1xuXHR9XG5cblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0Y29uc3QgaXNSZXNwb25zaXZlVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbiA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHN3aXRjaCAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiQW5hbHl0aWNhbFRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwLEFnZ3JlZ2F0ZVwiO1xuXHRcdFx0XHRjYXNlIFwiUmVzcG9uc2l2ZVRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwXCI7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiAoaXNBbmFseXRpY2FsVGFibGUgfHwgaXNSZXNwb25zaXZlVGFibGUpKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24ubGVuZ3RoID4gMCA/IGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cdFx0aWYgKGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHR9XG5cdFx0aWYgKGlzUmVzcG9uc2l2ZVRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgc2V0dGluZ3MgZ2V0dGVyIGZvciB0aGUgcGFnZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQm9vbGVhbiBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICovXG5mdW5jdGlvbiBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmXG5cdFx0IWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpICYmXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHQvLyBDdXJyZW50bHkgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBub3Qgc3VwcG9ydGVkIGFzIHNvcnRlclxuXHRjb25zdCBub25Tb3J0YWJsZVByb3BlcnRpZXMgPSBnZXRSZXN0cmljdGlvbnNPblByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkubm9uU29ydGFibGVQcm9wZXJ0aWVzO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHk/LiR0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiAhbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluY2x1ZGVzKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQubmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgaW5mb05hbWUgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKFtjb25kaXRpb25Qcm9wZXJ0eV0sIGNvbHVtbnMpWzBdO1xuXHRcdFx0XHRpZiAoaW5mb05hbWUpIHtcblx0XHRcdFx0XHRjb25kaXRpb25zLnNvcnRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpbmZvTmFtZSxcblx0XHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRDb25kaXRpb25zID0gY29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucztcbn1cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsZXZlbCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkluaXRpYWxFeHBhbnNpb25MZXZlbD8udmFsdWVPZigpO1xuXHRyZXR1cm4gdHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiID8gbGV2ZWwgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIFRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGluZm9OYW1lcztcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHRhYmxlVHlwZTogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGxldCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnk7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0YUdyb3VwQnkgPSBhR3JvdXBCeS5zbGljZSgwLCAxKTtcblx0XHR9XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogaW5mb05hbWUgfTtcblx0XHR9KTtcblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYSBhbmFseXRpY2FsIHRhYmxlIGludGVncmF0aW5nIGFsbCBleHRlbnNpb25zIGFuZCBiaW5kaW5nLXJlbGV2YW50IHByb3BlcnR5IGluZm8gcGFydC5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uKTogdm9pZCB7XG5cdGNvbnN0IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lID0gT2JqZWN0LmtleXModGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMhKS5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZSA9PT0gY29sdW1uLm5hbWUpO1xuXHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiA9IHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzIVthZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0Y29sdW1uLmFnZ3JlZ2F0YWJsZSA9IHRydWU7XG5cdFx0XHRjb2x1bW4uZXh0ZW5zaW9uID0ge1xuXHRcdFx0XHRjdXN0b21BZ2dyZWdhdGU6IGFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbi5kZWZhdWx0QWdncmVnYXRlID8/IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5mb3JFYWNoKChhZGRpdGlvbmFsUHJvcGVydHlJbmZvKSA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggYWRkaXRpb25hbCBwcm9wZXJ0eS5cblx0XHRcdFx0Ly8gVGhlIG5ldyBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHlfVGVjaG5pY2FsOjonIGZvciB1bmlxdWVuZXNzIGFuZCBpdCBoYXMgYmVlbiBuYW1lZCB0ZWNobmljYWwgcHJvcGVydHkgYXMgaXQgcmVxdWlyZXMgZGVkaWNhdGVkIE1EQyBhdHRyaWJ1dGVzICh0ZWNobmljYWxseUdyb3VwYWJsZSBhbmQgdGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUpLlxuXHRcdFx0XHRjcmVhdGVUZWNobmljYWxQcm9wZXJ0eShhZGRpdGlvbmFsUHJvcGVydHlJbmZvLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXApO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MubWFwKFxuXHRcdFx0XHQocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdFx0KTtcblx0XHRcdC8vIEFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gdGhlIGNvbXBsZXggcHJvcGVydHkgdXNpbmcgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLlxuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8uY29uY2F0KGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyk7XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgc2V0IG9uIHRoZSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCAgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHBhdGhzIG9mIHRoZSByZXN0cmljdGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFByb3BlcnR5UGF0aFtdIHtcblx0cmV0dXJuIGdldENvbnRleHRQcm9wZXJ0eVJlc3RyaWN0aW9uKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdChjYXBhYmlsaXRpZXMpID0+IHtcblx0XHRcdHJldHVybiAoY2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcyB8IHVuZGVmaW5lZCk/Lkluc2VydFJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRcdH0sXG5cdFx0ZmFsc2Vcblx0KTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvcGVydHkgaXMgYW5ub3RhdGVkIGFzIGEgcmVxdWlyZWQgcHJvcGVydHkuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHJlcXVpcmVkXG4gKi9cbmZ1bmN0aW9uIGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0Lm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHQuaW5jbHVkZXMobmFtZSk7XG59XG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEBwYXJhbSBhZ2dyZWdhdGVzRGVmaW5pdGlvbnNcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0YWdncmVnYXRlc0RlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPlxuKTogc3RyaW5nIHtcblx0Y29uc3QgYWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsO1xuXHRcdGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYVRvdGFscywgY29sdW1ucykuZm9yRWFjaCgoaW5mb05hbWUpID0+IHtcblx0XHRcdGFnZ3JlZ2F0ZXNbaW5mb05hbWVdID0ge307XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHRhZ2dyZWdhdGVzW2tleV0gPSB7fTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFnZ3JlZ2F0ZXMpO1xufVxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiA9IHtcblx0Y3JlYXRpb25CZWhhdmlvdXI6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb25bXCJjcmVhdGVcIl07XG5cdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkOiBib29sZWFuO1xuXHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRba2V5IGluIFwiY3JlYXRlXCIgfCBcImRlbGV0ZVwiIHwgXCJwYXN0ZVwiIHwgXCJtYXNzRWRpdFwiIHwgXCJpbnNpZ2h0c1wiIHwgXCJjcmVhdGlvblJvd1wiIHwgXCJjdXRcIl06IFN0YW5kYXJkQWN0aW9uO1xuXHR9O1xufTtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc3RhbmRhcmQgYWN0aW9ucyBhbmQgYWRqYWNlbnQgcHJvcGVydGllcyB0aGF0IGFyZSBuZWVkZWQgaW4gdGhlIGZ1cnRoZXIgY29udmVyc2lvbiBwcm9jZXNzLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB1c2VkIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgdmlzdWFsaXphdGlvbiBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gVGhlIHRhYmxlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3MgVGhlIG5hdmlnYXRpb24gdGFyZ2V0IG1hbmlmZXN0IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFN0YW5kYXJkIGFjdGlvbnMgYW5kIGNvbm5lY3RlZCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBjcmVhdGlvbkJlaGF2aW91ciA9IF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dmlzdWFsaXphdGlvblBhdGhcblx0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCA9IGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNyZWF0aW9uQmVoYXZpb3VyLm1vZGUgYXMgQ3JlYXRpb25Nb2RlLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG5cdCk7XG5cdGNvbnN0IGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXREZWxldGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQgPSBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRcdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KVxuXHQpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnMgPSB7XG5cdFx0Y3V0OiBnZXRTdGFuZGFyZEFjdGlvbkN1dChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGRlbGV0ZTogZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0cGFzdGU6IGdldFN0YW5kYXJkQWN0aW9uUGFzdGUoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRpbnNpZ2h0czogZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cdHJldHVybiB7XG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zXG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIHtcblx0Ly8gTmVlZCB0byBnZXQgdGhlIHRhcmdldFxuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKSxcblx0XHRpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5kZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5jdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCk7XG5cdH0gZWxzZSBpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIFRvIG1ha2Ugc2Nyb2xsaW5nIHNtb290aCwgd2Ugc2V0IHRoZSB0aHJlc2hvbGQgdmFsdWUgaGlnaGVyIGZvciB0cmVlIHRhYmxlc1xuXHRcdHRocmVzaG9sZCA9IDIwMDtcblx0fVxuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgaXNTZWFyY2hhYmxlID0gaXNQYXRoU2VhcmNoYWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aWQ6IGlkLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eVNldCA/IGVudGl0eVNldC5uYW1lIDogXCJcIixcblx0XHRlbnRpdHlUeXBlTmFtZTogZW50aXR5U2V0ICYmIGVudGl0eVNldC5lbnRpdHlUeXBlID8gZW50aXR5U2V0LmVudGl0eVR5cGUubmFtZSA6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0cm93OiBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5KFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdG5hdmlnYXRpb25UYXJnZXRQYXRoLFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZVxuXHRcdCksXG5cdFx0cDEzbk1vZGU6IHAxM25Nb2RlLFxuXHRcdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogc3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQsXG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRkaXNwbGF5TW9kZTogaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQsIHRydWUpLFxuXHRcdGNyZWF0ZTogc3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5jcmVhdGlvbkJlaGF2aW91cixcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHR0aHJlc2hvbGQ6IHRocmVzaG9sZCxcblx0XHRzb3J0Q29uZGl0aW9uczogZ2V0U29ydENvbmRpdGlvbnMoY29udmVydGVyQ29udGV4dCwgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIGNvbHVtbnMpLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRzZWFyY2hhYmxlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlICE9PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICEoaXNDb25zdGFudChpc1NlYXJjaGFibGUpICYmIGlzU2VhcmNoYWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbDogZ2V0SW5pdGlhbEV4cGFuc2lvbkxldmVsKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSxcblx0XHRyZXF1aXJlZFByb3BlcnRpZXM6IGdldFJlcXVpcmVkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0LmZpbHRlcigocHJvcGVydHkpID0+IHByb3BlcnR5Py4kdGFyZ2V0Py50eXBlICE9PSBcIkVkbS5Cb29sZWFuXCIpXG5cdFx0XHQubWFwKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkudmFsdWUpXG5cdH07XG59XG4vKipcbiAqIEdldHMgdGhlIGRhdGEgdHlwZSBvZiBhIGNvbHVtbiBmb3IgdGhlIGV4cG9ydC5cbiAqXG4gKiBAcGFyYW0gZGF0YVR5cGUgVGhlIGRhdGEgdHlwZSBvZiBhIHByb3BlcnR5LCBjb2x1bW5cbiAqIEBwYXJhbSBpc0FUaW1lem9uZSBJcyB0aGUgZ2l2ZW4gcHJvcGVydHkgYSB0aW1lem9uZVxuICogQHBhcmFtIGlzQ3VycmVuY3kgSXMgdGhlIGdpdmVuIHByb3BlcnR5IGEgY3VycmVuY3lcbiAqIEBwYXJhbSBleHBvcnRTZXR0aW5ncyBUaGUgYWxyZWFkeSBkZXRlY3RlZCBleHBvcnQgc2V0dGluZ3MgZnJvbSBkYXRhZmllbGRzXG4gKiBAcmV0dXJucyBUaGUgc3VwcG9ydGVkIGV4cG9ydCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdldEV4cG9ydERhdGFUeXBlKFxuXHRkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRpc0FUaW1lem9uZSA9IGZhbHNlLFxuXHRpc0N1cnJlbmN5ID0gZmFsc2UsXG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3Ncbik6IHN0cmluZyB7XG5cdGxldCBleHBvcnREYXRhVHlwZSA9IFwiU3RyaW5nXCI7XG5cdGlmICghZGF0YVR5cGUgfHwgZXhwb3J0U2V0dGluZ3M/LmRhdGFQb2ludFRhcmdldFZhbHVlKSB7XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9XG5cdGlmIChleHBvcnRTZXR0aW5ncz8uaXNDdXJyZW5jeSB8fCBpc0N1cnJlbmN5KSB7XG5cdFx0cmV0dXJuIFwiQ3VycmVuY3lcIjtcblx0fVxuXHRpZiAoaXNBVGltZXpvbmUpIHtcblx0XHRyZXR1cm4gXCJUaW1lem9uZVwiO1xuXHR9XG5cdGlmIChleHBvcnRTZXR0aW5ncz8ud3JhcCkge1xuXHRcdHJldHVybiBleHBvcnREYXRhVHlwZTtcblx0fVxuXHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0Y2FzZSBcIkVkbS5EZWNpbWFsXCI6XG5cdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdGNhc2UgXCJFZG0uSW50NjRcIjpcblx0XHRjYXNlIFwiRWRtLkRvdWJsZVwiOlxuXHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIk51bWJlclwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlT2ZUaW1lXCI6XG5cdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVUaW1lXCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlRpbWVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkJvb2xlYW5cIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiU3RyaW5nXCI7XG5cdH1cblx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xufVxuLyoqXG4gKiBTcGxpdHMgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBzcGxpdCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyk6IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nOyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0ge1xuXHRjb25zdCBbdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRsZXQgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cmluZygwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24oXG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnQgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnQ7XG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZT8udmFsdWUgPz8gXCJcIjtcblx0XHRcdGlmICghcHJvcGVydHlOYW1lcy5pbmNsdWRlcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0OiBzZWxlY3Rpb24/LlRleHQ/LnRvU3RyaW5nKCksXG5cdFx0XHRwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGlzSXBob25lOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gPz8gaXNJcGhvbmU7XG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRpZiAoIWlzSXBob25lICYmIGVuYWJsZUZ1bGxTY3JlZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHR9XG5cdHJldHVybiBlbmFibGVGdWxsU2NyZWVuO1xufVxuZnVuY3Rpb24gX2dldE11bHRpU2VsZWN0TW9kZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRzd2l0Y2ggKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpIHtcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0OlxuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gZmFsc2UgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXHRyZXR1cm4gbXVsdGlTZWxlY3RNb2RlO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlTW9kZShcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGlzVGVtcGxhdGVMaXN0UmVwb3J0OiBib29sZWFuXG4pOiB7IHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlOyByb3dDb3VudD86IG51bWJlciB9IHtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdGlmIChpc1RlbXBsYXRlTGlzdFJlcG9ydCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiBcIkF1dG9cIixcblx0XHRcdFx0cm93Q291bnQ6IDNcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogdGFibGVTZXR0aW5ncy5yb3dDb3VudE1vZGUgPz8gXCJGaXhlZFwiLFxuXHRcdFx0XHRyb3dDb3VudDogdGFibGVTZXR0aW5ncy5yb3dDb3VudCA/IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgOiA1XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cbmZ1bmN0aW9uIF9nZXRDb25kZW5zZWRUYWJsZUxheW91dChfdGFibGVUeXBlOiBUYWJsZVR5cGUsIF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkICYmIF90YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0XHQ/IF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0XG5cdFx0OiBmYWxzZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gdHJ1ZSB8fCBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCAyMDA7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA/IF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA6IDE7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbmFibGVFeHBvcnQoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xufVxuZnVuY3Rpb24gX2dldEZyb3plbkNvbHVtbkNvdW50KHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5mcm96ZW5Db2x1bW5Db3VudDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIHZhbHVlIGZyb20gdGhlIHRhYmxlU2V0dGluZ3MgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB0YWJsZVNldHRpbmdzIFRhYmxlU2V0dGluZ3MgT2JqZWN0XG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBvciBmYWxzZVxuICovXG5mdW5jdGlvbiBfZ2V0V2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIodGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA/PyBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWRcbik6IHtcblx0ZmlsdGVyczogUGFydGlhbDxSZWNvcmQ8XCJxdWlja0ZpbHRlcnNcIiB8IFwiaGlkZGVuRmlsdGVyc1wiLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPj47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG59IHtcblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGNvbnN0IGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+ID0ge307XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbik7XG5cdGlmICh0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbikge1xuXHRcdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHMgPSAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24ucGF0aHMgPz8gW10pLnJlZHVjZShcblx0XHRcdChmaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSwgcGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAodGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXRoLmFubm90YXRpb25QYXRoKSkge1xuXHRcdFx0XHRcdGZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyUGF0aHM7XG5cdFx0XHR9LFxuXHRcdFx0W11cblx0XHQpO1xuXHRcdGlmIChxdWlja0ZpbHRlclBhdGhzLmxlbmd0aCkge1xuXHRcdFx0ZmlsdGVycy5xdWlja0ZpbHRlcnMgPSB7XG5cdFx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnNob3dDb3VudHMsXG5cdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHQvKipcblx0XHQgKiBQcm92aWRlIFNlbGVjdGlvbiBWYXJpYW50IHRvIGhpZGRlbkZpbHRlcnMgaW4gb3JkZXIgdG8gc2V0IHRoZSBTViBmaWx0ZXJzIHRvIHRoZSB0YWJsZS5cblx0XHQgKiBNREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0ICogYWRkaXRpb25hbCBmaWx0ZXIgaXMgJ3JlYmluZFRhYmxlJyBpbnRvIFRhYmxlIGRlbGVnYXRlLlxuXHRcdCAqIFRvIGF2b2lkIGltcGxlbWVudGluZyBzcGVjaWZpYyBMUiBmZWF0dXJlIHRvIFNBUCBGRSBNYWNybyBUYWJsZSwgdGhlIGZpbHRlcihzKSAgbm90IG1hbmFnZWQgYnkgdGhlIEZpbHRlckJhclxuXHRcdCAqIGNhbiBiZSBwYXNzZWQgdG8gbWFjcm8gdGFibGUgdmlhIHBhcmFtZXRlci9jb250ZXh0IG5hbWVkIGZpbHRlcnMgYW5kIGtleSBoaWRkZW5GaWx0ZXJzLlxuXHRcdCAqL1xuXHRcdGZpbHRlcnMuaGlkZGVuRmlsdGVycyA9IHsgcGF0aHM6IFt7IGFubm90YXRpb25QYXRoOiBgQCR7c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVsxXX1gIH1dIH07XG5cdH1cblxuXHRoaWRlVGFibGVUaXRsZSA9ICEhdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LmhpZGVUYWJsZVRpdGxlO1xuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0aGVhZGVyVmlzaWJsZTogIShmaWx0ZXJzPy5xdWlja0ZpbHRlcnMgJiYgaGlkZVRhYmxlVGl0bGUpXG5cdH07XG59XG4vKipcbiAqIEFkZHMgdGhlIHRvb2x0aXAgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBjb2x1bW4uXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIG9uIHRoZSBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF9hZGRUb29sVGlwKHByb3BlcnR5OiBQcm9wZXJ0eSwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgdG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KSA/PyBjb2x1bW4ubGFiZWw7XG5cdGlmICh0b29sdGlwKSB7XG5cdFx0Y29sdW1uLnRvb2x0aXAgPSB0b29sdGlwO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzLnB1c2goZ2V0TGFiZWwobmF2UHJvcGVydHkpIHx8IG5hdlByb3BlcnR5Lm5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM7XG5cdH1cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgYWN0aW9uIHdpbGwgaGF2ZSBhbiBleHByZXNzaW9uIGZvciBlbmFibGVtZW50IGdlbmVyYXRlZC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhRmllbGQgY29udGFpbmluZyBhbiBhY3Rpb25cbiAqIEBwYXJhbSBzRW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgZm9yIHRlbXBsYXRpbmdcbiAqIEByZXR1cm5zIFdoZXRoZXIgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBpcyB0byBiZSBnZW5lcmF0ZWRcbiAqL1xuZnVuY3Rpb24gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0Ly8gVGhlcmUgYXJlIHRocmVlIGNhc2VzIHdoZW4gYSB0YWJsZSBhY3Rpb24gaGFzIGFuIE9wZXJhdGlvbkF2YWlsYWJsZSB0aGF0IGxlYWRzIHRvIGFuIGVuYWJsZW1lbnQgZXhwcmVzc2lvblxuXHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHQvLyAxLiBBbiBhY3Rpb24gd2l0aCBhbiBvdmVybG9hZCwgdGhhdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGEgcGFyZW50IGVudGl0eS5cblx0Ly8gMi4gQW4gdW5ib3VuZCBhY3Rpb25cblx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdGxldCB1c2VFbmFibGVkRXhwcmVzc2lvbiA9IGZhbHNlO1xuXHRpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kKSB7XG5cdFx0XHQvLyBVbmJvdW5kIGFjdGlvbi4gSXMgcmVjb2duaXNlZCwgYnV0IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiBjaGVja3MgZm9yIGlzQm91bmQgPSB0cnVlLCBzbyBub3QgZ2VuZXJhdGVkLlxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0Ly8gT3ZlcmxvYWQgYWN0aW9uXG5cdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly8gU3RhdGljIGFjdGlvblxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdXNlRW5hYmxlZEV4cHJlc3Npb247XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIHdpdGggVHJlZS1UYWJsZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gdGFibGVDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBTZXR0aW5ncyBmcm9tIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcbiAqL1xuZnVuY3Rpb24gdXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHR0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogdm9pZCB7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0Y29uc3QgaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IGdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgoXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyIVxuXHQpO1xuXHRjb25zdCBub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IGdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlID0gIW5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5pbmNsdWRlcyhoaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzTm9kZU1vdmFibGUgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc05vZGVNb3ZhYmxlLCB0YWJsZUNvbmZpZ3VyYXRpb24pO1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5pc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmNyZWF0ZUVuYWJsZW1lbnQgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlzQ3JlYXRlRW5hYmxlZCwgdGFibGVDb25maWd1cmF0aW9uKTtcblxuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy5wcm9wZXJ0eU5hbWUgJiYgdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5vZGVUeXBlPy52YWx1ZXMpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS52YWx1ZXM7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLm5vZGVUeXBlID0ge1xuXHRcdFx0cHJvcGVydHlOYW1lOiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZS5ub2RlVHlwZS5wcm9wZXJ0eU5hbWUsXG5cdFx0XHR2YWx1ZXM6IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdHRleHQ6IHZhbHVlc1t2YWx1ZV1cblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21GdW5jdGlvbkluZm8odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uKTogRXh0ZXJuYWxNZXRob2RDb25maWcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXZhbHVlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBsYXN0RG90SW5kZXggPSB2YWx1ZS5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTE7XG5cdGNvbnN0IG1vZHVsZU5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKTtcblx0Y29uc3QgbWV0aG9kTmFtZSA9IHZhbHVlLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKTtcblxuXHQvLyBBZGQgdGhlIGN1c3RvbSBtb2R1bGUgaW4gdGhlIGxpc3Qgb2YgcmVxdWlyZWQgbW9kdWxlcyBpZiBuZWNlc3Nhcnlcblx0aWYgKCFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoXCIvZXh0ZW5zaW9uL1wiKSkge1xuXHRcdGlmICghdGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMpIHtcblx0XHRcdHRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzID0gW21vZHVsZU5hbWVdO1xuXHRcdH0gZWxzZSBpZiAoIXRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XG5cdFx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcy5wdXNoKG1vZHVsZU5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUgfTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGFibGUgY29udHJvbCBjb25maWd1cmF0aW9uIG9wdGltaXN0aWMgYmF0Y2ggaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuIEByZXR1cm5zIFRydWUgaWYgT3B0aW1pc3RpYyBiYXRjaCBtb2RlIGlzIGRpc2FibGVkXG4gKi9cbmZ1bmN0aW9uIGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Ly8gT3B0aW1pc3RpYyBiYXRjaCBpcyBzZXQgYnkgZGVmYXVsdFxuXHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5kaXNhYmxlUmVxdWVzdENhY2hlIHx8IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y2hlY2tDb25kZW5zZWRMYXlvdXQgPSBmYWxzZSxcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBTZWxlY3Rpb25WYXJpYW50VHlwZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IF9tYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncyA/PyB7fTtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9ICFfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKTtcblx0Y29uc3QgZGlzYWJsZUNvcHlUb0NsaXBib2FyZCA9IHRhYmxlU2V0dGluZ3MuZGlzYWJsZUNvcHlUb0NsaXBib2FyZDtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0Y29uc3QgZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCA/IFwiQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlclwiIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgX21hbmlmZXN0V3JhcHBlci5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBvRmlsdGVyQ29uZmlndXJhdGlvbiA9IGxpbmVJdGVtQW5ub3RhdGlvblxuXHRcdD8gZ2V0RmlsdGVyQ29uZmlndXJhdGlvbih0YWJsZVNldHRpbmdzLCBsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQsIHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKVxuXHRcdDoge307XG5cdGNvbnN0IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdGNvbnN0IGV4cG9ydFJlcXVlc3RTaXplID0gdGFibGVTZXR0aW5ncy5leHBvcnRSZXF1ZXN0U2l6ZTtcblx0Y29uc3QgdGFibGVUeXBlID0gZ2V0VGFibGVUeXBlKGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyk7XG5cdC8vIEJ5IGRlZmF1bHQsIHBhc3RlIGlzIGVuYWJsZWQgb24gYW4gT2JqZWN0UGFnZSBhbmQgb24gYSBMaXN0UmVwb3J0IHdpdGggYSBkcmFmdCBUcmVlVGFibGVcblx0Y29uc3QgZW5hYmxlUGFzdGUgPVxuXHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgPz9cblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCIgfHxcblx0XHRcdCh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiYgKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZCkpO1xuXHRjb25zdCB0YWJsZVJvd01vZGUgPSBfZ2V0VGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGxldCBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSkge1xuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPVxuXHRcdFx0dHlwZW9mIHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPT09IFwidHJ1ZVwiXG5cdFx0XHRcdDogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU7XG5cdH1cblx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSB7XG5cdFx0Ly8gSWYgbm8gY3JlYXRlQXRFbmQgaXMgc3BlY2lmaWVkIGl0IHdpbGwgYmUgZmFsc2UgZm9yIElubGluZSBjcmVhdGUgYW5kIHRydWUgb3RoZXJ3aXNlXG5cdFx0Y3JlYXRlQXRFbmQ6XG5cdFx0XHR0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZFxuXHRcdFx0XHQ6IGNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbixcblx0XHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcixcblx0XHQvLyBpZiBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCwgaS5lLiBzZXQgdG8gZmFsc2Vcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiAhY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID8gISF0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA6IGZhbHNlLFxuXHRcdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogZW5hYmxlQXV0b0NvbHVtbldpZHRoLFxuXHRcdGVuYWJsZUV4cG9ydDogX2dldEVuYWJsZUV4cG9ydCh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBlbmFibGVQYXN0ZSksXG5cdFx0ZnJvemVuQ29sdW1uQ291bnQ6IF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKHRhYmxlU2V0dGluZ3MpLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKSksXG5cdFx0ZW5hYmxlTWFzc0VkaXQ6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZU1hc3NFZGl0LFxuXHRcdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzOiB0YWJsZVNldHRpbmdzPy5lbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0ZGlzYWJsZUNvcHlUb0NsaXBib2FyZDogZGlzYWJsZUNvcHlUb0NsaXBib2FyZCxcblx0XHRoZWFkZXJWaXNpYmxlOiB0cnVlLFxuXHRcdGhlYWRlcjogdGFibGVTZXR0aW5ncy5oZWFkZXIsXG5cdFx0bXVsdGlTZWxlY3RNb2RlOiBfZ2V0TXVsdGlTZWxlY3RNb2RlKHRhYmxlU2V0dGluZ3MsIHRhYmxlVHlwZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0c2VsZWN0aW9uTGltaXQ6IF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93Q291bnQ6IF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZTogaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSxcblx0XHRzaG93Um93Q291bnQ6IHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbiA/IGZhbHNlIDogIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0ZGlzYWJsZVJlcXVlc3RDYWNoZTogZ2V0T3B0aW1pc3RpY0JhdGNoU2V0dGluZ3NGcm9tTWFuaWZlc3QodGFibGVNYW5pZmVzdFNldHRpbmdzKSxcblx0XHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogY29uZGVuc2VkVGFibGVMYXlvdXQgJiYgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRpc0NvbXBhY3RUeXBlOiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29tcGFjdFR5cGUoKSxcblx0XHRiZWZvcmVSZWJpbmRUYWJsZTogdGFibGVTZXR0aW5ncy5iZWZvcmVSZWJpbmRUYWJsZSxcblx0XHRleHBvcnRSZXF1ZXN0U2l6ZTogZXhwb3J0UmVxdWVzdFNpemVcblx0fTtcblxuXHRjb25zdCB0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7IC4uLm9Db25maWd1cmF0aW9uLCAuLi50YWJsZVJvd01vZGUsIC4uLm9GaWx0ZXJDb25maWd1cmF0aW9uIH07XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHR1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odGFibGVDb25maWd1cmF0aW9uLCB0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdH1cblx0aWYgKHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uQ2hhbmdlKSB7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLnNlbGVjdGlvbkNoYW5nZSA9IGdldEN1c3RvbUZ1bmN0aW9uSW5mbyh0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkNoYW5nZSwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0fVxuXHRpZiAodGFibGVTZXR0aW5ncy5oZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uaGVhZGVyVmlzaWJsZSA9IHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZTtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbmZpZ3VyYXRpb247XG59XG5cbmZ1bmN0aW9uIGdldFRhYmxlVHlwZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M/OiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuKTogVGFibGVUeXBlIHtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSkge1xuXHRcdC8vIGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmllZCBhIHRhYmxlIHR5cGUgd2Ugd2lsbCB1c2UgdGhpcyBvbmVcblx0XHRyZXR1cm4gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MudHlwZTtcblx0fVxuXG5cdC8vIGNoZWNrIGlmIFVwbG9hZFRhYmxlIHNoYWxsIGJlIHVzZWRcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/Lk1lZGlhUmVzb3VyY2U/LlN0cmVhbSkge1xuXHRcdHJldHVybiBcIlVwbG9hZFRhYmxlXCI7XG5cdH1cblxuXHQvLyBkZWZhdWx0IGlzIHRoZSBSZXNwb25zaXZlVGFibGVcblx0cmV0dXJuIFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb3BlcnR5IHVzaW5nIHRoZSB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb24gc2V0IHRvIHRleHQgb25seS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBjb3JyZXNwb25kaW5nIERhdGFNb2RlbE9iamVjdFBhdGguXG4gKiBAcGFyYW0gbGluZUl0ZW0gVGhlIGNvbHVtbiB0byBiZSBldmFsdWF0ZWQuXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBsaXN0IG9mIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgY29udGV4dC5cbiAqIEBwYXJhbSByZXN0cmljdGlvbnNPblByb3BlcnRpZXMgVGhlIGV4aXN0aW5nIHJlc3RyaWN0aW9ucyBvbiBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRsaW5lSXRlbTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXM6IFJlc3RyaWN0aW9uc09uUHJvcGVydGllc1xuKTogdm9pZCB7XG5cdGNvbnN0IGlzUHJvcGVydHlOYXZpZ2F0ZWQgPVxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggIT09IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aDtcblx0aWYgKGlzUHJvcGVydHlOYXZpZ2F0ZWQgJiYgaXNEYXRhRmllbGQobGluZUl0ZW0pKSB7XG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0aXZlUGF0aF0gPSBsaW5lSXRlbS5WYWx1ZS4kdGFyZ2V0O1xuXHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcy5ub25Tb3J0YWJsZVByb3BlcnRpZXMucHVzaChyZWxhdGl2ZVBhdGgpO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihsaW5lSXRlbSkgJiYgaGFzRmllbGRHcm91cFRhcmdldChsaW5lSXRlbSkpIHtcblx0XHQobGluZUl0ZW0uVGFyZ2V0LiR0YXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuXHRcdFx0aWYgKGlzRGF0YUZpZWxkKGZpZWxkKSAmJiBnZXREaXNwbGF5TW9kZShmaWVsZC5WYWx1ZS4kdGFyZ2V0KSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRcdGNvbnN0IGluaGVyZWRQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRmaWVsZC5WYWx1ZS5wYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGlzSW5oZXJlZFByb3BlcnR5TmF2aWdhdGVkID1cblx0XHRcdFx0XHRpbmhlcmVkUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAhPT1cblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGg7XG5cdFx0XHRcdGlmIChpc0luaGVyZWRQcm9wZXJ0eU5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtmaWVsZC5WYWx1ZS5wYXRoXSA9IGZpZWxkLlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLm5vblNvcnRhYmxlUHJvcGVydGllcy5wdXNoKGZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb25maWcob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCB1bmRlZmluZWQsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9wZXJ0eVR5cGVDb25maWcge1xuXHRsZXQgb1RhcmdldE1hcHBpbmc7XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRvVGFyZ2V0TWFwcGluZyA9IGlzVHlwZURlZmluaXRpb24ob1Byb3BlcnR5LnRhcmdldFR5cGUpXG5cdFx0XHQ/IEVETV9UWVBFX01BUFBJTkdbb1Byb3BlcnR5LnRhcmdldFR5cGUudW5kZXJseWluZ1R5cGVdXG5cdFx0XHQ6IEVETV9UWVBFX01BUFBJTkdbb1Byb3BlcnR5LnR5cGVdO1xuXHR9XG5cdGlmIChvVGFyZ2V0TWFwcGluZyA9PT0gdW5kZWZpbmVkICYmIGRhdGFUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbZGF0YVR5cGVdO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nPy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpICYmIG9UYXJnZXRNYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGlnaXRTZXF1ZW5jZX1gXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmIHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gZmFsc2Vcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG4vKipcbiAqIEFkZCBhIGRlc2NyaXB0aW9uIHByb3BlcnR5IHRvIHRoZSBsaXN0IG9mIGRlc2NyaXB0aW9uIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgY29sdW1ucyBvZiBhIHRhYmxlXG4gKlxuICogQHBhcmFtIHRleHRQcm9wZXJ0aWVzIFRoZSBsaXN0IG9mIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyB0ZXh0IG9uIGEgdGV4dCBhcnJhbmdlbWVudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXNJbmZvIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgbGlua2VkIHRvIHRoZSBjb2x1bW4gKG5hbWVkIGFsc28gY29tcGxleCBwcm9wZXJ0eSlcbiAqIEBwYXJhbSByZWxhdGVkUHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGJlIGFkZGVkXG4gKi9cblxuZnVuY3Rpb24gYWRkUHJvcGVydHlUb0Rpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAoXG5cdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXA6IFJlY29yZDxzdHJpbmcsIERpc3BsYXlNb2RlPixcblx0cmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvLFxuXHRyZWxhdGVkUHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IHZvaWQge1xuXHRpZiAoXG5cdFx0cmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV0uZGlzcGxheU1vZGVPZlByb3BlcnR5VXNlZEFzRGVzY3JpcHRpb24gJiZcblx0XHQhZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcFtyZWxhdGVkUHJvcGVydHlOYW1lXVxuXHQpIHtcblx0XHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdID1cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdLmRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uITtcblx0fVxufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSByZWZlcmVuY2VkIHByb3BlcnRpZXMgb2YgYSBMaW5lSXRlbSBpbiBjYXNlIHRoZSBMaW5lSXRlbSBpcyBhbm5vdGF0ZWQgYXMgaGlkZGVuLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZyb20gTGluZUl0ZW1zIGFuZCBmcm9tIHByb3BlcnRpZXMgb2YgZW50aXR5VHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIGNvbHVtbiBUaGUgZ2l2ZW4gY29sdW1uIGZyb20gbGluZUl0ZW0gb3IgcHJvcGVydHkgb2YgZW50aXR5U2V0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVIaWRkZW5PblJlbGF0ZWRDb2x1bW5zKGV4aXN0aW5nQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sIG5hbWU6IHN0cmluZywgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiB2b2lkIHtcblx0Y29uc3QgcmVsYXRlZEFubm90YXRpb25Db2x1bW5zID0gZXhpc3RpbmdDb2x1bW5zLmZpbHRlcihcblx0XHQoZXhpc3RpbmdDb2x1bW4pID0+IGV4aXN0aW5nQ29sdW1uLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKG5hbWUpICYmIGV4aXN0aW5nQ29sdW1uLmlzUGFydE9mTGluZUl0ZW1cblx0KTtcblx0Y29sdW1uLmlzUGFydE9mTGluZUl0ZW0gPSAhIXJlbGF0ZWRBbm5vdGF0aW9uQ29sdW1ucy5sZW5ndGg7XG5cdGlmIChcblx0XHRyZWxhdGVkQW5ub3RhdGlvbkNvbHVtbnMubGVuZ3RoICYmXG5cdFx0IXJlbGF0ZWRBbm5vdGF0aW9uQ29sdW1ucz8uc29tZSgoYW5ub3RhdGlvbkNvbHVtbikgPT4gYW5ub3RhdGlvbkNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpXG5cdCkge1xuXHRcdGNvbHVtbi5zb3J0YWJsZSA9IGZhbHNlO1xuXHRcdGNvbHVtbi5pc0dyb3VwYWJsZSA9IGZhbHNlO1xuXHRcdGNvbHVtbi5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBleHBvcnQgc2V0dGluZ3MgcHJvcGVydGllcyBvZiBhIG1hbmlmZXN0IGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGN1c3RvbWl6ZWQvb3ZlcndyaXR0ZW4gZXhwb3J0IHNldHRpbmdzIG9mIGEgbWFuaWZlc3QgY29sdW1uXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZyb20gTGluZUl0ZW1zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBwcm9wZXJ0eUluZm9zIFRoZSBwcm9wZXJ0aWVzIGxpbmtlZCB0byBhIGNvbXBsZXggY29sdW1uXG4gKiBAcGFyYW0gY29sdW1uS2V5IFRoZSBjb2x1bW4ga2V5IG9mIHRoZSBjb2x1bW4gdG8gYmUgb3ZlcndyaXR0ZW5cbiAqIEByZXR1cm5zIFRoZSBleHBvcnQgc2V0dGluZ3Mgb2YgdGhlIGNvbHVtbiBtZXJnaW5nIGN1c3RvbWl6ZWQgZXhwb3J0IHNldHRpbmdzIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGRldGVjdGVkIG9uIHRoZSBhbm5vdGF0aW9uIGNvbHVtblxuICovXG5mdW5jdGlvbiBnZXRDdXN0b21FeHBvcnRTZXR0aW5ncyhcblx0ZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgdW5kZWZpbmVkLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdLFxuXHRjb2x1bW5LZXk/OiBzdHJpbmdcbik6IENvbHVtbkV4cG9ydFNldHRpbmdzIHtcblx0bGV0IGNvbHVtbkZyb21Bbm5vdGF0aW9ucztcblx0aWYgKGNvbHVtbktleSkge1xuXHRcdGNvbHVtbkZyb21Bbm5vdGF0aW9ucyA9IGFubm90YXRpb25Db2x1bW5zLmZpbmQoKGFubm90YXRpb25Db2x1bW4pID0+IGFubm90YXRpb25Db2x1bW4ua2V5ID09PSBjb2x1bW5LZXkpO1xuXHR9XG5cdGNvbnN0IGN1c3RvbUV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyA9IHtcblx0XHR0eXBlOiBleHBvcnRTZXR0aW5ncz8udHlwZSA/PyBjb2x1bW5Gcm9tQW5ub3RhdGlvbnM/LmV4cG9ydFNldHRpbmdzPy50eXBlLFxuXHRcdHRlbXBsYXRlOlxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlID8/XG5cdFx0XHRfYXBwZW5kQ3VzdG9tVGVtcGxhdGUocHJvcGVydHlJbmZvcywgZXhwb3J0U2V0dGluZ3M/LnByb3BlcnR5KSA/P1xuXHRcdFx0Y29sdW1uRnJvbUFubm90YXRpb25zPy5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGUsXG5cdFx0cHJvcGVydHk6IGV4cG9ydFNldHRpbmdzPy5wcm9wZXJ0eVxuXHRcdFx0PyBfZ2V0UHJvcGVydHlOYW1lcyhleHBvcnRTZXR0aW5ncz8ucHJvcGVydHksIGFubm90YXRpb25Db2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKVxuXHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0d2lkdGg6IGV4cG9ydFNldHRpbmdzPy53aWR0aCxcblx0XHR3cmFwOiAhIShleHBvcnRTZXR0aW5ncz8ucHJvcGVydHkgJiYgZXhwb3J0U2V0dGluZ3MucHJvcGVydHk/Lmxlbmd0aCA+IDEpID8/ICEhKHByb3BlcnR5SW5mb3MgJiYgcHJvcGVydHlJbmZvcy5sZW5ndGggPiAxKVxuXHR9O1xuXHRyZXR1cm4gcmVtb3ZlVW5kZWZpbmVkRnJvbUV4cG9ydFNldHRpbmdzKGN1c3RvbUV4cG9ydFNldHRpbmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzLFxuXHRjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGdldENhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0Z2V0SW1wb3J0YW5jZSxcblx0Z2V0U2VsZWN0aW9uTW9kZSxcblx0Z2V0Um93U3RhdHVzVmlzaWJpbGl0eSxcblx0Z2V0UDEzbk1vZGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSxcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdGdldFR5cGVDb25maWcsXG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUsXG5cdGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMsXG5cdGdldE5hdmlnYXRpb25UYXJnZXRQYXRoXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFnVEtBLFVBQVUsRUFNZjtFQUFBLFdBTktBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtFQUFBLEdBQVZBLFVBQVUsS0FBVkEsVUFBVTtFQXlNZjtFQUNBLE1BQU1DLDZCQUE2QixHQUFHLEVBQUU7RUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxlQUFlLENBQzlCQyxrQkFBNEIsRUFDNUJDLGlCQUF5QixFQUN6QkMsZ0JBQXlELEVBQ3pEQyxlQUFnRSxFQUNoRUMsa0JBQW9ELEVBQ25DO0lBQ2pCLE1BQU1DLFlBQVksR0FBR0MseUJBQXlCLENBQUNOLGtCQUFrQixFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDdkcsTUFBTUssYUFBYSxHQUFHRixZQUFZLENBQUNHLGtCQUFrQjtJQUNyRCxNQUFNQyxlQUFlLEdBQUdDLHNCQUFzQixDQUM3Q1IsZ0JBQWdCLENBQUNTLCtCQUErQixDQUE2QlYsaUJBQWlCLENBQUMsQ0FBQ1csT0FBTyxFQUl2R1YsZ0JBQWdCLEVBQ2hCRyxZQUFZLENBQUNBLFlBQVksRUFDekJELGtC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
|
|
3353
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwic2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJzdGFuZGFyZEFjdGlvbnMiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJ0YWJsZUFjdGlvbnMiLCJnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImNvcHlBY3Rpb25zIiwiZmlsdGVyIiwiYSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiQ29weSIsImFubm90YXRpb25BY3Rpb25zIiwiYW5ub3RhdGlvbkFuZFN0YW5kYXJkQWN0aW9ucyIsImNyZWF0ZSIsImRlbGV0ZSIsIm1hc3NFZGl0IiwiaW5zaWdodHMiLCJjcmVhdGlvblJvdyIsInBhc3RlIiwiY3V0IiwibWFuaWZlc3RBY3Rpb24iLCJPYmplY3QiLCJ2YWx1ZXMiLCJEZWZhdWx0IiwiTWVudSIsInBvc2l0aW9uIiwiYW5jaG9yIiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3JlYXRlIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQmVmb3JlIiwibWFuaWZlc3RBY3Rpb25FbnRyaWVzIiwiZW50cmllcyIsInN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zIiwiZnJvbUVudHJpZXMiLCJrZXkiLCJzdGFydHNXaXRoIiwibm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25PdmVyd3JpdGVDb25maWciLCJpc05hdmlnYWJsZSIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJ2aXNpYmxlIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiY29tbWFuZCIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiY29tbWFuZEFjdGlvbnMiLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwid2lkdGgiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJleHBvcnRTZXR0aW5ncyIsImFkZENvbXB1dGVkQ29sdW1ucyIsImdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiwiY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsImNvbHVtbiIsInRhYmxlQ29sdW1uIiwidW5pdCIsImFkZCIsImN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJkZWZpbml0aW9ucyIsImFubm90YXRpb24iLCJhZ2dyZWdhdGVkUHJvcGVydHkiLCJfZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJmaW5kIiwicHJvcGVydHkiLCJuYW1lIiwicXVhbGlmaWVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwiY3R4RGVmUHJvcGVydHkiLCJ2YWx1ZSIsInJlc3VsdCIsInByb3BlcnR5SW5mb3MiLCJyZWxhdGl2ZVBhdGgiLCJyYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiaGFzIiwiZGVmYXVsdEFnZ3JlZ2F0ZSIsImNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSIsImZvdW5kQ29sdW1uIiwiZmluZENvbHVtbkJ5UGF0aCIsInB1c2giLCJsZW5ndGgiLCJ1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlIiwidGFibGVWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb250cm9sIiwiYWdncmVnYXRlc0RlZmluaXRpb25zIiwiZW5hYmxlQW5hbHl0aWNzIiwiZW5hYmxlJHNlbGVjdCIsImVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dCIsImFnZ3JlZ2F0ZXMiLCJfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZUJhc2ljU2VhcmNoIiwiaW5jbHVkZXMiLCJncm91cENvbmRpdGlvbnMiLCJnZXRHcm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwic3RyZWFtUHJvcGVydHkiLCJVSSIsIk1lZGlhUmVzb3VyY2UiLCJTdHJlYW0iLCIkdGFyZ2V0IiwidXBsb2FkQWN0aW9uIiwidXBsb2FkVGFibGUiLCJzdHJlYW0iLCJmaWxlTmFtZSIsIkNvcmUiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsInBhdGgiLCJhY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwidG9TdHJpbmciLCJtYXhMZW5ndGgiLCJjbGVhclNlbGVjdGlvbk9uRmlsdGVyIiwiY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyIsImxpbmVJdGVtIiwib3BlcmF0aW9uQXZhaWxhYmxlIiwic2VsZWN0ZWRGaWVsZHMiLCJwdXNoRmllbGQiLCJmaWVsZCIsImluZGV4T2YiLCJwdXNoRmllbGRMaXN0IiwiZmllbGRzIiwib3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsInNwbGl0IiwidmFsaWRQcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJyZXNvbHZlUGF0aCIsInNlbWFudGljS2V5cyIsIkNvbW1vbiIsIlNlbWFudGljS2V5Iiwic2VtYW50aWNLZXkiLCJjYXBhYmlsaXRpZXNBbm5vdGF0aW9uIiwiZ2V0RW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiUmVxdWVzdEF0TGVhc3QiLCJwcm9wZXJ0eVBhdGgiLCJnZXROYXZpZ2F0aW9uQXZhaWxhYmxlRmllbGRzRnJvbUxpbmVJdGVtIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiRGVsZXRhYmxlIiwiVXBkYXRlUmVzdHJpY3Rpb25zIiwiVXBkYXRhYmxlIiwicmVjb3JkIiwiJFR5cGUiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9uQ29sdW1uIiwidXBkYXRlTGlua2VkUHJvcGVydGllcyIsIm9Db2x1bW4iLCJwcm9wIiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwidGltZXpvbmVQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwidGltZXpvbmUiLCJUaW1lem9uZSIsInVuaXRDb2x1bW4iLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0Iiwib1RpbWV6b25lQ29sdW1uIiwidGltZXpvbmVUZXh0IiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwiVGV4dCIsInRleHRDb2x1bW4iLCJ0ZXh0QXJyYW5nZW1lbnQiLCJ0ZXh0UHJvcGVydHkiLCJtb2RlIiwiZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvIiwiaGVhZGVySW5mb1RpdGxlUGF0aCIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwicGFyYW1zIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblRhcmdldFBhdGgiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUiLCJzdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIiwiZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiIsInRhYmxlQW5ub3RhdGlvbiIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiaGVhZGVyIiwidGl0bGUiLCJvVmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlckluZm9UaXRsZSIsImhlYWRlclZpc2libGUiLCJyZXF1ZXN0QXRMZWFzdCIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0JsYW5rVGFibGUiLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiY3JlYXRpb25Nb2RlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVFeHByZXNzaW9uIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwicHJvcGVydGllcyIsImFjdGlvbk5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJzaXplIiwidGl0bGVQcm9wZXJ0eSIsIkFycmF5IiwiZnJvbSIsImpvaW4iLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImFVaUhpZGRlblBhdGhFeHByZXNzaW9ucyIsImRhdGFGaWVsZCIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5IiwibmF2aWdhdGlvblBhdGgiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwidXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdCIsImRhdGFGaWVsZElkIiwic29tZSIsImFjdGlvbktleSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsIm1hbmlmZXN0QWN0aW9uSWQiLCJnZW5lcmF0ZSIsIkFjdGlvbiIsIlNlbWFudGljT2JqZWN0IiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJjdXN0b21BY3Rpb25zIiwicmVkdWNlIiwiYWN0aW9uIiwibWVudSIsIm1lbnVBY3Rpb24iLCJnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJhVmlzaWJsZVBhdGhFeHByZXNzaW9ucyIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uIiwiaXNEZWxldGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwiaXNFbnRpdHlTZXQiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJGb3JjZU11bHRpIiwiTXVsdGkiLCJGb3JjZVNpbmdsZSIsIlNpbmdsZSIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiYk1hc3NFZGl0RW5hYmxlZCIsIkF1dG8iLCJidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm9yIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsImVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJjb25jYXQiLCJjb3B5RGF0YUZpZWxkIiwiZ2V0Q29weUFjdGlvbiIsImRhdGFGaWVsZElzQ29weUFjdGlvbiIsInNFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidmlzaWJsZUV4cHJlc3Npb24iLCJub3QiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwidmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbiIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiX3VzZUVuYWJsZWRFeHByZXNzaW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJ0ZXh0IiwiTGFiZWwiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsInRhYmxlQWN0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290T3JOb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJMaXN0UmVwb3J0IiwiQ3JlYXRpb25Nb2RlIiwiTmV3UGFnZSIsIkV4dGVybmFsIiwiTG9nIiwid2FybmluZyIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwidGFyZ2V0QW5ub3RhdGlvbnNDb21tb24iLCJ0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24iLCJTZXNzaW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIkNyZWF0aW9uUm93IiwiRXJyb3IiLCJyb3V0ZSIsImFwcGVuZCIsImNyZWF0ZUF0RW5kIiwibmF2aWdhdGVUb1RhcmdldCIsImVycm9yIiwiaW5mbyIsIl9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwidGFibGVUeXBlIiwicHJlc3NQcm9wZXJ0eSIsIm9wZW5Jbk5ld1RhYlByZXNzUHJvcGVydHkiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsImRpc3BsYXkiLCJ0YXJnZXQiLCJDcml0aWNhbGl0eSIsIk1vZGVsSGVscGVyIiwiZ2V0RHJhZnRSb290IiwiZ2V0RHJhZnROb2RlIiwiZWRpdGFibGUiLCJyZWNyZWF0ZUNvbnRleHQiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJvcGVuSW5OZXdUYWJQcmVzcyIsInJvd05hdmlnYXRlZCIsIklzSW5hY3RpdmUiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJ0YWJsZUNyZWF0aW9uTW9kZSIsImRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAiLCJyZXN0cmljdGlvbnNPblByb3BlcnRpZXMiLCJleGlzdHMiLCJ0YXJnZXRUeXBlIiwicmVsYXRlZFByb3BlcnRpZXNJbmZvIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIiwicmVsYXRlZFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYWRkUHJvcGVydHlUb0Rpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAiLCJjb2x1bW5JbmZvIiwiZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSIsImRhdGFQb2ludFRhcmdldFZhbHVlIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJhbm5vdGF0aW9uUHJvcGVydHkiLCJ1cGRhdGVQcm9wZXJ0eUxhYmVsIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lIiwibm9uU29ydGFibGVQcm9wZXJ0aWVzIiwicmVsYXRlZENvbHVtbnMiLCJfY3JlYXRlUmVsYXRlZENvbHVtbnMiLCJmdWxsUHJvcGVydHlQYXRoIiwidXNlRGF0YUZpZWxkUHJlZml4IiwiYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiIsInJlcGxhY2VTcGVjaWFsQ2hhcnMiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNIaWRkZW4iLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsImdyb3VwUGF0aCIsIl9zbGljZUF0U2xhc2giLCJpc0dyb3VwIiwibGFiZWwiLCJnZXRMYWJlbCIsImRhdGFUeXBlIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwiaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uIiwic29ydGFibGUiLCJmaWx0ZXJhYmxlIiwibm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJ0eXBlQ29uZmlnIiwiY2xhc3NOYW1lIiwiY29uc3RyYWludHMiLCJfaXNFeHBvcnRhYmxlQ29sdW1uIiwiY3JlYXRlQ29sdW1uRXhwb3J0U2V0dGluZ3MiLCJjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiQW5ub3RhdGlvbiIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwicmVxdWlyZWQiLCJpc1JlcXVpcmVkQ29sdW1uIiwiYWRkaXRpb25hbExhYmVscyIsIl9hZGRUb29sVGlwIiwiX3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50IiwidXRjIiwiaXNBVGltZXpvbmUiLCJjdXJyZW5jeVByb3BlcnR5Iiwic2NhbGUiLCJpc1Byb3BlcnR5IiwiZ2V0U3RhdGljVW5pdE9yQ3VycmVuY3kiLCJnZXRTdGF0aWNUaW1lem9uZSIsImlzVGltZXpvbmUiLCJleHBvcnRUeXBlIiwiZ2V0RXhwb3J0RGF0YVR5cGUiLCJpbnB1dEZvcm1hdCIsImdldERhdGVJbnB1dEZvcm1hdCIsImRlbGltaXRlciIsImdldERlbGltaXRlciIsInRlbXBsYXRlIiwid3JhcCIsImF1dG9TY2FsZSIsInJlbW92ZVVuZGVmaW5lZEZyb21FeHBvcnRTZXR0aW5ncyIsInNldHRpbmciLCJsaW5rZWRBbm5vdGF0aW9uQ29sdW1ucyIsImNvbCIsInRvb2x0aXAiLCJwcm9wZXJ0eVR5cGUiLCJkYXRhRmllbGREZWZhdWx0UHJvcGVydHkiLCJUYXJnZXQiLCJNZWRpYVR5cGUiLCJ0ZXJtIiwiaXNVUkwiLCJfaXNWYWxpZENvbHVtbiIsIl9nZXRWaXNpYmxlRXhwcmVzc2lvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsInByb3BlcnR5VmFsdWUiLCJpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkIiwiaXNBbmFseXRpY2FsTGVhZiIsIl9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJkYXRhRmllbGRHcm91cCIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsIkRhdGEiLCJpbm5lckRhdGFGaWVsZCIsImRhdGFGaWVsZERlZmF1bHQiLCJpc0RhdGFGaWVsZFR5cGVzIiwiX2dldFRvb2x0aXAiLCJRdWlja0luZm8iLCJkYXRhcG9pbnRUYXJnZXQiLCJnZXRSb3dTdGF0dXNWaXNpYmlsaXR5IiwiY29sTmFtZSIsImlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwiY29tcHV0ZUhpZGRlbk9uUmVsYXRlZENvbHVtbnMiLCJuZXdOYW1lIiwicHJvcGVydHlJbmZvIiwiX2dldEFubm90YXRpb25Db2x1bW5OYW1lIiwiY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkiLCJyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCIsImNvbHVtbkV4aXN0cyIsImFkZGl0aW9uYWxQcm9wZXJ0eSIsInRlY2huaWNhbENvbHVtbiIsImFnZ3JlZ2F0YWJsZSIsImV4dGVuc2lvbiIsInRlY2huaWNhbGx5R3JvdXBhYmxlIiwidGVjaG5pY2FsbHlBZ2dyZWdhdGFibGUiLCJfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCIsImZpZWxkR3JvdXBOYW1lIiwiY29sdW1uS2V5cyIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJfZ2V0UmVsYXRpdmVQYXRoIiwiaXNMYXN0U2xhc2giLCJpc0xhc3RQYXJ0IiwiaVNsYXNoSW5kZXgiLCJsYXN0SW5kZXhPZiIsIl9pc0NvbHVtbk11bHRpVmFsdWVkIiwicHJvcGVydHlPYmplY3RQYXRoIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJpc011bHRpVmFsdWVGaWVsZCIsIl9pc0NvbHVtblNvcnRhYmxlIiwibm9uU29ydGFibGVDb2x1bW5zIiwiZmlsdGVyRnVuY3Rpb25zIiwiX2dldEZpbHRlckZ1bmN0aW9ucyIsImlzQXJyYXkiLCJDb252ZXJ0ZXJDb250ZXh0IiwiVHlwZUd1YXJkcyIsIkZpbHRlckZ1bmN0aW9ucyIsImdldEVudGl0eUNvbnRhaW5lciIsIl9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlIiwidGV4dExpbmVzRWRpdCIsIl9maW5kU2VtYW50aWNLZXlWYWx1ZXMiLCJhU2VtYW50aWNLZXlWYWx1ZXMiLCJiU2VtYW50aWNLZXlGb3VuZCIsImkiLCJzZW1hbnRpY0tleUZvdW5kIiwiX2ZpbmRQcm9wZXJ0aWVzIiwic2VtYW50aWNLZXlWYWx1ZXMiLCJmaWVsZEdyb3VwUHJvcGVydGllcyIsInNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAiLCJzUHJvcGVydHlQYXRoIiwidG1wIiwiZmllbGRHcm91cFByb3BlcnR5UGF0aCIsIl9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAiLCJhUHJvcGVydGllcyIsIl9wcm9wZXJ0aWVzRm91bmQiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiX2dldEltcE51bWJlciIsIkltcG9ydGFuY2UiLCJfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZSIsInRhcmdldFZhbHVlZnJvbURQIiwiZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCIsImlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQiLCJfZ2V0TWF4SW1wb3J0YW5jZSIsIm1heEltcE51bWJlciIsImltcE51bWJlciIsIkRhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwiaGlnaEtleXMiLCJmaWVsZHNXaXRoSW1wb3J0YW5jZSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImRhdGFGaWVsZFRhcmdldCIsImZpZWxkR3JvdXBEYXRhIiwiZmllbGRHcm91cERhdGFGaWVsZCIsIkhpZ2giLCJpdGVtIiwiZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIiwiZ2V0VGFibGVUeXBlIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJ0YWJsZUNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5Iiwic0xhYmVsIiwiaXNGaWVsZEdyb3VwQ29sdW1uIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJzaXR1YXRpb25zTmF2UHJvcHMiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJpc0NvbGxlY3Rpb24iLCJTQVBPYmplY3ROb2RlVHlwZSIsIk5hbWUiLCJzaXR1YXRpb25zTmF2UHJvcCIsImhhc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJpc011bHRpVmFsdWUiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsInJlbGF0ZWRQcm9wZXJ0eU5hbWUiLCJkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbiIsImNyZWF0ZVByb3BlcnR5QW5ub3RhdGVkVGV4dE9ubHkiLCJfZ2V0UHJvcGVydHlOYW1lcyIsIm1hdGNoZWRQcm9wZXJ0aWVzIiwiaXNSZXF1aXJlZEZpZWxkR3JvdXAiLCJmaWVsZEdyb3VwIiwiaXNEYXRhRmllbGQiLCJpc1N0YXRpY2FsbHlNYW5kYXRvcnkiLCJJbmxpbmVDcmVhdGlvblJvd3MiLCJpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkiLCJpc1JlcXVpcmVkRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImRhdGFGaWVsZEZvckFubm90YXRpb24iLCJEYXRhRmllbGRGb3JBbm5vdGF0aW9uRmllbGRDb250cm9sTm90TWFuZGF0b3J5IiwiaGFzRmllbGRDb250cm9sTm90TWFuZGF0b3J5IiwiaGFzRmllbGRHcm91cFRhcmdldCIsImhhc0RhdGFQb2ludFRhcmdldCIsIlZpc3VhbGl6YXRpb24iLCJpc1JlcXVpcmVkRGF0YVBvaW50IiwiaXNSZXF1aXJlZFByb3BlcnR5IiwiaXNSYXRpbmdWaXN1YWxpemF0aW9uRnJvbURhdGFGaWVsZERlZmF1bHQiLCJkYXRhUG9pbnQiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJpc0RhdGFGaWVsZEZvckFubm90YXRpb24iLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJleHBvcnRQcm9wZXJ0aWVzIiwiaW50ZXJuYWxDb2x1bW5zIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaXNTbG90Q29sdW1uIiwibWFuaWZlc3RDb2x1bW4iLCJTbG90IiwiaXNDdXN0b21Db2x1bW4iLCJfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyIsImFubm90YXRpb25UYWJsZUNvbHVtbnMiLCJyZXBsYWNlIiwidmFsaWRhdGVLZXkiLCJiYXNlVGFibGVDb2x1bW4iLCJBZnRlciIsInByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW4iLCJpc0FjdGlvbk5hdmlnYWJsZSIsImdldEN1c3RvbUV4cG9ydFNldHRpbmdzIiwidG9vbHRpcFRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwiaGVhZGVyVGV4dCIsImN1c3RvbUNvbHVtbkV4cG9ydFNldHRpbmdzIiwiYmFzZU1hbmlmZXN0Q29sdW1uIiwiSG9yaXpvbnRhbEFsaWduIiwiQmVnaW4iLCJpZCIsImN1c3RvbVRhYmxlQ29sdW1uIiwibWVzc2FnZSIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiTWFuaWZlc3QiLCJJc3N1ZVNldmVyaXR5IiwiTG93IiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9uQ29sdW1ucyIsIkludmFsaWRLZXkiLCJjb2x1bW5XaXRoU2l0dWF0aW9uc0luZGljYXRvciIsInNpdHVhdGlvbnNJbmRpY2F0b3JDb2x1bW4iLCJwcm9wZXJ0eUtleSIsImlzU2l0dWF0aW9uc0luZGljYXRvciIsIkNvbXB1dGVkIiwiY2xpcGJvYXJkU2V0dGluZ3MiLCJpbmRleE9mRmlyc3RWaXNpYmxlQ29sdW1uIiwiZmluZEluZGV4Iiwic3BsaWNlIiwiY29sdW1uV2l0aERyYWZ0SW5kaWNhdG9yIiwiaXNEcmFmdE5vZGUiLCJpc0RyYWZ0Um9vdCIsImRyYWZ0SW5kaWNhdG9yQ29sdW1uIiwiaXNEcmFmdEluZGljYXRvciIsImNvbHVtbkluZGV4VG9JbnNlcnRBZnRlciIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImFnZ3JlZ2F0ZSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJnZXRTb3J0Q29uZGl0aW9ucyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJsZXZlbCIsIkluaXRpYWxFeHBhbnNpb25MZXZlbCIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJncm91cExldmVscyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbiIsImNhcGFiaWxpdGllcyIsIkluc2VydFJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIlRvdGFsIiwiYVRvdGFscyIsImNyZWF0aW9uQmVoYXZpb3VyIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldEN1dFZpc2liaWxpdHkiLCJnZXREZWxldGVWaXNpYmlsaXR5IiwibWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImdldE1hc3NFZGl0VmlzaWJpbGl0eSIsImlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZSIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwiZ2V0Q3JlYXRpb25Sb3ciLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsImdldFRhYmxlSUQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzU2VhcmNoYWJsZSIsImlzUGF0aFNlYXJjaGFibGUiLCJlbnRpdHlOYW1lIiwiZW50aXR5VHlwZU5hbWUiLCJjb2xsZWN0aW9uIiwicm93IiwiaXNJbkRpc3BsYXlNb2RlIiwic2VhcmNoYWJsZSIsImluaXRpYWxFeHBhbnNpb25MZXZlbCIsImlzQ3VycmVuY3kiLCJleHBvcnREYXRhVHlwZSIsInRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInNlbGVjdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwiX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlIiwiaXNJcGhvbmUiLCJlbmFibGVGdWxsU2NyZWVuIiwiSXNzdWVUeXBlIiwiRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQiLCJfZ2V0TXVsdGlTZWxlY3RNb2RlIiwibXVsdGlTZWxlY3RNb2RlIiwic2VsZWN0QWxsIiwidXNlSWNvblRhYkJhciIsIl9nZXRUYWJsZU1vZGUiLCJpc1RlbXBsYXRlTGlzdFJlcG9ydCIsInJvd0NvdW50TW9kZSIsInJvd0NvdW50IiwiX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3RhYmxlVHlwZSIsIl90YWJsZVNldHRpbmdzIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJfZ2V0RW5hYmxlRXhwb3J0IiwiZW5hYmxlUGFzdGUiLCJlbmFibGVFeHBvcnQiLCJfZ2V0RnJvemVuQ29sdW1uQ291bnQiLCJmcm96ZW5Db2x1bW5Db3VudCIsIl9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoaWRlVGFibGVUaXRsZSIsImZpbHRlcnMiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlclBhdGhzIiwiZmlsdGVyUGF0aHMiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaGlkZGVuRmlsdGVycyIsIm5hdlByb3BlcnR5IiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwic291cmNlVHlwZSIsInBhcmFtZXRlcnMiLCJ1cGRhdGVUcmVlVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJ0YWJsZUNvbmZpZ3VyYXRpb24iLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsImdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIiwiaXNOb2RlTW92YWJsZSIsImdldEN1c3RvbUZ1bmN0aW9uSW5mbyIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3JlYXRlRW5hYmxlbWVudCIsImlzQ3JlYXRlRW5hYmxlZCIsIm5vZGVUeXBlIiwibGFzdERvdEluZGV4IiwibW9kdWxlTmFtZSIsIm1ldGhvZE5hbWUiLCJhZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzIiwiZ2V0T3B0aW1pc3RpY0JhdGNoU2V0dGluZ3NGcm9tTWFuaWZlc3QiLCJkaXNhYmxlUmVxdWVzdENhY2hlIiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsImRpc2FibGVDb3B5VG9DbGlwYm9hcmQiLCJ0ZW1wbGF0ZVR5cGUiLCJkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIiLCJpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCIsIm9GaWx0ZXJDb25maWd1cmF0aW9uIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiZXhwb3J0UmVxdWVzdFNpemUiLCJ0YWJsZVJvd01vZGUiLCJpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIiwib0NvbmZpZ3VyYXRpb24iLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlTWFzc0VkaXQiLCJlbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyIsInNob3dSb3dDb3VudCIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJpc0NvbXBhY3RUeXBlIiwiYmVmb3JlUmViaW5kVGFibGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJpc1Byb3BlcnR5TmF2aWdhdGVkIiwiaW5oZXJlZFByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzSW5oZXJlZFByb3BlcnR5TmF2aWdhdGVkIiwib1Byb3BlcnR5Iiwib1RhcmdldE1hcHBpbmciLCJpc1R5cGVEZWZpbml0aW9uIiwiRURNX1RZUEVfTUFQUElORyIsInVuZGVybHlpbmdUeXBlIiwiJFNjYWxlIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsIiRNYXhMZW5ndGgiLCJudWxsYWJsZSIsIiROdWxsYWJsZSIsIm1pbmltdW0iLCJpc05hTiIsIlZhbGlkYXRpb24iLCJNaW5pbXVtIiwibWF4aW11bSIsIk1heGltdW0iLCJpc0RpZ2l0U2VxdWVuY2UiLCJJc0RpZ2l0U2VxdWVuY2UiLCJwYXJzZUFzU3RyaW5nIiwiZW1wdHlTdHJpbmciLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJyZWxhdGVkQW5ub3RhdGlvbkNvbHVtbnMiLCJleGlzdGluZ0NvbHVtbiIsImNvbHVtbktleSIsImNvbHVtbkZyb21Bbm5vdGF0aW9ucyIsImN1c3RvbUV4cG9ydFNldHRpbmdzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0UHJvcGVydHlQYXRoXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGdW5jdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNLZXkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENyaXRpY2FsaXR5LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGUsXG5cdFNlbGVjdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wbGV4UHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMsXG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5LFxuXHRnZXREYXRhRmllbGREYXRhVHlwZSxcblx0Z2V0U2VtYW50aWNPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50LFxuXHRoYXNEYXRhUG9pbnRUYXJnZXQsXG5cdGhhc0ZpZWxkR3JvdXBUYXJnZXQsXG5cdGlzRGF0YUZpZWxkLFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0LFxuXHRpc0RhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdGlzRGF0YUZpZWxkVHlwZXMsXG5cdGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQsXG5cdGlzUmF0aW5nVmlzdWFsaXphdGlvbkZyb21EYXRhRmllbGREZWZhdWx0XG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRDb21iaW5lZEFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRPdmVycmlkZVR5cGVBY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0ZGF0YUZpZWxkSXNDb3B5QWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRnZXRDb3B5QWN0aW9uLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlQ2F0ZWdvcnlUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0RURNX1RZUEVfTUFQUElORyxcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUsIHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0ICogYXMgVHlwZUd1YXJkcyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRpc0Fubm90YXRpb25PZlR5cGUsXG5cdGlzTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eSxcblx0aXNUeXBlRGVmaW5pdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0Q29udGV4dFByb3BlcnR5UmVzdHJpY3Rpb24sXG5cdGdldEhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdGdldE5vblVwZGF0YWJsZU5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aFNlYXJjaGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZSxcblx0dHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCB0eXBlIERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcywgdHlwZSBSZXN0cmljdGlvbnNPblByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7IGhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSwgaXNTdGF0aWNhbGx5TWFuZGF0b3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldFN0YXRpY1RpbWV6b25lLFxuXHRnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSxcblx0aXNUaW1lem9uZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRGb3JtYXRPcHRpb25zVHlwZSxcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvblxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0QWN0aW9uVHlwZSxcblx0Q3JlYXRpb25Nb2RlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdEltcG9ydGFuY2UsXG5cdFNlbGVjdGlvbk1vZGUsXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaXN1YWxpemF0aW9uVHlwZVxufSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi8uLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSB9IGZyb20gXCIuL0NyaXRpY2FsaXR5XCI7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYXJkQWN0aW9uIH0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQge1xuXHRTdGFuZGFyZEFjdGlvbktleXMsXG5cdGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Z2V0Q3JlYXRpb25Sb3csXG5cdGdldEN1dFZpc2liaWxpdHksXG5cdGdldERlbGV0ZVZpc2liaWxpdHksXG5cdGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nLFxuXHRnZXRNYXNzRWRpdFZpc2liaWxpdHksXG5cdGdldFJlc3RyaWN0aW9ucyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3V0LFxuXHRnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbnR5cGUgVXBsb2FkVGFibGVTZXR0aW5ncyA9IHtcblx0c3RyZWFtOiBzdHJpbmc7XG5cdGZpbGVOYW1lPzogc3RyaW5nO1xuXHRhY2NlcHRhYmxlTWVkaWFUeXBlcz86IHN0cmluZztcblx0bWF4TGVuZ3RoPzogaW50O1xuXHR1cGxvYWRBY3Rpb24/OiBTdGFuZGFyZEFjdGlvbjtcbn07XG50eXBlIFJvd0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFjdGlvbj86IHN0cmluZztcblx0cHJlc3M/OiBzdHJpbmc7XG5cdG9wZW5Jbk5ld1RhYlByZXNzPzogc3RyaW5nO1xuXHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRyb3dOYXZpZ2F0ZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93PzogUm93Q29uZmlndXJhdGlvbjtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRkaXNwbGF5TW9kZT86IGJvb2xlYW47XG5cdHRocmVzaG9sZDogbnVtYmVyO1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmc7XG5cdHNvcnRDb25kaXRpb25zPzogc3RyaW5nO1xuXHRncm91cENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0YWxsb3dEcm9wQmV0d2Vlbk5vZGVzPzogYm9vbGVhbjtcblx0LyoqIENyZWF0ZSBuZXcgZW50cmllcyAqL1xuXHRjcmVhdGU6IENyZWF0ZUJlaGF2aW9yIHwgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbDtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c2VhcmNoYWJsZTogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdHVwbG9hZFRhYmxlPzogVXBsb2FkVGFibGVTZXR0aW5ncztcbn07XG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxNZXRob2RDb25maWcgPSB7XG5cdG1vZHVsZU5hbWU6IHN0cmluZztcblx0bWV0aG9kTmFtZTogc3RyaW5nO1xufTtcbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVCZWhhdmlvckV4dGVybmFsID0ge1xuXHRtb2RlOiBcIkV4dGVybmFsXCI7XG5cdG91dGJvdW5kOiBzdHJpbmc7XG5cdG91dGJvdW5kRGV0YWlsOiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbltcIm91dGJvdW5kRGV0YWlsXCJdO1xuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb247XG59O1xuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRwYXRoczoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdH1bXTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gPSB7XG5cdHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHR0ZXh0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0ZGlzYWJsZVJlcXVlc3RDYWNoZTogYm9vbGVhbjtcblx0Y3JlYXRlQXRFbmQ6IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBib29sZWFuO1xuXHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydDogYm9vbGVhbjtcblx0ZnJvemVuQ29sdW1uQ291bnQ/OiBudW1iZXI7XG5cdHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyPzogYm9vbGVhbjtcblx0aGVhZGVyPzogc3RyaW5nO1xuXHRoZWFkZXJWaXNpYmxlPzogYm9vbGVhbjtcblx0ZmlsdGVycz86IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlO1xuXHRyb3dDb3VudD86IG51bWJlcjtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRkaXNhYmxlQ29weVRvQ2xpcGJvYXJkPzogYm9vbGVhbjtcblx0ZW5hYmxlRnVsbFNjcmVlbjogYm9vbGVhbjtcblx0c2hvd1Jvd0NvdW50OiBib29sZWFuO1xuXHRpbmxpbmVDcmVhdGlvblJvd0NvdW50PzogbnVtYmVyO1xuXHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0ZW5hYmxlTWFzc0VkaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aDogYm9vbGVhbjtcblx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlzQ29tcGFjdFR5cGU/OiBib29sZWFuO1xuXHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdGlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUFkZENhcmRUb0luc2lnaHRzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0bm9kZVR5cGU/OiB7XG5cdFx0cHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W107XG5cdH07XG5cdGNyZWF0ZUVuYWJsZW1lbnQ/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0aXNOb2RlTW92YWJsZT86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZD86IEV4dGVybmFsTWV0aG9kQ29uZmlnO1xuXHRzZWxlY3Rpb25DaGFuZ2U/OiBFeHRlcm5hbE1ldGhvZENvbmZpZztcblx0YWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcz86IHN0cmluZ1tdO1xuXHRiZWZvcmVSZWJpbmRUYWJsZT86IHN0cmluZztcblx0ZXhwb3J0UmVxdWVzdFNpemU/OiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIiB8IFwiVXBsb2FkVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlIChDdXN0b20gQ29sdW1uKVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIixcblx0Q29tcHV0ZWQgPSBcIkNvbXB1dGVkXCJcbn1cbi8vIEN1c3RvbSBDb2x1bW4gZnJvbSBNYW5pZmVzdFxuZXhwb3J0IHR5cGUgTWFuaWZlc3REZWZpbmVkQ3VzdG9tQ29sdW1uID0gQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uICYge1xuXHR0eXBlPzogQ29sdW1uVHlwZS5EZWZhdWx0O1xufTtcbi8vIFNsb3QgQ29sdW1uIGZyb20gQnVpbGRpbmcgQmxvY2tcbmV4cG9ydCB0eXBlIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU6IENvbHVtblR5cGUuU2xvdDtcbn07XG4vLyBQcm9wZXJ0aWVzIGFsbCBDb2x1bW5UeXBlcyBoYXZlOlxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbVxuXHR3aWR0aD86IHN0cmluZztcblx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI/OiBib29sZWFuO1xuXHRpbXBvcnRhbmNlPzogSW1wb3J0YW5jZTtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xufTtcbi8vIFByb3BlcnRpZXMgb24gQ3VzdG9tIENvbHVtbnMgYW5kIFNsb3QgQ29sdW1uc1xuZXhwb3J0IHR5cGUgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0ZXhwb3J0U2V0dGluZ3M/OiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlO1xuXHRpc0dyb3VwYWJsZTogYm9vbGVhbjtcblx0aXNOYXZpZ2FibGU6IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH07XG5cdHByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0cmVxdWlyZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVkVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0cHJvcGVydHlLZXk6IHN0cmluZztcblx0aXNEcmFmdEluZGljYXRvcj86IGJvb2xlYW47XG5cdGlzU2l0dWF0aW9uc0luZGljYXRvcj86IGJvb2xlYW47XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zVHlwZSB8IG51bGw7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXSB8IG51bGw7XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHRjbGlwYm9hcmRTZXR0aW5ncz86IE9iamVjdCB8IG51bGw7XG5cdHJlcXVpcmVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSBNYW5pZmVzdCB0byBvdmVycmlkZSBBbm5vdGF0aW9uIGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xufTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzID0gUGFydGlhbDx7XG5cdHNjYWxlOiBudW1iZXI7XG5cdHByZWNpc2lvbjogbnVtYmVyO1xuXHRtYXhMZW5ndGg6IG51bWJlcjtcblx0bnVsbGFibGU6IGJvb2xlYW47XG5cdG1pbmltdW06IHN0cmluZztcblx0bWF4aW11bTogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U6IGJvb2xlYW47XG59PjtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0cGFyc2VBc1N0cmluZzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc6IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBib29sZWFuO1xufT47XG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVDb25maWcgPSB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cztcblx0Zm9ybWF0T3B0aW9uczogUHJvcGVydHlUeXBlRm9ybWF0T3B0aW9ucztcblx0dHlwZUluc3RhbmNlPzogdW5rbm93bjtcblx0YmFzZVR5cGU/OiBzdHJpbmc7XG5cdGNsYXNzTmFtZT86IGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGU7XG59O1xuZXhwb3J0IHR5cGUgQ29sdW1uRXhwb3J0U2V0dGluZ3MgPSBQYXJ0aWFsPHtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0d3JhcDogYm9vbGVhbjtcblx0dHlwZTogc3RyaW5nO1xuXHRpbnB1dEZvcm1hdDogc3RyaW5nO1xuXHRmb3JtYXQ6IHN0cmluZztcblx0c2NhbGU6IG51bWJlcjtcblx0ZGVsaW1pdGVyOiBib29sZWFuO1xuXHR1bml0OiBzdHJpbmc7XG5cdHVuaXRQcm9wZXJ0eTogc3RyaW5nO1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHR0aW1lem9uZVByb3BlcnR5OiBzdHJpbmc7XG5cdHV0YzogYm9vbGVhbjtcblx0ZGF0YVBvaW50VGFyZ2V0VmFsdWU6IHN0cmluZztcblx0aXNDdXJyZW5jeTogYm9vbGVhbjtcblx0cHJvcGVydHk6IHN0cmluZ1tdO1xuXHR3aWR0aDogbnVtYmVyO1xuXHRhdXRvU2NhbGU6IGJvb2xlYW47XG59Pjtcbi8vIFByb3BlcnRpZXMgZm9yIEFubm90YXRpb24gQ29sdW1uc1xuZXhwb3J0IHR5cGUgQW5ub3RhdGlvblRhYmxlQ29sdW1uID0gQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7XG5cdG5hbWU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0c2hvd0RhdGFGaWVsZHNMYWJlbD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlzS2V5PzogYm9vbGVhbjtcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0dGltZXpvbmVUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZT86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHR0ZXh0QXJyYW5nZW1lbnQ/OiB7XG5cdFx0dGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bW9kZTogRGlzcGxheU1vZGU7XG5cdH07XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdHR5cGVDb25maWc/OiBQcm9wZXJ0eVR5cGVDb25maWc7XG5cdGlzUGFydE9mTGluZUl0ZW0/OiBib29sZWFuOyAvLyB0ZW1wb3JhcnkgaW5kaWNhdG9yIHRvIG9ubHkgYWxsb3cgZmlsdGVyaW5nIG9uIG5hdmlnYXRpb24gcHJvcGVydGllcyB3aGVuIHRoZXkncmUgcGFydCBvZiBhIGxpbmUgaXRlbVxuXHRhZGRpdGlvbmFsTGFiZWxzPzogc3RyaW5nW107XG5cdGV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGFibGU/OiBib29sZWFuO1xuXHRleHRlbnNpb24/OiBFeHRlbnNpb25Gb3JBbmFseXRpY3M7XG5cdGlzTXVsdGlWYWx1ZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgRXh0ZW5zaW9uRm9yQW5hbHl0aWNzID0ge1xuXHRjdXN0b21BZ2dyZWdhdGU/OiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xufTtcbmV4cG9ydCB0eXBlIFRlY2huaWNhbENvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbiAmIHtcblx0ZXh0ZW5zaW9uPzoge1xuXHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiBib29sZWFuO1xuXHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiBib29sZWFuO1xuXHR9O1xufTtcbmV4cG9ydCB0eXBlIFZpc3VhbFNldHRpbmdzID0ge1xuXHR3aWR0aENhbGN1bGF0aW9uPzogV2lkdGhDYWxjdWxhdGlvbjtcbn07XG5leHBvcnQgdHlwZSBXaWR0aENhbGN1bGF0aW9uID0gbnVsbCB8IHtcblx0bWluV2lkdGg/OiBudW1iZXI7XG5cdG1heFdpZHRoPzogbnVtYmVyO1xuXHRkZWZhdWx0V2lkdGg/OiBudW1iZXI7XG5cdHRydW5jYXRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCBDb21wdXRlZFRhYmxlQ29sdW1uO1xuZXhwb3J0IHR5cGUgTWFuaWZlc3RDb2x1bW4gPSBDdXN0b21FbGVtZW50PEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT47XG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVEYXRhID0ge1xuXHRkZWZhdWx0QWdncmVnYXRlOiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRyZXF1ZXN0QXRMZWFzdD86IHN0cmluZ1tdO1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVCYXNpY1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZSRzZWxlY3Q6IGJvb2xlYW47XG5cdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogYm9vbGVhbjtcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBib29sZWFuO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdGhlYWRlclZpc2libGU/OiBib29sZWFuO1xuXHRjbGVhclNlbGVjdGlvbk9uRmlsdGVyOiBib29sZWFuO1xufTtcbnR5cGUgU29ydGVyVHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcbi8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIG9wZW4gaW4gbmV3IHRhYnMgc2ltdWx0YW5vdXNseVxuY29uc3Qgc2VsZWN0aW9uTGltaXRGb3JPcGVuSW5OZXdUYWIgPSAxMDtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3RhbmRhcmQsIGFubm90YXRpb24tYmFzZWQsIGFuZCBtYW5pZmVzdC1iYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uW1wic3RhbmRhcmRBY3Rpb25zXCJdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGRlbkFjdGlvbnMgPSB0YWJsZUFjdGlvbnMuaGlkZGVuVGFibGVBY3Rpb25zO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMgYXMgUmVjb3JkPFxuXHRcdFx0c3RyaW5nLFxuXHRcdFx0TWFuaWZlc3RBY3Rpb25cblx0XHQ+LFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0dHJ1ZSxcblx0XHRoaWRkZW5BY3Rpb25zXG5cdCk7XG5cdC8vIFRoZSBcIkNvcHlcIiBhY3Rpb24gYWx3YXlzIG5lZWRzIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgXCJDcmVhdGVcIiBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2VwYXJhdGUgaXRcblx0Y29uc3QgY29weUFjdGlvbnMgPSB0YWJsZUFjdGlvbnMudGFibGVBY3Rpb25zLmZpbHRlcigoYSkgPT4gYS50eXBlID09PSBBY3Rpb25UeXBlLkNvcHkpO1xuXHRjb25zdCBhbm5vdGF0aW9uQWN0aW9ucyA9IHRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnMuZmlsdGVyKChhKSA9PiBhLnR5cGUgIT09IEFjdGlvblR5cGUuQ29weSk7XG5cdC8vIENvbWJpbmUgc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyB0b2dldGhlciwgcmVzcGVjdGluZyB0aGUgZml4ZWQgb3JkZXIgb2Ygc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBhbm5vdGF0aW9uQW5kU3RhbmRhcmRBY3Rpb25zID0gW1xuXHRcdC4uLmFubm90YXRpb25BY3Rpb25zLFxuXHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGUsXG5cdFx0Li4uY29weUFjdGlvbnMsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmRlbGV0ZSxcblx0XHRzdGFuZGFyZEFjdGlvbnMubWFzc0VkaXQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmluc2lnaHRzLFxuXHRcdC8vIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIGFjdGlvbnMgYXJlIG5vdCB0ZW1wbGF0ZWQgYXMgYnV0dG9uc1xuXHRcdHN0YW5kYXJkQWN0aW9ucy5jcmVhdGlvblJvdyxcblx0XHRzdGFuZGFyZEFjdGlvbnMucGFzdGUsXG5cdFx0c3RhbmRhcmRBY3Rpb25zLmN1dFxuXHRdIGFzIEJhc2VBY3Rpb25bXTtcblx0Ly8gQW5jaG9yIGFsbCBub24tYW5jaG9yZWQgbWFuaWZlc3QgY3VzdG9tIGFjdGlvbnMvbWVudXMgYmVmb3JlIHRoZSBzdGFuZGFyZCBhY3Rpb25zXG5cdGZvciAoY29uc3QgbWFuaWZlc3RBY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucykpIHtcblx0XHRpZiAoKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGVmYXVsdCB8fCBtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpICYmICFtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5CZWZvcmVcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdC8vIEluc2VydCB0d2ljZSB0byBhbGxvdyByZWd1bGFyIG92ZXJyaWRlIGZvciBub24tc3RhbmRhcmQgYWN0aW9ucyBhbmQgcG9zaXRpb25hbCBvdmVycmlkZSBmb3Igc3RhbmRhcmQgYWN0aW9uc1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucyk7XG5cdGNvbnN0IHN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKG1hbmlmZXN0QWN0aW9uRW50cmllcy5maWx0ZXIoKFtrZXldKSA9PiBrZXkuc3RhcnRzV2l0aChcIlN0YW5kYXJkQWN0aW9uOjpcIikpKTtcblx0Y29uc3Qgbm9uU3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMobWFuaWZlc3RBY3Rpb25FbnRyaWVzLmZpbHRlcigoW2tleV0pID0+ICFzdGFuZGFyZE1hbmlmZXN0QWN0aW9uc1trZXldKSk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRsZXQgYWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFubm90YXRpb25BbmRTdGFuZGFyZEFjdGlvbnMsIG5vblN0YW5kYXJkTWFuaWZlc3RBY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXHRhY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgc3RhbmRhcmRNYW5pZmVzdEFjdGlvbnMsIHtcblx0XHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0LWJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFJldHVybnMgYWxsIHRhYmxlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIHRlbXBsYXRpbmcgb3IgcGVyc29uYWxpemF0aW9uIG9yIHRoZWlyIG9yaWdpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucyA/PyB7fSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblxuXHRjb25zdCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyBhcyBUYWJsZUNvbHVtbltdLFxuXHRcdG1hbmlmZXN0Q29sdW1ucyBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPj4sXG5cdFx0e1xuXHRcdFx0d2lkdGg6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGltcG9ydGFuY2U6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRob3Jpem9udGFsQWxpZ246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0fVxuXHQpO1xuXG5cdHJldHVybiBhZGRDb21wdXRlZENvbHVtbnModGFibGVDb2x1bW5zLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBhZ2dyZWdhdGVkUHJvcGVydHkgPSBhZ2dyZWdhdGlvbkhlbHBlci5fZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0ZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29uc3QgdGFibGVDb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmICh0YWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCByYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gZGVmaW5pdGlvbnNbdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXTtcblx0XHRcdC8vIElnbm9yZSBhZ2dyZWdhdGVzIGNvcnJlc3BvbmRpbmcgdG8gY3VycmVuY2llcyBvciB1bml0cyBvZiBtZWFzdXJlXG5cdFx0XHRpZiAocmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJiAhY3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmhhcyh0YWJsZUNvbHVtbi5uYW1lKSkge1xuXHRcdFx0XHRyZXN1bHRbdGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0cmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmb3VuZENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKGZvdW5kQ29sdW1uLm5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKFxuXHR0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlXG4pOiB2b2lkIHtcblx0aWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIpIHtcblx0XHRjb25zdCBhZ2dyZWdhdGVzRGVmaW5pdGlvbnMgPSBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlKGVudGl0eVR5cGUsIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChhZ2dyZWdhdGVzRGVmaW5pdGlvbnMpIHtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgPSB0cnVlO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZSRzZWxlY3QgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXHRcdFx0X3VwZGF0ZVByb3BlcnR5SW5mb3NXaXRoQWdncmVnYXRlc0RlZmluaXRpb25zKHRhYmxlVmlzdWFsaXphdGlvbik7XG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRlc0RlZmluaXRpb25zXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFsbG93RHJvcEJldHdlZW5Ob2RlcyA9XG5cdFx0XHQhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bYFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHt0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXVxuXHRcdFx0XHQ/LkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uO1xuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiVXBsb2FkVGFibGVcIikge1xuXHRcdGNvbnN0IHN0cmVhbVByb3BlcnR5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uTWVkaWFSZXNvdXJjZT8uU3RyZWFtPy4kdGFyZ2V0O1xuXHRcdGlmICghc3RyZWFtUHJvcGVydHkpIHtcblx0XHRcdHRocm93IFwiVUkuTWVkaWFSZXNvdXJjZSBhbm5vdGF0aW9uIHdpdGggU3RyZWFtIHByb3BlcnR5IG1pc3NpbmdcIjtcblx0XHR9XG5cblx0XHQvLyB0aGUgdXBsb2FkIGFjdGlvbiBpcyB0cmVhdGVkIGFzIHRoZSBjcmVhdGUgYWN0aW9uXG5cdFx0Y29uc3QgdXBsb2FkQWN0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIGFzIFN0YW5kYXJkQWN0aW9uO1xuXHRcdC8vIHRodXMgd2UgYWxzbyByZW1vdmUgdGhlIGNyZWF0ZSBhY3Rpb25cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWN0aW9ucyA9IHRhYmxlVmlzdWFsaXphdGlvbi5hY3Rpb25zLmZpbHRlcigoYSkgPT4gYS5rZXkgIT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpO1xuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24udXBsb2FkVGFibGUgPSB7XG5cdFx0XHRzdHJlYW06IHN0cmVhbVByb3BlcnR5Lm5hbWUsXG5cdFx0XHRmaWxlTmFtZTogKHN0cmVhbVByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/LkNvbnRlbnREaXNwb3NpdGlvbj8uRmlsZW5hbWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQpPy5wYXRoLFxuXHRcdFx0YWNjZXB0YWJsZU1lZGlhVHlwZXM6IHN0cmVhbVByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzPy50b1N0cmluZygpLFxuXHRcdFx0bWF4TGVuZ3RoOiBzdHJlYW1Qcm9wZXJ0eS5tYXhMZW5ndGgsXG5cdFx0XHR1cGxvYWRBY3Rpb246IHVwbG9hZEFjdGlvblxuXHRcdH07XG5cdH1cblxuXHQvLyBXZSBkb24ndCBrZWVwIHRhYmxlIHNlbGVjdGlvbiBhZnRlciBzZWFyY2hpbmcvZmlsdGVyaW5nLCBleGNlcHQgaW4gcmVzcG9uc2l2ZS91cGxvYWQgdGFibGVzXG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiICYmIHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVXBsb2FkVGFibGVcIikge1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jbGVhclNlbGVjdGlvbk9uRmlsdGVyID0gdHJ1ZTtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzZWxlY3QgcXVlcnkgd2l0aCB0aGUgc2VsZWN0ZWQgZmllbGRzIGZyb20gdGhlIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHBhc3NlZC5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW0gVGhlIExpbmVJdGVtIHdlIHdhbnQgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZSBvcGVyYXRpb24sIHdoaWNoIHdlJ2xsIHRha2UgdGhlIHByb3BlcnRpZXMgdG8gYWRkIHRvIHRoZSBzZWxlY3QgcXVlcnkuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb24gd2hpY2ggd2UnbGwgdGFrZSB0aGUgUmVxdWVzdEF0TGVhc3QgcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMgVGhlICdzZWxlY3QnIHF1ZXJ5IHRoYXQgaGFzIHRoZSBzZWxlY3RlZCBmaWVsZHMgZnJvbSB0aGUgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyhcblx0bGluZUl0ZW06IExpbmVJdGVtLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRvcGVyYXRpb25BdmFpbGFibGU/OiBzdHJpbmcsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbik6IHN0cmluZ1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW0pO1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0ZnVuY3Rpb24gcHVzaEZpZWxkKGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoZmllbGQgJiYgIXNlbGVjdGVkRmllbGRzLmluY2x1ZGVzKGZpZWxkKSAmJiBmaWVsZC5pbmRleE9mKFwiL1wiKSAhPT0gMCkge1xuXHRcdFx0Ly8gRG8gbm90IGFkZCBzaW5nbGV0b24gcHJvcGVydHkgKHdpdGggYWJzb2x1dGUgcGF0aCkgdG8gJHNlbGVjdFxuXHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChmaWVsZCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcHVzaEZpZWxkTGlzdChmaWVsZHM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0aWYgKGZpZWxkcz8ubGVuZ3RoKSB7XG5cdFx0XHRmaWVsZHMuZm9yRWFjaChwdXNoRmllbGQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMgPSAob3BlcmF0aW9uQXZhaWxhYmxlIHx8IFwiXCIpLnNwbGl0KFwiLFwiKTtcblx0Y29uc3QgdmFsaWRQcm9wZXJ0aWVzID0gb3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcy5maWx0ZXIoZnVuY3Rpb24gKHByb3BOYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wTmFtZSk7XG5cdH0pO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IHN0cmluZ1tdID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleSB8fCBbXSkubWFwKChzZW1hbnRpY0tleSkgPT4gc2VtYW50aWNLZXkudmFsdWUpO1xuXHRjb25zdCBjYXBhYmlsaXRpZXNBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcztcblxuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRwdXNoRmllbGRMaXN0KHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlJlcXVlc3RBdExlYXN0Py5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLnZhbHVlKSk7XG5cdH1cblx0cHVzaEZpZWxkTGlzdChnZXROYXZpZ2F0aW9uQXZhaWxhYmxlRmllbGRzRnJvbUxpbmVJdGVtKGxpbmVJdGVtLCBlbnRpdHlUeXBlKSk7XG5cdHB1c2hGaWVsZExpc3QodmFsaWRQcm9wZXJ0aWVzKTtcblx0cHVzaEZpZWxkTGlzdChzZW1hbnRpY0tleXMpO1xuXHRpZiAoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbikge1xuXHRcdHB1c2hGaWVsZCgoY2FwYWJpbGl0aWVzQW5ub3RhdGlvbi5EZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pPy5wYXRoKTtcblx0XHRwdXNoRmllbGQoKGNhcGFiaWxpdGllc0Fubm90YXRpb24uVXBkYXRlUmVzdHJpY3Rpb25zPy5VcGRhdGFibGUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPGJvb2xlYW4+KT8ucGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogVGhpcyByZXR1cm4gdGhlIHByb3BlcnR5IHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBOYXZpZ2F0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gb24gSUJOIEZpZWxkcy5cbiAqIEBwYXJhbSBsaW5lSXRlbSBUaGUgbGluZSBpdGVtIGFubm90YXRpb24uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5IFR5cGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25BdmFpbGFibGVGaWVsZHNGcm9tTGluZUl0ZW0obGluZUl0ZW06IExpbmVJdGVtLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogc3RyaW5nW10ge1xuXHRjb25zdCBzZWxlY3RlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0bGluZUl0ZW0uZm9yRWFjaChmdW5jdGlvbiAocmVjb3JkKSB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdCFyZWNvcmQuSW5saW5lICYmXG5cdFx0XHQhcmVjb3JkLkRldGVybWluaW5nICYmXG5cdFx0XHRpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhdGggPSAocmVjb3JkLk5hdmlnYXRpb25BdmFpbGFibGUgYXMgdW5rbm93biBhcyB7IHBhdGg6IHN0cmluZyB9KS5wYXRoO1xuXHRcdFx0aWYgKGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aCkpIHtcblx0XHRcdFx0c2VsZWN0ZWRGaWVsZHMucHVzaChwYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2VsZWN0ZWRGaWVsZHM7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0Y29uc3QgbmF2Q29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdGlmIChPYmplY3Qua2V5cyhuYXZDb25maWcpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRcdH1cblx0fVxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xufVxuZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcsIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdH0pO1xufVxuLyoqXG4gKiBTZXRzIHRoZSAndW5pdCcsICd0ZXh0QXJyYW5nZW1lbnQnLCAndGltZXpvbmUnIGFuZCAnZXhwb3J0c2V0dGluZ3MnIHByb3BlcnRpZXMgaW4gY29sdW1ucyB3aGVuIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgY29sdW1ucyB0byBiZSB1cGRhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbHVtbikgPT4ge1xuXHRcdGNvbnN0IHRhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3A6IFByb3BlcnR5KSA9PiBwcm9wLm5hbWUgPT09IHRhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkocHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCB0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpO1xuXHRcdFx0XHRjb25zdCB0aW1lem9uZSA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0XHRcdFx0aWYgKHVuaXRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdGNvbnN0IHVuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHVuaXRQcm9wZXJ0eS5uYW1lLCB0YWJsZUNvbHVtbnMpO1xuXHRcdFx0XHRcdHRhYmxlQ29sdW1uLnVuaXQgPSB1bml0Q29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHVuaXQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0XHRcdGlmICh1bml0KSB7XG5cdFx0XHRcdFx0XHR0YWJsZUNvbHVtbi51bml0VGV4dCA9IGAke3VuaXR9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRpbWV6b25lUHJvcGVydHkpIHtcblx0XHRcdFx0XHRjb25zdCBvVGltZXpvbmVDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRpbWV6b25lUHJvcGVydHkubmFtZSwgdGFibGVDb2x1bW5zKTtcblx0XHRcdFx0XHR0YWJsZUNvbHVtbi50aW1lem9uZSA9IG9UaW1lem9uZUNvbHVtbj8ubmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmICh0aW1lem9uZSkge1xuXHRcdFx0XHRcdHRhYmxlQ29sdW1uLnRpbWV6b25lVGV4dCA9IHRpbWV6b25lLnRvU3RyaW5nKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSksXG5cdFx0XHRcdFx0dGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IHRleHRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRleHRBbm5vdGF0aW9uLnBhdGgsIHRhYmxlQ29sdW1ucyk7XG5cdFx0XHRcdFx0aWYgKHRleHRDb2x1bW4gJiYgdGV4dENvbHVtbi5uYW1lICE9PSB0YWJsZUNvbHVtbi5uYW1lKSB7XG5cdFx0XHRcdFx0XHR0YWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogdGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdC8vIElmIHRleHQgcHJvcGVydGllcyBhcmUgdXNlZCBidXQgaGlkZGVuLCB3ZSBtdXN0IGluY2x1ZGUgdGhlbSB0byB0aGUgZXhwb3J0IGFzIHRoZXJlIGFyZSB1c2VkIGluIHRoZSBwYXN0ZVxuXHRcdFx0XHRcdFx0aWYgKCF0ZXh0Q29sdW1uLmV4cG9ydFNldHRpbmdzKSB7XG5cdFx0XHRcdFx0XHRcdHRleHRDb2x1bW4uZXhwb3J0U2V0dGluZ3MgPSB7IHR5cGU6IFwiU3RyaW5nXCIgfTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IHtcblx0aGVhZGVySW5mb1RpdGxlUGF0aDogc3RyaW5nO1xuXHRzZW1hbnRpY0tleUNvbHVtbnM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG59IHtcblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZVxuXHRcdD8ucGF0aDtcblx0Y29uc3Qgc2VtYW50aWNLZXlBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5wdXNoKG9Db2x1bW4udmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7IGhlYWRlckluZm9UaXRsZVBhdGgsIHNlbWFudGljS2V5Q29sdW1ucywgaGVhZGVySW5mb1R5cGVOYW1lIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHBhcmFtcz86IFBhcnRpYWw8e1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZTtcblx0XHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGU7XG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogYm9vbGVhbjtcblx0fT5cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHsgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsIHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIH0gPSBwYXJhbXMgPz8ge307XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbiA9IGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3QgdGFibGVBbm5vdGF0aW9uID0gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGNvbHVtbnMsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblx0Y29uc3QgdGFibGVBY3Rpb25zID0gZ2V0VGFibGVBY3Rpb25zKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uc3RhbmRhcmRBY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGUgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dCk7XG5cdGxldCBoZWFkZXIgPSB0YWJsZU1hbmlmZXN0Q29uZmlnLmhlYWRlcjtcblx0aGVhZGVyID8/PSB0YWJsZUFubm90YXRpb24udGl0bGUgPT09IFwiXCIgPyB1bmRlZmluZWQgOiB0YWJsZUFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogdGFibGVBbm5vdGF0aW9uLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyh0YWJsZUFjdGlvbnMuYWN0aW9ucyksXG5cdFx0Y29tbWFuZEFjdGlvbnM6IHRhYmxlQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBvcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0aGVhZGVySW5mb1RpdGxlOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1RpdGxlUGF0aCxcblx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5zZW1hbnRpY0tleUNvbHVtbnMsXG5cdFx0aGVhZGVySW5mb1R5cGVOYW1lOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1R5cGVOYW1lLFxuXHRcdGVuYWJsZSRzZWxlY3Q6IHRydWUsXG5cdFx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiB0cnVlLFxuXHRcdGhlYWRlcjogaGVhZGVyLFxuXHRcdGhlYWRlclZpc2libGU6IHRhYmxlTWFuaWZlc3RDb25maWcuaGVhZGVyVmlzaWJsZSxcblx0XHRyZXF1ZXN0QXRMZWFzdDogY3JlYXRlUmVxdWVzdGVkUHJvcGVydGllcyhsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQsIG9wZXJhdGlvbkF2YWlsYWJsZSwgcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24pLFxuXHRcdGNsZWFyU2VsZWN0aW9uT25GaWx0ZXI6IGZhbHNlXG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0XHRvVmlzdWFsaXphdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0JsYW5rVGFibGU/OiBib29sZWFuXG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0e30sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0W10sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLnR5cGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZy5jcmVhdGlvbk1vZGUsXG5cdFx0e31cblx0KTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBcIlwiKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSBnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uKFxuXHRcdHVuZGVmaW5lZCxcblx0XHRcIlwiLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XCJcIixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdFx0aXNCbGFua1RhYmxlID8gW10gOiBjb2x1bW5zLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzKG9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgY29udmVydGVyQ29udGV4dCksXG5cdFx0aGVhZGVySW5mb1RpdGxlOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1RpdGxlUGF0aCxcblx0XHRzZW1hbnRpY0tleXM6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5zZW1hbnRpY0tleUNvbHVtbnMsXG5cdFx0aGVhZGVySW5mb1R5cGVOYW1lOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuaGVhZGVySW5mb1R5cGVOYW1lLFxuXHRcdGVuYWJsZSRzZWxlY3Q6IHRydWUsXG5cdFx0ZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0OiB0cnVlLFxuXHRcdGhlYWRlcjogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXIsXG5cdFx0aGVhZGVyVmlzaWJsZTogdGFibGVNYW5pZmVzdENvbmZpZy5oZWFkZXJWaXNpYmxlLFxuXHRcdGNsZWFyU2VsZWN0aW9uT25GaWx0ZXI6IGZhbHNlXG5cdH07XG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRyZXR1cm4gQWN0aW9uSGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIFwidGFibGVcIiwgY29udmVydGVyQ29udGV4dCk7XG59XG4vKipcbiAqIEdldHMgdXBkYXRhYmxlIHByb3BlcnR5UGF0aCBmb3IgdGhlIGN1cnJlbnQgZW50aXR5c2V0IGlmIHZhbGlkLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB1cGRhdGFibGUgcHJvcGVydHkgZm9yIHRoZSByb3dzXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3RyaWN0aW9ucyA9IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgdXBkYXRhYmxlID0gcmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID0gIWlzQ29uc3RhbnQodXBkYXRhYmxlLmV4cHJlc3Npb24pICYmIHVwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgdXBkYXRhYmxlRXhwcmVzc2lvbiA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5VcGRhdGVSZXN0cmljdGlvbnM/LlVwZGF0YWJsZTtcblx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odXBkYXRhYmxlRXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlRXhwcmVzc2lvbi5wYXRoO1xuXHRyZXR1cm4gaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSA/ICh1cGRhdGFibGVQcm9wZXJ0eVBhdGggYXMgc3RyaW5nKSA6IFwiXCI7XG59XG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgcHJvcGVydHkgcGF0aHMgYXNzaWduZWQgdG8gdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cdGlmIChwcm9wZXJ0aWVzLnNpemUpIHtcblx0XHQvLyBTb21lIGFjdGlvbnMgaGF2ZSBhbiBvcGVyYXRpb24gYXZhaWxhYmxlIGJhc2VkIG9uIHByb3BlcnR5IC0tPiB3ZSBuZWVkIHRvIGxvYWQgdGhlIEhlYWRlckluZm8uVGl0bGUgcHJvcGVydHlcblx0XHQvLyBzbyB0aGF0IHRoZSBkaWFsb2cgb24gcGFydGlhbCBhY3Rpb25zIGlzIGRpc3BsYXllZCBwcm9wZXJseSAoQkNQIDIxODAyNzE0MjUpXG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGNvbnN0IHRpdGxlUHJvcGVydHkgPSAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGg7XG5cdFx0aWYgKHRpdGxlUHJvcGVydHkpIHtcblx0XHRcdHByb3BlcnRpZXMuYWRkKHRpdGxlUHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFVaUhpZGRlblBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChlcXVhbChnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKGRhdGFGaWVsZCwgY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgpLCBmYWxzZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIHBhdGggb2YgYSBEYXRhRmllbGQuXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0UGF0aEZyb21BY3Rpb25Bbm5vdGF0aW9uKGV4cHJlc3Npb246IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgcGF0aDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuXHRcdHBhdGggPSBleHByZXNzaW9uLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGF0aCA9IGV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59XG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBjb250ZXh0IGN1cnJlbnRseSByZWZlcmVuY2VkIGJ5IHRoaXMgYmluZGluZyBieSByZW1vdmluZyB0aGUgbGFzdCBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuICpcbiAqIEl0IGlzIHVzZWQgKHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UpLCB0byB0cmFuc2Zvcm0gYSBiaW5kaW5nIG1hZGUgZm9yIGEgTmF2UHJvcCBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxL05hdlByb3AyLFxuICogaW50byBhIGJpbmRpbmcgb24gdGhlIHByZXZpb3VzIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEhpZGRlbkV4cHJlc3Npb25BdFRhYmxlTGV2ZWwoXG5cdHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgZXhwcmVzc2lvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGV0IHBhdGggPSBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbik7XG5cdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoXCJ2aXNpYmxlXCIgaW4gc291cmNlKSB7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5WzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5LnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuLyoqXG4gKiBMb29wIHRocm91Z2ggdGhlIG1hbmlmZXN0IGFjdGlvbnMgYW5kIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogSWYgdGhlIGRhdGEgZmllbGQgaXMgYWxzbyByZWZlcmVuY2VkIGFzIGEgY3VzdG9tIGFjdGlvbi5cbiAqIElmIHRoZSB1bmRlcmx5aW5nIG1hbmlmZXN0IGFjdGlvbiBpcyBlaXRoZXIgYSBib3VuZCBhY3Rpb24gb3IgaGFzIHRoZSAnUmVxdWlyZXNDb250ZXh0JyBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZS5cbiAqXG4gKiBJZiBzbywgdGhlICdyZXF1aXJlc1NlbGVjdGlvbicgcHJvcGVydHkgaXMgZm9yY2VkIHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZElkIElkIG9mIHRoZSBEYXRhRmllbGQgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBldmFsdWF0ZWRcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgRGF0YUZpZWxkIGlzIGZvdW5kIGFtb25nIHRoZSBtYW5pZmVzdCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQoXG5cdGRhdGFGaWVsZElkOiBzdHJpbmcsXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRpZiAoYWN0aW9uS2V5ID09PSBkYXRhRmllbGRJZCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LkFjdGlvblRhcmdldD8uaXNCb3VuZCB8fFxuXHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LlJlcXVpcmVzQ29udGV4dFxuXHRcdFx0KSB7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uc1tkYXRhRmllbGRJZF0ucmVxdWlyZXNTZWxlY3Rpb24gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiBjaGVjayB0aGUgZm9sbG93aW5nOlxuICogSWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgYW5kIHJlcXVpcmVzIGEgY29udGV4dFxuICogSWYgYW4gYWN0aW9uIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIGl0IGlzIHNldCBhc2lkZSBhbmQgd2lsbCBiZSBjb25zaWRlcmVkXG4gKiB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPixcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbklkID0gZ2VuZXJhdGUoW1wiRGF0YUZpZWxkRm9yQWN0aW9uXCIsIGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nXSk7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JBY3RvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAodXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChtYW5pZmVzdEFjdGlvbklkLCBkYXRhRmllbGQsIG1hbmlmZXN0QWN0aW9ucykpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQoXG5cdFx0XHRcdFx0XHRgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjoke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH06OiR7ZGF0YUZpZWxkLkFjdGlvbn1gLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIGN1c3RvbSBhY3Rpb24gdGhhdCByZXF1aXJlcyBhIGNvbnRleHQgaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRvb2xiYXIuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRjb25zdCBjdXN0b21BY3Rpb25zID0gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5yZWR1Y2UoKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdLCBhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoIWFjdGlvbi5tZW51KSB7XG5cdFx0XHQvL3NpbXBsZSBjdXN0b20gYWN0aW9uXG5cdFx0XHRhY3Rpb25zLnB1c2goYWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZ3JvdXBlZCBhY3Rpb25zXG5cdFx0XHRhY3Rpb25zID0gWy4uLmFjdGlvbnMsIC4uLihhY3Rpb24ubWVudS5maWx0ZXIoKG1lbnVBY3Rpb24pID0+IHR5cGVvZiBtZW51QWN0aW9uICE9PSBcInN0cmluZ1wiKSBhcyBDdXN0b21BY3Rpb25bXSldO1xuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9ucztcblx0fSwgW10pO1xuXHRyZXR1cm4gISFjdXN0b21BY3Rpb25zLmZpbmQoXG5cdFx0KGFjdGlvbikgPT4gYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIChhY3Rpb24udmlzaWJsZSA9PT0gdW5kZWZpbmVkIHx8IGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIilcblx0KTtcbn1cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblx0XHRcdFx0XHRhVmlzaWJsZVBhdGhFeHByZXNzaW9ucy5wdXNoKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbj8udmlzaWJsZT8udmFsdWVPZigpKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVZpc2libGVQYXRoRXhwcmVzc2lvbnM7XG59XG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBwYXRoIGlzIHN0YXRpY2FsbHkgZGVsZXRhYmxlIG9yIHVwZGF0YWJsZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHRhYmxlIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgaXNEZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1VwZGF0YWJsZSA9IGlzUGF0aFVwZGF0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNEZWxldGFibGU6ICEoaXNDb25zdGFudChpc0RlbGV0YWJsZSkgJiYgaXNEZWxldGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpc1VwZGF0YWJsZTogIShpc0NvbnN0YW50KGlzVXBkYXRhYmxlKSAmJiBpc1VwZGF0YWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0VudGl0eVNldDogYm9vbGVhbixcblx0dGFyZ2V0Q2FwYWJpbGl0aWVzOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKSxcblx0Y3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdC8vIElmIHRoZSBzZWxlY3Rpb24gbW9kZSBpcyBmb3JjZWQgdG8gJ05vbmUnIGluIHRoZSBtYW5pZmVzdC9tYWNybyB0YWJsZSBwYXJhbWV0ZXJzLCB3ZSBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljIGFuZCBrZWVwIGl0IGFzIHNwZWNpZmllZFxuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbiB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlTXVsdGkpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkZvcmNlU2luZ2xlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuU2luZ2xlO1xuXHR9XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdLFxuXHRcdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbjxUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj4odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRbXSxcblx0XHR1bmRlZmluZWQsXG5cdFx0ZmFsc2Vcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVFeHByZXNzaW9uKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKCFzZWxlY3Rpb25Nb2RlIHx8IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuQXV0bykge1xuXHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gT3ZlcnJpZGUgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSB3aGVuIG1hc3MgZWRpdCBpcyB2aXNpYmxlXG5cdFx0c2VsZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU2luZ2xlID8gU2VsZWN0aW9uTW9kZS5TaW5nbGUgOiBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHR9XG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKClcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5TaW5nbGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIGV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSAmJiBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFibGUgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiB7IHRhYmxlQWN0aW9uczogQW5ub3RhdGlvbkFjdGlvbltdOyBoaWRkZW5UYWJsZUFjdGlvbnM6IEJhc2VBY3Rpb25bXSB9IHtcblx0Y29uc3QgdGFibGVBY3Rpb25zOiBBbm5vdGF0aW9uQWN0aW9uW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuVGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0Y29uc3QgY29weURhdGFGaWVsZCA9IGdldENvcHlBY3Rpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkSXNDb3B5QWN0aW9uKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyk7XG5cdFx0fSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXVxuXHQpO1xuXHRjb25zdCBzRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdFx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCB1bmRlZmluZWRcblx0KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gbm90KFxuXHRcdFx0ZXF1YWwoXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpXG5cdFx0KTtcblx0fTtcblx0Ly8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcblx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdC8vIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSB0YWJsZSBtYW5pZmVzdCBzZXR0aW5nIFwiY3JlYXRpb25Nb2RlXCIgaXMgXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRjb25zdCB2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgdW5kZWZpbmVkXG5cdCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0cmV0dXJuIGFuZCh2aXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGQpLCBlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCBcImludGVybmFsXCIpLCBmYWxzZSkpO1xuXHR9O1xuXHRpZiAoY29weURhdGFGaWVsZCkge1xuXHRcdGNvbnN0IHVzZUVuYWJsZWRFeHByZXNzaW9uID0gX3VzZUVuYWJsZWRFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQsIHNFbnRpdHlUeXBlKTtcblx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkNvcHksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvcHlEYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChjb3B5RGF0YUZpZWxkKSxcblx0XHRcdC8vIFVzZSBPcGVyYXRpb25BdmFpbGFibGUgaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gb25lIHNlbGVjdGVkIGl0ZW1cblx0XHRcdGVuYWJsZWQ6IHVzZUVuYWJsZWRFeHByZXNzaW9uXG5cdFx0XHRcdD8gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgY29weURhdGFGaWVsZC5BY3Rpb25UYXJnZXQsIHRydWUpXG5cdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oY29weURhdGFGaWVsZCkpLFxuXHRcdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKGNvcHlEYXRhRmllbGQpKSxcblx0XHRcdHRleHQ6IGNvcHlEYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCkgPz8gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiQ19DT01NT05fQ09QWVwiKSxcblx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH1cblx0bGluZUl0ZW1Bbm5vdGF0aW9uXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gIWRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZUFjdGlvbjogQW5ub3RhdGlvbkFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGQpKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbih2aXNpYmxlRm9yQ29udGV4dE1lbnVFeHByZXNzaW9uKGRhdGFGaWVsZCkpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChfdXNlRW5hYmxlZEV4cHJlc3Npb24oZGF0YUZpZWxkLCBzRW50aXR5VHlwZSkpIHtcblx0XHRcdFx0XHRcdFx0dGFibGVBY3Rpb24uZW5hYmxlZCA9IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQsIHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUV4cHJlc3Npb24oZGF0YUZpZWxkKSksXG5cdFx0XHRcdFx0XHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24odmlzaWJsZUZvckNvbnRleHRNZW51RXhwcmVzc2lvbihkYXRhRmllbGQpKVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnMsXG5cdFx0aGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG4vKipcbiAqIEdlbmVyYXRlIHRoZSBiaW5kaW5nRXhwcmVzc2lvbiBmb3IgdGhlIGhpZ2hsaWdodCByb3dTZXR0aW5nIHBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0gY3JpdGljYWxpdHlBbm5vdGF0aW9uIFBhdGggb3IgdmFsdWUgb2YgdGhlIGNyaXRpY2FsaXR5XG4gKiBAcGFyYW0gaXNEcmFmdFJvb3RPck5vZGUgIElzIHRoZSBjdXJyZW50IGVudGl0eVNldCBhbiBEcmFmdCByb290IG9yIGEgbm9kZVxuICogQHBhcmFtIHRhcmdldEVudGl0eVR5cGUgVGhlIHRhcmdldGVkIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb25CaW5kaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogQ3JpdGljYWxpdHkgfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290T3JOb2RlOiBib29sZWFuLFxuXHR0YXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiB7XG5cdGxldCBkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbjogTWVzc2FnZVR5cGUgfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0aWYgKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikge1xuXHRcdGlmICh0eXBlb2YgY3JpdGljYWxpdHlBbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihjcml0aWNhbGl0eUFubm90YXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVudW0gVmFsdWUgc28gd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBwYXJ0XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZShjcml0aWNhbGl0eUFubm90YXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFxuXHRcdFtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0aXNEcmFmdFJvb3RPck5vZGUgJiYgRW50aXR5Lkhhc0FjdGl2ZSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5Jc0FjdGl2ZSxcblx0XHRcdGAke2lzRHJhZnRSb290T3JOb2RlfWAsXG5cdFx0XHRwYXRoSW5Nb2RlbChcIkAkdWk1LmZlLmNvbnRleHRQYXRoXCIpXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCxcblx0XHRcdG91dGJvdW5kRGV0YWlsOiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzOiBuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0XHR9O1xuXHR9XG5cdGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdCFbQ3JlYXRpb25Nb2RlLk5ld1BhZ2UsIENyZWF0aW9uTW9kZS5FeHRlcm5hbF0uaW5jbHVkZXModGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlKVxuXHQpIHtcblx0XHQvLyBGYWxsYmFjayB0byBcIk5ld1BhZ2VcIlxuXHRcdExvZy53YXJuaW5nKFxuXHRcdFx0YENyZWF0aW9uIG1vZGUgJyR7dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlfScgY2FuIG5vdCBiZSB1c2VkIHdpdGhpbiB0aGUgTGlzdCBSZXBvcnQuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gXG5cdFx0KTtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0fSBlbHNlIGlmIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIgJiZcblx0XHQhW0NyZWF0aW9uTW9kZS5OZXdQYWdlLCBDcmVhdGlvbk1vZGUuSW5saW5lXS5pbmNsdWRlcyh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUpXG5cdCkge1xuXHRcdC8vIEZhbGxiYWNrIHRvIFwiTmV3UGFnZVwiIGluIGNhc2Ugb2YgYSBub24tc3VwcG9ydGVkIG1vZGUgZm9yIGEgVHJlZVRhYmxlXG5cdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRgQ3JlYXRpb24gbW9kZSAnJHt0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGV9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIFRyZWUgVGFibGUuIEluc3RlYWQsIHRoZSBkZWZhdWx0IG1vZGUgXCJOZXdQYWdlXCIgaXMgdXNlZC5gXG5cdFx0KTtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0fVxuXHRsZXQgbmV3QWN0aW9uO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gaW4tYXBwXG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucztcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uc0NvbW1vbiA9IHRhcmdldEFubm90YXRpb25zPy5Db21tb24gYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ29tbW9uLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LlNlc3Npb24gYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbjtcblx0XHRuZXdBY3Rpb24gPSB0YXJnZXRBbm5vdGF0aW9uc0NvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gfHwgdGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb247XG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJUaGUgY3JlYXRpb24gbW9kZSAnTmV3UGFnZScgaXMgdXNlZCBidXQgdGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UgaXMgbWlzc2luZy5cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5JbmxpbmU7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRcdGlmIChvcmlnaW5hbFRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRMb2cuaW5mbyhcIlRoZSBjcmVhdGlvbiBtb2RlIHdhcyBjaGFuZ2VkIGZyb20gJ05ld1BhZ2UnIHRvICdJbmxpbmUnIGR1ZSB0byBtaXNzaW5nIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0byB0aGUgc3ViIHBhZ2UuXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZVxuKTogUm93Q29uZmlndXJhdGlvbiB7XG5cdGxldCBwcmVzc1Byb3BlcnR5LCBvcGVuSW5OZXdUYWJQcmVzc1Byb3BlcnR5LCBuYXZpZ2F0aW9uVGFyZ2V0O1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IGNvbnN0YW50KE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGlmIChuYXZpZ2F0aW9uU2V0dGluZ3MgJiYgbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kaXNwbGF5Py50YXJnZXQgfHwgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ub3V0Ym91bmQ7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LFxuXHRcdFx0ISFNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QodGFyZ2V0RW50aXR5U2V0KSB8fCAhIU1vZGVsSGVscGVyLmdldERyYWZ0Tm9kZSh0YXJnZXRFbnRpdHlTZXQpLFxuXHRcdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHRcdCk7XG5cdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPSBgLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCcke25hdmlnYXRpb25UYXJnZXR9JywgXFwkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSlgO1xuXHRcdFx0b3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSA9IGAub25PcGVuSW5OZXdUYWJOYXZpZ2F0ZU91dEJvdW5kKCcke25hdmlnYXRpb25UYXJnZXR9JywgJXtpbnRlcm5hbD5jb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzfSwgXCJcIiwgJHtzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYn0pYDtcblx0XHR9XG5cdFx0aWYgKCFuYXZpZ2F0aW9uVGFyZ2V0ICYmIG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/LnJvdXRlKSB7XG5cdFx0XHRjb25zdCBlZGl0YWJsZSA9XG5cdFx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8IE1vZGVsSGVscGVyLmdldERyYWZ0Tm9kZSh0YXJnZXRFbnRpdHlTZXQpXG5cdFx0XHRcdFx0PyBcIiEkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fS5nZXRQcm9wZXJ0eSgnSXNBY3RpdmVFbnRpdHknKVwiXG5cdFx0XHRcdFx0OiBcInVuZGVmaW5lZFwiO1xuXHRcdFx0Y29uc3QgcmVjcmVhdGVDb250ZXh0ID0gdGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiID8gXCIsIHJlY3JlYXRlQ29udGV4dDogdHJ1ZVwiIDogXCJcIjtcblx0XHRcdHByZXNzUHJvcGVydHkgPSBgQVBJLm9uVGFibGVSb3dQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCBcXCR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICcke3RhcmdldFBhdGh9JywgZWRpdGFibGU6ICR7ZWRpdGFibGV9ICR7cmVjcmVhdGVDb250ZXh0fSB9KWA7IC8vTmVlZCB0byBhY2Nlc3MgdG8gRHJhZnRSb290IGFuZCBEcmFmdE5vZGUgISEhISEhIVxuXHRcdFx0b3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSA9IGBBUEkub25PcGVuSW5OZXdUYWJQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAle2ludGVybmFsPmNvbnRleHRtZW51L3NlbGVjdGVkQ29udGV4dHN9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICcke3RhcmdldFBhdGh9JywgbmF2TW9kZTogJ29wZW5Jbk5ld1RhYicgfSwgJHtzZWxlY3Rpb25MaW1pdEZvck9wZW5Jbk5ld1RhYn0pYDtcblx0XHR9XG5cdH1cblx0Y29uc3Qgcm93TmF2aWdhdGVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtwYXRoSW5Nb2RlbChcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogcHJlc3NQcm9wZXJ0eSxcblx0XHRvcGVuSW5OZXdUYWJQcmVzczogb3BlbkluTmV3VGFiUHJlc3NQcm9wZXJ0eSxcblx0XHRhY3Rpb246IHByZXNzUHJvcGVydHkgPyBcIk5hdmlnYXRpb25cIiA6IHVuZGVmaW5lZCxcblx0XHRyb3dIaWdobGlnaHRpbmc6IGNvbXBpbGVFeHByZXNzaW9uKGNyaXRpY2FsaXR5UHJvcGVydHkpLFxuXHRcdHJvd05hdmlnYXRlZDogY29tcGlsZUV4cHJlc3Npb24ocm93TmF2aWdhdGVkRXhwcmVzc2lvbiksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KFVJLklzSW5hY3RpdmUpKVxuXHR9O1xufTtcbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSBkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwIFRoZSBtYXAgb2YgcHJvcGVydGllcyByZWZlcmVuY2VkIGFzIGRlc2NyaXB0aW9uIG9uIGEgdGV4dCBhcnJhbmdlbWVudCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHJlc3RyaWN0aW9uc09uUHJvcGVydGllcyBUaGUgZXhpc3RpbmcgcmVzdHJpY3Rpb25zIG9uIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIFRoZSBjb2x1bW4gZnJvbSB0aGUgZW50aXR5VHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlLFxuXHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwOiBSZWNvcmQ8c3RyaW5nLCBEaXNwbGF5TW9kZT4sXG5cdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcz86IFJlc3RyaWN0aW9uc09uUHJvcGVydGllc1xuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRpZiAoYW5ub3RhdGlvbkNvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdGFubm90YXRpb25Db2x1bW5zID0gW107XG5cdH1cblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IGFubm90YXRpb25Db2x1bW5zO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdFx0Y29uc3QgZXhpc3RzID0gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cdFx0Ly8gaWYgdGFyZ2V0IHR5cGUgZXhpc3RzLCBpdCBpcyBhIGNvbXBsZXggcHJvcGVydHkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cdFx0aWYgKCFwcm9wZXJ0eS50YXJnZXRUeXBlICYmICFleGlzdHMpIHtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRhYmxlVHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHQvLyBJbmNsdWRlIHRoZSB0ZXh0IHByb3BlcnRpZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGV4dCBhcnJhbmdlbWVudFxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdFx0XHRhZGRQcm9wZXJ0eVRvRGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcChkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwLCByZWxhdGVkUHJvcGVydGllc0luZm8sIG5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwLFxuXHRcdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXMsXG5cdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllc0luZm9cblx0XHRcdCk7XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5ncy5kYXRhUG9pbnRUYXJnZXRWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW25hbWVdLmFubm90YXRpb25Qcm9wZXJ0eTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgUHJvcGVydHkgTGFiZWwgd2hlbiBpdCdzIHJlZmVyZW5jZWQgb25seSBvbmNlIGluIGEgY29sdW1uLCBuZXcgbGFiZWwgd2lsbCBiZSB0aGUgbGFiZWwgb2YgdGhlIGNvbHVtblxuXHRcdFx0dXBkYXRlUHJvcGVydHlMYWJlbChhbm5vdGF0aW9uQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW5JbmZvKTtcblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eU5hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIGEgcHJvcGVydHkgaGFzIGRlZmluZWQgYSAjVGV4dE9ubHkgdGV4dCBhcnJhbmdlbWVudCB0aGF0IHBvaW50cyB0byBhIHRleHQgcHJvcGVydHkgKGFuZCBub3QgYSAnaGFyZCBjb2RlZCB0ZXh0JykgZG9uJ3Qgb25seSBjcmVhdGUgdGhlIGNvbXBsZXggcHJvcGVydHkgd2l0aCB0aGUgdGV4dCBwcm9wZXJ0eSBhcyBhIGNoaWxkIHByb3BlcnR5LFxuXHRcdC8vIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0eSBpdHNlbGYgYXMgaXQgY2FuIGJlIHVzZWQgYXMgd2l0aGluIHRoZSBzb3J0Q29uZGl0aW9ucyBvciBvbiBjdXN0b20gY29sdW1ucy5cblx0XHQvLyBUaGlzIHN0ZXAgbXVzdCBiZSB2YWxpZCBhbHNvIGZyb20gdGhlIGNvbHVtbnMgYWRkZWQgdmlhIExpbmVJdGVtcyBvciBmcm9tIGEgY29sdW1uIGF2YWlsYWJsZSBvbiB0aGUgcDEzbi5cblx0XHRpZiAoZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcz8ubm9uU29ydGFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkubmFtZSk7XG5cdFx0XHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQpKSB7XG5cdFx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwLFxuXHRcdFx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0dGFibGVDcmVhdGlvbk1vZGVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHR0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAsXG5cdFx0dGFibGVDcmVhdGlvbk1vZGUsXG5cdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzXG5cdCk7XG5cdHJldHVybiB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcbn07XG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgY3JlYXRlZFxuICogQHBhcmFtIGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB1c2VEYXRhRmllbGRQcmVmaXggU2hvdWxkIGJlIHByZWZpeGVkIHdpdGggXCJEYXRhRmllbGQ6OlwiLCBlbHNlIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBcIlByb3BlcnR5OjpcIlxuICogQHBhcmFtIGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCBUaGUgbWFwIG9mIHByb3BlcnRpZXMgcmVmZXJlbmNlZCBhcyBkZXNjcmlwdGlvbiBvbiBhIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHJlc3RyaWN0aW9uc09uUHJvcGVydGllcyBUaGUgZXhpc3RpbmcgcmVzdHJpY3Rpb25zIG9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSByZWxhdGVkUHJvcGVydGllc0luZm8gVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIgZm9yIHRoZSBjb2x1bW5cbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIGNvbHVtbiBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0dXNlRGF0YUZpZWxkUHJlZml4OiBib29sZWFuLFxuXHRhdmFpbGFibGVGb3JBZGFwdGF0aW9uOiBib29sZWFuLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcDogUmVjb3JkPHN0cmluZywgRGlzcGxheU1vZGU+LFxuXHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXM/OiBSZXN0cmljdGlvbnNPblByb3BlcnRpZXMsXG5cdHRhYmxlQ3JlYXRpb25Nb2RlPzogQ3JlYXRpb25Nb2RlLFxuXHRyZWxhdGVkUHJvcGVydGllc0luZm8/OiBDb21wbGV4UHJvcGVydHlJbmZvXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4ge1xuXHRjb25zdCBuYW1lID0gdXNlRGF0YUZpZWxkUHJlZml4ID8gcmVsYXRpdmVQYXRoIDogYFByb3BlcnR5Ojoke3JlbGF0aXZlUGF0aH1gO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihwcm9wZXJ0eSk7XG5cdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJvcGVydHkubmFtZSA/IF9zbGljZUF0U2xhc2gocHJvcGVydHkubmFtZSwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHByb3BlcnR5Lm5hbWU7XG5cdGNvbnN0IGxhYmVsID0gZ2V0TGFiZWwocHJvcGVydHksIGlzR3JvdXApO1xuXHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUocHJvcGVydHkpO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBkYXRhVHlwZSk7XG5cdGNvbnN0IGlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiA9IGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXBbcmVsYXRpdmVQYXRoXSA9PT0gXCJEZXNjcmlwdGlvblwiO1xuXHRjb25zdCBzb3J0YWJsZSA9XG5cdFx0KCFpc0hpZGRlbiB8fCBpc0FQcm9wZXJ0eUZyb21UZXh0T25seUFubm90YXRpb24pICYmICFyZXN0cmljdGlvbnNPblByb3BlcnRpZXM/Lm5vblNvcnRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBmaWx0ZXJhYmxlID0gIWlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiAmJiAhcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzPy5ub25GaWx0ZXJhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCB0eXBlQ29uZmlnID0ge1xuXHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRmb3JtYXRPcHRpb25zOiBwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogcHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdH07XG5cdGxldCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4ocHJvcGVydHkpKSB7XG5cdFx0ZXhwb3J0U2V0dGluZ3MgPSBjcmVhdGVDb2x1bW5FeHBvcnRTZXR0aW5ncyhwcm9wZXJ0eSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblx0fVxuXHRjb25zdCBhdmFpbGFiaWxpdHk6IEF2YWlsYWJpbGl0eVR5cGUgPVxuXHRcdCFhdmFpbGFibGVGb3JBZGFwdGF0aW9uIHx8IGlzSGlkZGVuIHx8IGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXBbcmVsYXRpdmVQYXRoXSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIjtcblx0Y29uc3QgY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IF9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMocmVsYXRpdmVQYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0a2V5OiBrZXksXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBsYWJlbCxcblx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gZ2V0TGFiZWwocHJvcGVydHkpIDogdW5kZWZpbmVkLFxuXHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogdW5kZWZpbmVkLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRhdmFpbGFiaWxpdHk6IGF2YWlsYWJpbGl0eSxcblx0XHRuYW1lOiBuYW1lLFxuXHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdHNvcnRhYmxlOiBzb3J0YWJsZSxcblx0XHRmaWx0ZXJhYmxlOiBmaWx0ZXJhYmxlLFxuXHRcdGlzR3JvdXBhYmxlOiBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpID8gISFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSA6IHNvcnRhYmxlLFxuXHRcdGlzS2V5OiBwcm9wZXJ0eS5pc0tleSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcgYXMgUHJvcGVydHlUeXBlQ29uZmlnLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UoY29udmVydGVyQ29udGV4dCwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0KSxcblx0XHRyZXF1aXJlZDogaXNSZXF1aXJlZENvbHVtbihjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSwgdGFibGVDcmVhdGlvbk1vZGUpLFxuXHRcdGFkZGl0aW9uYWxMYWJlbHM6IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsc1xuXHR9O1xuXHRfYWRkVG9vbFRpcChwcm9wZXJ0eSwgY29sdW1uKTtcblx0X3NldEV4cG9ydFNldHRpbmdzRm9yRGF0YVBvaW50KHByb3BlcnR5LCBjb2x1bW4pO1xuXHRyZXR1cm4gY29sdW1uO1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHBvcnQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gY29sdW1uLlxuICpcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGdpdmVuIGNvbHVtbiBmcm9tIGEgbGluZSBpdGVtIGFzIGEgZGF0YSBmaWVsZCBvciBhIHByb3BlcnR5IGZyb20gdGhlIGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXNJbmZvIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgbGlua2VkIHRvIHRoZSBjb2x1bW4gKG5hbWVkIGFsc28gY29tcGxleCBwcm9wZXJ0eSlcbiAqIEByZXR1cm5zIFRoZSBleHBvcnQgc2V0dGluZ3MgaW4gYSB0aGUgZ2l2ZW4gY29sdW1uXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbHVtbkV4cG9ydFNldHRpbmdzID0gZnVuY3Rpb24gKFxuXHRjb2x1bW46IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0cmVsYXRlZFByb3BlcnRpZXNJbmZvPzogQ29tcGxleFByb3BlcnR5SW5mb1xuKTogQ29sdW1uRXhwb3J0U2V0dGluZ3Mge1xuXHRsZXQgdW5pdFByb3BlcnR5LCB0aW1lem9uZVByb3BlcnR5LCB1bml0VGV4dCwgdGltZXpvbmVUZXh0LCB1dGMsIGlzQVRpbWV6b25lLCBjdXJyZW5jeVByb3BlcnR5LCBzY2FsZTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXMgPSByZWxhdGVkUHJvcGVydGllc0luZm8gPyBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcykgOiBbXTtcblx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyAmJiByZWxhdGVkUHJvcGVydHlOYW1lcz8ubGVuZ3RoID09PSAxKSB7XG5cdFx0Ly8gQ3JlYXRlIHRoZSBleHBvcnQgc2V0dGluZ3Mgb2YgYSBjb2x1bW4gYmFzZWQgb24gdGhlIHJlbGF0ZWQgKGNoaWxkKSBwcm9wZXJ0eSBpbiBjYXNlIHRoZXJlIGlzIG9ubHkgb25lLlxuXHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3ZSBoYXZlIGEgdGV4dCBvbmx5IGFubm90YXRpb24gdG8gY29tcHV0ZSB0aGUgZXhwb3J0IHNldHRpbmdzIGZyb20gdGhlIHRleHQgaW5zdGVhZCBvZiB0aGUgdmFsdWVcblx0XHRjb2x1bW4gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tyZWxhdGVkUHJvcGVydHlOYW1lc1swXV0uYW5ub3RhdGlvblByb3BlcnR5O1xuXHR9XG5cdGNvbnN0IGRhdGFUeXBlID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUoY29sdW1uKTtcblx0aWYgKGlzUHJvcGVydHkoY29sdW1uKSkge1xuXHRcdHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkoY29sdW1uKTtcblx0XHRjdXJyZW5jeVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkoY29sdW1uKTtcblx0XHR0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkoY29sdW1uKTtcblx0XHR1bml0VGV4dCA9IGdldFN0YXRpY1VuaXRPckN1cnJlbmN5KGNvbHVtbik7XG5cdFx0dGltZXpvbmVUZXh0ID0gZ2V0U3RhdGljVGltZXpvbmUoY29sdW1uKTtcblx0XHRpc0FUaW1lem9uZSA9IGlzVGltZXpvbmUoY29sdW1uKTtcblx0XHRzY2FsZSA9IGNvbHVtbi5zY2FsZTtcblx0fVxuXHR1bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzPy51bml0UHJvcGVydHkgPz8gdW5pdFByb3BlcnR5Py5uYW1lID8/IGN1cnJlbmN5UHJvcGVydHk/Lm5hbWU7XG5cdHRpbWV6b25lUHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzPy50aW1lem9uZVByb3BlcnR5ID8/IHRpbWV6b25lUHJvcGVydHk/Lm5hbWU7XG5cdHNjYWxlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncz8uc2NhbGUgPz8gc2NhbGU7XG5cdGNvbnN0IGV4cG9ydFR5cGUgPSBnZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgaXNBVGltZXpvbmUsICEhY3VycmVuY3lQcm9wZXJ0eSwgcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncyk7XG5cdGlmICh0aW1lem9uZVByb3BlcnR5IHx8IChleHBvcnRUeXBlID09PSBcIkRhdGVUaW1lXCIgJiYgIXRpbWV6b25lVGV4dCkpIHtcblx0XHR1dGMgPSBmYWxzZTtcblx0fVxuXHRjb25zdCBleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0dHlwZTogZXhwb3J0VHlwZSxcblx0XHRpbnB1dEZvcm1hdDogZ2V0RGF0ZUlucHV0Rm9ybWF0KGRhdGFUeXBlKSxcblx0XHRkZWxpbWl0ZXI6IGdldERlbGltaXRlcihkYXRhVHlwZSksXG5cdFx0c2NhbGU6IHNjYWxlLFxuXHRcdHVuaXRQcm9wZXJ0eTogdW5pdFByb3BlcnR5LFxuXHRcdHVuaXQ6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbz8uZXhwb3J0U2V0dGluZ3MudW5pdCA/PyB1bml0VGV4dCxcblx0XHR0aW1lem9uZVByb3BlcnR5OiB0aW1lem9uZVByb3BlcnR5LFxuXHRcdHRpbWV6b25lOiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLnRpbWV6b25lID8/IHRpbWV6b25lVGV4dD8udG9TdHJpbmcoKSxcblx0XHR0ZW1wbGF0ZTogcmVsYXRlZFByb3BlcnRpZXNJbmZvPy5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSxcblx0XHQvL29ubHkgaW4gY2FzZSBvZiBjb21wbGV4IHByb3BlcnRpZXMsIHdyYXAgdGhlIGNlbGwgY29udGVudFx0b24gdGhlIGV4Y2VsIGV4cG9ydGVkIGZpbGVcblx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8/LmV4cG9ydFNldHRpbmdzLndyYXAsXG5cdFx0dXRjOiB1dGNcblx0fTtcblx0aWYgKGV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSB8fCBleHBvcnRTZXR0aW5ncy51bml0KSB7XG5cdFx0ZXhwb3J0U2V0dGluZ3MuYXV0b1NjYWxlID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gcmVtb3ZlVW5kZWZpbmVkRnJvbUV4cG9ydFNldHRpbmdzKGV4cG9ydFNldHRpbmdzKTtcbn07XG4vKipcbiAqIEdldHMgdGhlIGV4cG9ydCBmb3JtYXQgdGVtcGxhdGUgZm9yIGNvbHVtbnMgd2l0aCBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gZGF0YVR5cGUgVGhlIGRhdGEgdHlwZSBvZiB0aGUgY29sdW1uXG4gKiBAcmV0dXJucyBUaGUgaW5wdXRGb3JtYXRcbiAqL1xuY29uc3QgZ2V0RGF0ZUlucHV0Rm9ybWF0ID0gZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGRhdGFUeXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIEdldHMgdGhlIGRlbGltaXRlciBpbiBudW1lcmljIGNvbHVtbnMuXG4gKiBUaGUgZGVsaW1pdGVyIGlzIHVzZWQgdG8gZGlzcGxheSB0aG91c2FuZHMgc2VwYXJhdG9yIGluIG51bWVyaWMgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gZGF0YVR5cGUgVGhlIGRhdGEgdHlwZSBvZiB0aGUgY29sdW1uXG4gKiBAcmV0dXJucyBUcnVlIHRvIGRpc3BsYXkgdGhvdXNhbmRzIHNlcGFyYXRvciBpbiBudW1lcmljIGNvbHVtbnNcbiAqL1xuY29uc3QgZ2V0RGVsaW1pdGVyID0gZnVuY3Rpb24gKGRhdGFUeXBlPzogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBkYXRhVHlwZSA9PT0gXCJFZG0uSW50NjRcIiA/IHRydWUgOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHVuZGVmaW5lZCB2YWx1ZXMgZnJvbSB0aGUgZXhwb3J0IHNldHRpbmdzIG9iamVjdCBvZiBhIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGV4cG9ydCBzZXR0aW5ncyBjb25maWd1cmF0aW9ucyBmb3IgYSBjb2x1bW5cbiAqIEByZXR1cm5zIFRoZSBleHBvcnQgc2V0dGluZ3MgY29uZmlndXJhdGlvbnMgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzXG4gKi9cbmNvbnN0IHJlbW92ZVVuZGVmaW5lZEZyb21FeHBvcnRTZXR0aW5ncyA9IGZ1bmN0aW9uIChleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MpOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB7XG5cdC8vUmVtb3ZlIHVuZGVmaW5lZCBzZXR0aW5ncyBmcm9tIGV4cG9ydFNldHRpbmcgb2JqZWN0XG5cdGZvciAoY29uc3Qgc2V0dGluZyBpbiBleHBvcnRTZXR0aW5ncykge1xuXHRcdGlmIChleHBvcnRTZXR0aW5nc1tzZXR0aW5nIGFzIGtleW9mIENvbHVtbkV4cG9ydFNldHRpbmdzXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkZWxldGUgZXhwb3J0U2V0dGluZ3Nbc2V0dGluZyBhcyBrZXlvZiBDb2x1bW5FeHBvcnRTZXR0aW5nc107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBleHBvcnRTZXR0aW5ncztcbn07XG4vKipcbiAqIFVwZGF0ZSBwcm9wZXJ0eSBsYWJlbCBpbiBjYXNlIGl0J3Mgb25seSByZWZlcmVuY2VkIGluIG9uZSBjb2x1bW4uIFRoZSBsYWJlbCBvZiB0aGUgY29sdW1uIG11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBwcm9wZXJ0eSBsYWJlbC5cbiAqIFRoaXMgdXBkYXRlIGFsc28gaXMgYXBwbGllZCBmb3IgdGhlIHRvb2x0aXAgYXMgaXQgaXMgYmFzZWQgb24gdGhlIGNvbHVtbidzIGxhYmVsLlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHlMYWJlbChcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG4pOiB2b2lkIHtcblx0Y29uc3QgbGlua2VkQW5ub3RhdGlvbkNvbHVtbnMgPSBhbm5vdGF0aW9uQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoKSk7XG5cdGlmIChcblx0XHRsaW5rZWRBbm5vdGF0aW9uQ29sdW1ucz8ubGVuZ3RoID09PSAxICYmXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2NvbHVtbkluZm8ucmVsYXRpdmVQYXRoXSAmJlxuXHRcdGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMVxuXHQpIHtcblx0XHRjb2x1bW5JbmZvLmxhYmVsID0gbGlua2VkQW5ub3RhdGlvbkNvbHVtbnNbMF0ubGFiZWw7XG5cdFx0Y29sdW1uSW5mby50b29sdGlwID0gbGlua2VkQW5ub3RhdGlvbkNvbHVtbnNbMF0udG9vbHRpcDtcblx0fVxufVxuLyoqXG4gKiBSZXR1cm5zIEJvb2xlYW4gdHJ1ZSBmb3IgZXhwb3J0YWJsZSBjb2x1bW5zLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBkYXRhRmllbGQgb3IgcHJvcGVydHkgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBUcnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbiwgZmFsc2UgZm9yIG5vbiBleHBvcnRhYmxlIGNvbHVtblxuICovXG5mdW5jdGlvbiBfaXNFeHBvcnRhYmxlQ29sdW1uKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGxldCBwcm9wZXJ0eVR5cGUsIHByb3BlcnR5O1xuXHRjb25zdCBkYXRhRmllbGREZWZhdWx0UHJvcGVydHkgPSAoc291cmNlIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSkge1xuXHRcdGlmIChpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihzb3VyY2UpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHByb3BlcnR5VHlwZSA9IGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eT8uJFR5cGU7XG5cdH0gZWxzZSBpZiAoaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oc291cmNlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRwcm9wZXJ0eSA9IHNvdXJjZTtcblx0XHRwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS4kVHlwZTtcblx0XHRpZiAocHJvcGVydHlUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChwcm9wZXJ0eSBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHQvL0ZvciBDaGFydFxuXHRcdFx0cHJvcGVydHlUeXBlID0gKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGU7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHlUeXBlICE9PSB1bmRlZmluZWQgJiYgIVVJQW5ub3RhdGlvblR5cGVzLkNoYXJ0RGVmaW5pdGlvblR5cGUuaW5jbHVkZXMocHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5NZWRpYVR5cGU/LnRlcm0gPT09IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVkaWFUeXBlXCIgJiZcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uaXNVUkwgIT09IHRydWVcblx0XHQpIHtcblx0XHRcdC8vRm9yIFN0cmVhbVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlUeXBlXG5cdFx0PyAhW1xuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0XHQgIF0uaW5jbHVkZXMocHJvcGVydHlUeXBlKVxuXHRcdDogdHJ1ZTtcbn1cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUcnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0cmV0dXJuICEhZGF0YUZpZWxkLklubGluZTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHRoYXQgaXMgZXZhbHVhdGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgX2dldFZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcz5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IFVJLklzRXhwYW5kZWQgOiovIGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IC8qZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDoqLyBjb25zdGFudChmYWxzZSk7XG5cdC8vIEEgZGF0YSBmaWVsZCBpcyB2aXNpYmxlIGlmOlxuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgb3JpZ2luYWwgYW5ub3RhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIHRhcmdldCBwcm9wZXJ0eSBkb2VzIG5vdCBldmFsdWF0ZSB0byAndHJ1ZSdcblx0Ly8gLSBpbiBjYXNlIG9mIEFuYWx5dGljcyBpdCdzIG5vdCB2aXNpYmxlIGZvciBhbiBleHBhbmRlZCBHcm91cEhlYWRlclxuXHRyZXR1cm4gYW5kKFxuXHRcdC4uLltcblx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0ISFwcm9wZXJ0eVZhbHVlLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlICYmIG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHlWYWx1ZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KSxcblx0XHRcdG9yKG5vdChpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkKSwgaXNBbmFseXRpY2FsTGVhZilcblx0XHRdXG5cdCk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqL1xuY29uc3QgX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IGZ1bmN0aW9uIChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRpZiAoZGF0YUZpZWxkR3JvdXA/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGRHcm91cC5hbm5vdGF0aW9ucy5VSS5IaWRkZW4pLCB0cnVlKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcykgPT4ge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMucHVzaChcblx0XHRcdFx0XHRfZ2V0VmlzaWJsZUV4cHJlc3Npb24oeyB0YXJnZXRPYmplY3Q6IGlubmVyRGF0YUZpZWxkIH0gYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxcblx0XHRcdFx0XHRcdERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXNcblx0XHRcdFx0XHQ+KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKG9yKC4uLmZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcbi8qKlxuICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBwcm9wZXJ0eSBhbmQgZGF0YUZpZWxkLlxuICpcbiAqIEBwYXJhbSBbcHJvcGVydHldIFByb3BlcnR5LCBEYXRhRmllbGQgb3IgTmF2aWdhdGlvbiBQcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGlzR3JvdXBcbiAqIEByZXR1cm5zIExhYmVsIG9mIHRoZSBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqL1xuY29uc3QgZ2V0TGFiZWwgPSBmdW5jdGlvbiAocHJvcGVydHk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNHcm91cCA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpIHx8IGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERlZmF1bHQgPSAocHJvcGVydHkgYXMgUHJvcGVydHkpLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRpZiAoZGF0YUZpZWxkRGVmYXVsdCAmJiAhZGF0YUZpZWxkRGVmYXVsdC5xdWFsaWZpZXIgJiYgZGF0YUZpZWxkRGVmYXVsdC5MYWJlbCkge1xuXHRcdFx0cmV0dXJuIGRhdGFGaWVsZERlZmF1bHQuTGFiZWw/LnRvU3RyaW5nKCk7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IHByb3BlcnR5Lm5hbWU7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhwcm9wZXJ0eSkpIHtcblx0XHRpZiAoISFpc0dyb3VwICYmIHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHk/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJvcGVydHk/LkxhYmVsPy50b1N0cmluZygpID8/XG5cdFx0XHRjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCwgW10sIHByb3BlcnR5LlZhbHVlPy4kdGFyZ2V0Py5uYW1lKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0cHJvcGVydHkuTGFiZWw/LnRvU3RyaW5nKCkgPz9cblx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSlcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBwcm9wZXJ0eS5MYWJlbD8udG9TdHJpbmcoKTtcblx0fVxufTtcbmNvbnN0IF9nZXRUb29sdGlwID0gZnVuY3Rpb24gKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzb3VyY2UpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHNvdXJjZSkpIHtcblx0XHRyZXR1cm4gc291cmNlLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5RdWlja0luZm9cblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNvdXJjZS5WYWx1ZS4kdGFyZ2V0LmFubm90YXRpb25zLkNvbW1vbi5RdWlja0luZm8pKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoc291cmNlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgZGF0YXBvaW50VGFyZ2V0ID0gc291cmNlLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cdFx0cmV0dXJuIGRhdGFwb2ludFRhcmdldD8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mb1xuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YXBvaW50VGFyZ2V0LlZhbHVlLiR0YXJnZXQuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mbykpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJvd1N0YXR1c1Zpc2liaWxpdHkoY29sTmFtZTogc3RyaW5nLCBpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwPzogYm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0cGF0aEluTW9kZWwoYHNlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3JgLCBcImludGVybmFsXCIpLFxuXHRcdFx0cGF0aEluTW9kZWwoYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpLFxuXHRcdFx0Y29sTmFtZSxcblx0XHRcdGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXBcblx0XHRdLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5nZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyXG5cdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIGVhY2ggaWRlbnRpZmllZCBwcm9wZXJ0eSBjb25zdW1lZCBieSBhIExpbmVJdGVtLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEBwYXJhbSBkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwIFRoZSBtYXAgb2YgcHJvcGVydGllcyByZWZlcmVuY2VkIGFzIHRleHQgb24gYSB0ZXh0IGFycmFuZ2VtZW50IGFubm90YXRpb24uXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIFRoZSBleGlzdGluZyByZXN0cmljdGlvbnMgb24gcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZC5cbiAqL1xuY29uc3QgX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZXhpc3RpbmdDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwOiBSZWNvcmQ8c3RyaW5nLCBEaXNwbGF5TW9kZT4sXG5cdHRhYmxlQ3JlYXRpb25Nb2RlPzogQ3JlYXRpb25Nb2RlLFxuXHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXM/OiBSZXN0cmljdGlvbnNPblByb3BlcnRpZXNcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgcmVsYXRlZENvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdE9iamVjdC5rZXlzKGNvbHVtbnNUb0JlQ3JlYXRlZCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gY29sdW1uc1RvQmVDcmVhdGVkW25hbWVdLFxuXHRcdFx0YW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgobmFtZSksXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIHRoZSByZWxhdGVkIGNvbHVtbiBhbHJlYWR5IGV4aXN0cy5cblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSk7XG5cdFx0aWYgKHJlbGF0ZWRDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2FzZSAxOiBLZXkgY29udGFpbnMgRGF0YUZpZWxkIHByZWZpeCB0byBlbnN1cmUgYWxsIHByb3BlcnR5IGNvbHVtbnMgaGF2ZSB0aGUgc2FtZSBrZXkgZm9ybWF0LlxuXHRcdFx0Ly8gTmV3IGNyZWF0ZWQgcHJvcGVydHkgY29sdW1uIGlzIHNldCB0byBoaWRkZW4uXG5cdFx0XHRjb25zdCBjb2x1bW4gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcCxcblx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHRcdFx0KTtcblx0XHRcdGNvbXB1dGVIaWRkZW5PblJlbGF0ZWRDb2x1bW5zKGV4aXN0aW5nQ29sdW1ucywgbmFtZSwgY29sdW1uKTtcblx0XHRcdHVwZGF0ZVByb3BlcnR5TGFiZWwoZXhpc3RpbmdDb2x1bW5zLCBjb2x1bW5zVG9CZUNyZWF0ZWQsIGNvbHVtbik7XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fSBlbHNlIGlmIChyZWxhdGVkQ29sdW1uLmFubm90YXRpb25QYXRoICE9PSBhbm5vdGF0aW9uUGF0aCB8fCByZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdC8vIENhc2UgMjogVGhlIGV4aXN0aW5nIGNvbHVtbiBwb2ludHMgdG8gYSBMaW5lSXRlbSAob3IpXG5cdFx0XHQvLyBDYXNlIDM6IFRoaXMgaXMgYSBzZWxmIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvbHVtblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IGBQcm9wZXJ0eTo6JHtuYW1lfWA7XG5cdFx0XHQvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZWxhdGVkIHByb3BlcnR5IGNvbHVtbiBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBpdGVyYXRpb24uXG5cdFx0XHRpZiAoIWV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSkge1xuXHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgcHJvcGVydHkgY29sdW1uIHdpdGggJ1Byb3BlcnR5OjonIHByZWZpeCxcblx0XHRcdFx0Ly8gU2V0IGl0IHRvIGhpZGRlbiBhcyBpdCBpcyBvbmx5IGNvbnN1bWVkIGJ5IENvbXBsZXggcHJvcGVydHkgaW5mb3MuXG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAsXG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdHRhYmxlQ3JlYXRpb25Nb2RlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbXB1dGVIaWRkZW5PblJlbGF0ZWRDb2x1bW5zKGV4aXN0aW5nQ29sdW1ucywgbmFtZSwgY29sdW1uKTtcblx0XHRcdFx0dXBkYXRlUHJvcGVydHlMYWJlbChleGlzdGluZ0NvbHVtbnMsIGNvbHVtbnNUb0JlQ3JlYXRlZCwgY29sdW1uKTtcblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSAmJlxuXHRcdFx0XHRleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMobmFtZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXBbbmFtZV0gPT09IFwiRGVzY3JpcHRpb25cIiAmJlxuXHRcdFx0IXJlbGF0ZWRDb2x1bW4uZmlsdGVyYWJsZSAmJlxuXHRcdFx0IXJlc3RyaWN0aW9uc09uUHJvcGVydGllcz8ubm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuaW5jbHVkZXMobmFtZSlcblx0XHQpIHtcblx0XHRcdC8vIENhc2UgNDogVGhlIGNvbHVtbiBpcyBhIHJlZmVyZW5jZWQgdGV4dCBvbmx5IHByb3BlcnR5LiBTZXQgaXQgdG8gaGlkZGVuLCBub24gc29ydGFibGUgbm9yIGdyb3VwYWJsZS5cblx0XHRcdC8vIENhc2UgNTogVGhlIGNvbHVtbiBpc24ndCBhbHJlYWR5IGF2YWlsYWJsZSBmb3IgZmlsdGVyaW5nIGFzIGl0IGNvdWxkIGJlIHJlZmVyZW5jZWQgb24gYW5vdGhlciBjb2x1bW4gKGUuZy4gdGV4dCBmaXJzdCkuXG5cdFx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXM/Lm5vblNvcnRhYmxlUHJvcGVydGllcy5wdXNoKG5hbWUpO1xuXHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR7fSxcblx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLFxuXHRcdFx0XHR0YWJsZUNyZWF0aW9uTW9kZVxuXHRcdFx0KTtcblx0XHRcdGNvbHVtbi5pc0dyb3VwYWJsZSA9IGZhbHNlO1xuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuLyoqXG4gKiBHZXR0aW5nIHRoZSBDb2x1bW4gTmFtZVxuICogSWYgaXQgcG9pbnRzIHRvIGEgRGF0YUZpZWxkIHdpdGggb25lIHByb3BlcnR5IG9yIERhdGFQb2ludCB3aXRoIG9uZSBwcm9wZXJ0eSwgaXQgd2lsbCB1c2UgdGhlIHByb3BlcnR5IG5hbWVcbiAqIGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBmbGV4IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUaGUgbmFtZSBvZiBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgZGF0YUZpZWxkLlZhbHVlPy5wYXRoKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciB0aGUgaWRlbnRpZmllZCBhZGRpdGlvbmFsIHByb3BlcnR5IGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHRlY2huaWNhbCBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gY29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlIGZyb20gdGhlIHRhYmxlIHZpc3VhbGl6YXRpb24uXG4gKiBAcGFyYW0gcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBcbiAqL1xuY29uc3QgY3JlYXRlVGVjaG5pY2FsUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdG5hbWU6IHN0cmluZyxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0cmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbik6IHZvaWQge1xuXHRjb25zdCBrZXkgPSBgUHJvcGVydHlfVGVjaG5pY2FsOjoke25hbWV9YDtcblx0Ly8gVmFsaWRhdGUgaWYgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSBoYXNuJ3QgeWV0IGJlZW4gY3JlYXRlZCBvbiBwcmV2aW91cyBpdGVyYXRpb25zLlxuXHRjb25zdCBjb2x1bW5FeGlzdHMgPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmtleSA9PT0ga2V5KTtcblx0Ly8gUmV0cmlldmUgdGhlIHNpbXBsZSBwcm9wZXJ0eSB1c2VkIGJ5IHRoZSBoaWRkZW4gYW5ub3RhdGlvbiwgaXQgd2lsbCBiZSB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIG1hbmRhdG9yeSBhdHRyaWJ1dGVzIG9mIG5ld2x5IGNyZWF0ZWQgdGVjaG5pY2FsIHByb3BlcnR5LiBGb3IgZS5nLiByZWxhdGl2ZVBhdGhcblx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID1cblx0XHQhY29sdW1uRXhpc3RzICYmIChjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUgJiYgIWNvbHVtbi5wcm9wZXJ0eUluZm9zKSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pITtcblx0aWYgKGFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdGNvbnN0IHRlY2huaWNhbENvbHVtbjogVGVjaG5pY2FsQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRsYWJlbDogYWRkaXRpb25hbFByb3BlcnR5LmxhYmVsLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGFkZGl0aW9uYWxQcm9wZXJ0eS5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGF2YWlsYWJpbGl0eTogXCJIaWRkZW5cIixcblx0XHRcdG5hbWU6IGtleSxcblx0XHRcdHJlbGF0aXZlUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LnJlbGF0aXZlUGF0aCxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdGlzS2V5OiBmYWxzZSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiBudWxsLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogZmFsc2UsXG5cdFx0XHRhZ2dyZWdhdGFibGU6IGZhbHNlLFxuXHRcdFx0ZXh0ZW5zaW9uOiB7XG5cdFx0XHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiB0cnVlLFxuXHRcdFx0XHR0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29sdW1ucy5wdXNoKHRlY2huaWNhbENvbHVtbik7XG5cdFx0cmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSB0ZWNobmljYWxDb2x1bW4ubmFtZTtcblx0fVxufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YSBmaWVsZCBsYWJlbHMgaGF2ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwTmFtZSBUaGUgYERhdGFGaWVsZGAgbmFtZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgc2hvd0RhdGFGaWVsZHNMYWJlbGAgdmFsdWUgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgX2dldFNob3dEYXRhRmllbGRzTGFiZWwgPSBmdW5jdGlvbiAoXG5cdGZpZWxkR3JvdXBOYW1lOiBzdHJpbmcsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGNvbHVtbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24+KHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgY29sdW1uS2V5cyA9IGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0Y29sdW1uS2V5cyAmJlxuXHRcdCEhY29sdW1uS2V5cy5maW5kKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGtleSA9PT0gZmllbGRHcm91cE5hbWUgJiYgKGNvbHVtbnNba2V5XSBhcyBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSkuc2hvd0RhdGFGaWVsZHNMYWJlbDtcblx0XHR9KVxuXHQpO1xufTtcbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGggPSBcIlwiO1xuXHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8ucGF0aDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IGRhdGFGaWVsZD8uVGFyZ2V0Py52YWx1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRicmVhaztcblx0fVxuXHRyZXR1cm4gcmVsYXRpdmVQYXRoO1xufTtcbmNvbnN0IF9zbGljZUF0U2xhc2ggPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBpc0xhc3RTbGFzaDogYm9vbGVhbiwgaXNMYXN0UGFydDogYm9vbGVhbik6IHN0cmluZyB7XG5cdGNvbnN0IGlTbGFzaEluZGV4ID0gaXNMYXN0U2xhc2ggPyBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA6IHBhdGguaW5kZXhPZihcIi9cIik7XG5cdGlmIChpU2xhc2hJbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXHRyZXR1cm4gaXNMYXN0UGFydCA/IHBhdGguc3Vic3RyaW5nKGlTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGgpIDogcGF0aC5zdWJzdHJpbmcoMCwgaVNsYXNoSW5kZXgpO1xufTtcbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBEYXRhRmllbGQgY29ycmVzcG9uZHMgdG8gYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqL1xuY29uc3QgX2lzQ29sdW1uTXVsdGlWYWx1ZWQgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0aWYgKGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuVmFsdWUpKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0ZGF0YUZpZWxkLlZhbHVlLnBhdGhcblx0XHQpO1xuXHRcdHJldHVybiBpc011bHRpVmFsdWVGaWVsZChwcm9wZXJ0eU9iamVjdFBhdGgpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGUuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgQ29sbGVjdGlvbiBvZiBub24tc29ydGFibGUgY29sdW1uIG5hbWVzIGFzIHBlciBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb2x1bW4gaXMgc29ydGFibGVcbiAqL1xuY29uc3QgX2lzQ29sdW1uU29ydGFibGUgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgbm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdCFub25Tb3J0YWJsZUNvbHVtbnMuaW5jbHVkZXMocHJvcGVydHlQYXRoKSAmJiAvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb24pXG5cdCk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAhKGZpbHRlckZ1bmN0aW9ucyBhcyBTdHJpbmdbXSkuaW5jbHVkZXMoXCJ0b2xvd2VyXCIpIDogdHJ1ZTtcbn07XG5mdW5jdGlvbiBfZ2V0RmlsdGVyRnVuY3Rpb25zKENvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGlmIChUeXBlR3VhcmRzLmlzRW50aXR5U2V0KGVudGl0eVNldCkpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zID8/XG5cdFx0XHRDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uRmlsdGVyRnVuY3Rpb25zXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnNcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCk6IEZvcm1hdE9wdGlvbnNUeXBlIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGZvcm1hdE9wdGlvbnMgPT09IHVuZGVmaW5lZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiB7XG5cdFx0XHRcdHRleHRMaW5lc0VkaXQ6IDQsXG5cdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnNcblx0XHQgIH07XG59XG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogU2VtYW50aWNLZXksIG5hbWU6IHN0cmluZyk6IHsgdmFsdWVzOiBzdHJpbmdbXTsgc2VtYW50aWNLZXlGb3VuZDogYm9vbGVhbiB9IHtcblx0Y29uc3QgYVNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgYlNlbWFudGljS2V5Rm91bmQgPSBmYWxzZTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleXMubGVuZ3RoOyBpKyspIHtcblx0XHRhU2VtYW50aWNLZXlWYWx1ZXMucHVzaChzZW1hbnRpY0tleXNbaV0udmFsdWUpO1xuXHRcdGlmIChzZW1hbnRpY0tleXNbaV0udmFsdWUgPT09IG5hbWUpIHtcblx0XHRcdGJTZW1hbnRpY0tleUZvdW5kID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZXM6IGFTZW1hbnRpY0tleVZhbHVlcyxcblx0XHRzZW1hbnRpY0tleUZvdW5kOiBiU2VtYW50aWNLZXlGb3VuZFxuXHR9O1xufVxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKFxuXHRzZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10sXG5cdGZpZWxkR3JvdXBQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoPzogc3RyaW5nIH0ge1xuXHRsZXQgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IGZhbHNlO1xuXHRsZXQgc1Byb3BlcnR5UGF0aDtcblx0aWYgKHNlbWFudGljS2V5VmFsdWVzICYmIHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aCA+PSAxICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmxlbmd0aCA+PSAxKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleVZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKFtzZW1hbnRpY0tleVZhbHVlc1tpXV0uc29tZSgodG1wKSA9PiBmaWVsZEdyb3VwUHJvcGVydGllcy5pbmNsdWRlcyh0bXApKSkge1xuXHRcdFx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5VmFsdWVzW2ldO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHNQcm9wZXJ0eVBhdGhcblx0fTtcbn1cbi8qKlxuICogRmluZCB0aGUgZmlyc3QgcHJvcGVydHkgaW4gdGhlIGZpZWxkR3JvdXAgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzZW1hbnRpYyBrZXlzLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHBhcmFtIHNlbWFudGljS2V5VmFsdWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBhIGZsYWcgdHJ1ZSBpZiBhIHByb3BlcnR5IGlzIGZvdW5kIGFuZCBhIHByb3BlcnR5UGF0aC5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChcblx0ZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBudWxsLFxuXHRzZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW11cbik6IHsgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogYm9vbGVhbjsgcHJvcGVydHlQYXRoPzogc3RyaW5nIH0ge1xuXHQvLyB0aGlzIGluZm8gaXMgdXNlZCBpbiBGaWVsZEhlbHBlciNpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZUluRmllbGRHcm91cCB0byBzaG93IGEgZHJhZnQgaW5kaWNhdG9yIGF0IHRoZSBlbmQgb2YgYSBmaWVsZCBncm91cFxuXHRjb25zdCBhUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0bGV0IF9wcm9wZXJ0aWVzRm91bmQ6IHsgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogYm9vbGVhbjsgZmllbGRHcm91cFByb3BlcnR5UGF0aD86IHN0cmluZyB9ID0ge1xuXHRcdHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IGZhbHNlLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAoXG5cdFx0ZGF0YUZpZWxkR3JvdXAgJiZcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8IGlubmVyRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsKSAmJlxuXHRcdFx0XHRpbm5lckRhdGFGaWVsZC5WYWx1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFQcm9wZXJ0aWVzLnB1c2goaW5uZXJEYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRfcHJvcGVydGllc0ZvdW5kID0gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzLCBhUHJvcGVydGllcyk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBfcHJvcGVydGllc0ZvdW5kLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXAsXG5cdFx0cHJvcGVydHlQYXRoOiBfcHJvcGVydGllc0ZvdW5kLmZpZWxkR3JvdXBQcm9wZXJ0eVBhdGhcblx0fTtcbn1cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oXG5cdG5hbWU6IHN0cmluZyxcblx0c2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSxcblx0ZGF0YUZpZWxkR3JvdXA6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBudWxsXG4pOiBQYXJ0aWFsPHtcblx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdGZpZWxkR3JvdXBOYW1lOiBzdHJpbmc7XG5cdHNob3dFcnJvck9iamVjdFN0YXR1czogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGhhc0RyYWZ0SW5kaWNhdG9yOiBib29sZWFuO1xufT4ge1xuXHRpZiAoIXNlbWFudGljS2V5cykge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRjb25zdCBzZW1hbnRpY0tleSA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXMoc2VtYW50aWNLZXlzLCBuYW1lKTtcblx0Y29uc3Qgc2VtYW50aWNLZXlJbkZpZWxkR3JvdXAgPSBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKGRhdGFGaWVsZEdyb3VwLCBzZW1hbnRpY0tleS52YWx1ZXMpO1xuXHRpZiAoc2VtYW50aWNLZXlJbkZpZWxkR3JvdXAuc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCkge1xuXHRcdC8vIFNlbWFudGljIEtleSBoYXMgYSBwcm9wZXJ0eSBpbiBhIEZpZWxkR3JvdXBcblx0XHRyZXR1cm4ge1xuXHRcdFx0Ly9UT0RPIHdlIHNob3VsZCByYXRoZXIgc3RvcmUgaGFzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXBcblx0XHRcdGZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aDogc2VtYW50aWNLZXlJbkZpZWxkR3JvdXAucHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IG5hbWUsXG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgdHJ1ZSkpXG5cdFx0fTtcblx0fSBlbHNlIGlmIChzZW1hbnRpY0tleS5zZW1hbnRpY0tleUZvdW5kKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBjb21waWxlRXhwcmVzc2lvbihnZXRSb3dTdGF0dXNWaXNpYmlsaXR5KG5hbWUsIGZhbHNlKSlcblx0XHR9O1xuXHR9XG5cdHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIF9nZXRJbXBOdW1iZXIoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IG51bWJlciB7XG5cdGNvbnN0IGltcG9ydGFuY2UgPSBkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZSBhcyBzdHJpbmc7XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBJbXBvcnRhbmNlIHtcblx0Y29uc3QgaW1wb3J0YW5jZSA9IGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlIGFzIHN0cmluZztcblx0cmV0dXJuIGltcG9ydGFuY2UgPyAoaW1wb3J0YW5jZS5zcGxpdChcIi9cIilbMV0gYXMgSW1wb3J0YW5jZSkgOiBJbXBvcnRhbmNlLk5vbmU7XG59XG4vKipcbiAqIFNldHMgdGhlIGV4cG9ydCBzZXR0aW5ncyBvZiBhIGNvbHVtbiBjb250YWluaW5nIGRhdGFwb2ludHMuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSByZWZlcmVuY2VkIG9uIGEgZ2l2ZW4gY29sdW1uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgdXBkYXRlZFxuICovXG5cbmZ1bmN0aW9uIF9zZXRFeHBvcnRTZXR0aW5nc0ZvckRhdGFQb2ludChwcm9wZXJ0eTogUHJvcGVydHksIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFZhbHVlZnJvbURQID0gZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChwcm9wZXJ0eSk7XG5cdGlmIChcblx0XHRpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0KHByb3BlcnR5KSAmJlxuXHRcdHR5cGVvZiB0YXJnZXRWYWx1ZWZyb21EUCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdGNvbHVtbi5leHBvcnRTZXR0aW5ncyAmJlxuXHRcdGNvbHVtbi5leHBvcnRTZXR0aW5ncz8udW5pdCAhPT0gXCIlXCJcblx0KSB7XG5cdFx0Y29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWVmcm9tRFA7XG5cdFx0Y29sdW1uLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlID0gXCJ7MH0vXCIgKyB0YXJnZXRWYWx1ZWZyb21EUDtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0TWF4SW1wb3J0YW5jZShmaWVsZHM6IERhdGFGaWVsZFR5cGVzW10pOiBJbXBvcnRhbmNlIHtcblx0aWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuXHRcdGxldCBtYXhJbXBOdW1iZXIgPSAtMTtcblx0XHRsZXQgaW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlO1xuXHRcdGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG5cdFx0XHRpbXBOdW1iZXIgPSBfZ2V0SW1wTnVtYmVyKGZpZWxkKTtcblx0XHRcdGlmIChpbXBOdW1iZXIgPiBtYXhJbXBOdW1iZXIpIHtcblx0XHRcdFx0bWF4SW1wTnVtYmVyID0gaW1wTnVtYmVyO1xuXHRcdFx0XHREYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZSA9IGZpZWxkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXMpO1xuXHR9XG5cdHJldHVybiBJbXBvcnRhbmNlLk5vbmU7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZGF0YUZpZWxkXG4gKiBAcmV0dXJucyBUaGUgaW1wb3J0YW5jZSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0YW5jZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCB1bmRlZmluZWRcbik6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHRpZiAoIWRhdGFGaWVsZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3Qgc2VtYW50aWNLZXlzID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/LlNlbWFudGljS2V5ID8/IFtdO1xuXHRjb25zdCByZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZ2hLZXlzID0gWy4uLnNlbWFudGljS2V5cywgLi4ucmVxdWlyZWRQcm9wZXJ0aWVzXS5tYXAoKHByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHlQYXRoLiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdC8vRXZhbHVhdGUgZGVmYXVsdCBJbXBvcnRhbmNlIGlzIG5vdCBzZXQgZXhwbGljaXRseVxuXHRsZXQgZmllbGRzV2l0aEltcG9ydGFuY2U7XG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IGRhdGFGaWVsZFRhcmdldC5EYXRhO1xuXHRcdFx0Ly9JZiBhIEZpZWxkR3JvdXAgY29udGFpbnMgYSBzZW1hbnRpY0tleSBvciByZXF1aXJlZCBwcm9wZXJ0eSwgaW1wb3J0YW5jZSBzZXQgdG8gSGlnaFxuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaWVsZEdyb3VwRGF0YS5zb21lKGZ1bmN0aW9uIChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdGlzRGF0YUZpZWxkVHlwZXMoZmllbGRHcm91cERhdGFGaWVsZCkgJiYgaGlnaEtleXMuaW5jbHVkZXMoZmllbGRHcm91cERhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIEltcG9ydGFuY2UuSGlnaDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vSWYgdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gaGFzIGFuIEltcG9ydGFuY2Ugd2UgdGFrZSBpdFxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGVsc2UgdGhlIGhpZ2hlc3QgaW1wb3J0YW5jZSAoaWYgYW55KSBpcyByZXR1cm5lZFxuXHRcdFx0XHRmaWVsZHNXaXRoSW1wb3J0YW5jZSA9IGZpZWxkR3JvdXBEYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiBpdGVtPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2U7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoaWdoS2V5cy5pbmNsdWRlcygoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lKVxuXHRcdD8gSW1wb3J0YW5jZS5IaWdoXG5cdFx0OiBfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZShkYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk7XG59XG4vKipcbiAqIFJldHVybnMgbGluZSBpdGVtcyBmcm9tIG1ldGFkYXRhIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZTogRW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PiA9IHt9LFxuXHRcdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXA6IFJlY29yZDxzdHJpbmcsIERpc3BsYXlNb2RlPiA9IHt9LFxuXHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcyA9IGdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSxcblx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHR0YWJsZVR5cGUgPSBnZXRUYWJsZVR5cGUoY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdFNldHRpbmdzKSxcblx0XHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5jcmVhdGlvbk1vZGU/Lm5hbWUgPz8gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljS2V5LCBbXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XSlbMF0gYXMgU2VtYW50aWNLZXk7XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRjb25zdCB0YWJsZUNvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRcdGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpXG5cdFx0KTtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgobGluZUl0ZW0pID0+IHtcblx0XHRcdC8vIFRPRE86IHZhcmlhYmxlIG5hbWUgc2hvdWxkIGJlIGRhdGFmaWVsZCBhbmQgbm90IGxpbmVJdGVtXG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgZXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHQvLyBEZXRlcm1pbmUgcHJvcGVydGllcyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhpcyBMaW5lSXRlbS5cblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KGxpbmVJdGVtLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZVR5cGUpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcmVsYXRpdmVQYXRoID8gX3NsaWNlQXRTbGFzaChyZWxhdGl2ZVBhdGgsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcmVsYXRpdmVQYXRoO1xuXHRcdFx0Y29uc3Qgc0xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRMYWJlbChsaW5lSXRlbSwgaXNHcm91cCk7XG5cdFx0XHRjb25zdCBuYW1lID0gX2dldEFubm90YXRpb25Db2x1bW5OYW1lKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IGlzRmllbGRHcm91cENvbHVtbjogYm9vbGVhbiA9IGdyb3VwUGF0aCA/IGdyb3VwUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cH1gKSA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGlzRmllbGRHcm91cENvbHVtblxuXHRcdFx0XHQ/IF9nZXRTaG93RGF0YUZpZWxkc0xhYmVsKG5hbWUsIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzLCBsaW5lSXRlbSkpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGhcblx0XHRcdCk7XG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCBhIHNpdHVhdGlvbnMgaW5kaWNhdG9yXG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10gPSBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHNpdHVhdGlvbnNOYXZQcm9wcyA9IG5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbHRlcihcblx0XHRcdFx0KG5hdmlnYXRpb25Qcm9wZXJ0eSkgPT5cblx0XHRcdFx0XHQhbmF2aWdhdGlvblByb3BlcnR5LmlzQ29sbGVjdGlvbiAmJlxuXHRcdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU0FQT2JqZWN0Tm9kZVR5cGU/Lk5hbWUgPT09IFwiQnVzaW5lc3NTaXR1YXRpb25cIlxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHNpdHVhdGlvbnNOYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQgPSBzaXR1YXRpb25zTmF2UHJvcHMubGVuZ3RoID49IDEgPyBzaXR1YXRpb25zTmF2UHJvcHNbMF0gOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoc2l0dWF0aW9uc05hdlByb3AgJiYgZm9ybWF0T3B0aW9ucykge1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zLmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRcdGlmIChcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0bGluZUl0ZW0uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0XHRcdCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKGxpbmVJdGVtKTtcblx0XHRcdH1cblx0XHRcdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHQvL2V4Y2x1ZGUgdGhlIHR5cGVzIGxpc3RlZCBhYm92ZSBmb3IgdGhlIEV4cG9ydCAoZ2VuZXJhdGVzIGVycm9yIG9uIEV4cG9ydCBhcyBQREYpXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzID0gY3JlYXRlQ29sdW1uRXhwb3J0U2V0dGluZ3MobGluZUl0ZW0sIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyk7XG5cdFx0XHR9XG5cdFx0XHRsZXQgcHJvcGVydHlUeXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZGF0YVR5cGUpIHtcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhsaW5lSXRlbSwgZGF0YVR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdFx0XHRjbGFzc05hbWU6IGRhdGFUeXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHtcblx0XHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25zdHJhaW50czogeyAuLi5wcm9wZXJ0eVR5cGVDb25maWc/LmNvbnN0cmFpbnRzIH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCB2aXN1YWxTZXR0aW5nczogVmlzdWFsU2V0dGluZ3MgPSB7fTtcblx0XHRcdGlmICghZGF0YVR5cGUgfHwgIXR5cGVDb25maWcpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYXJ0c1xuXHRcdFx0XHR2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IF9pc0NvbHVtbk11bHRpVmFsdWVkKGxpbmVJdGVtLCB0YWJsZUNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc29ydGFibGUgPSAhaXNNdWx0aVZhbHVlICYmIF9pc0NvbHVtblNvcnRhYmxlKGxpbmVJdGVtLCByZWxhdGl2ZVBhdGgsIHJlc3RyaWN0aW9uc09uUHJvcGVydGllcy5ub25Tb3J0YWJsZVByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYXZhaWxhYmlsaXR5ID0gaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4obGluZUl0ZW0pID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKGxpbmVJdGVtKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiB1bmRlZmluZWQsXG5cdFx0XHRcdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBhdmFpbGFiaWxpdHksXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWw6IHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdHJlcXVpcmVkOiBpc1JlcXVpcmVkQ29sdW1uKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtIGFzIERhdGFGaWVsZFR5cGVzLCB0YWJsZUNyZWF0aW9uTW9kZSksXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiAobGluZUl0ZW0uYW5ub3RhdGlvbnM/LkhUTUw1Py5Dc3NEZWZhdWx0cz8ud2lkdGg/LnZhbHVlT2YoKSBhcyBzdHJpbmcpIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aW1wb3J0YW5jZTogZ2V0SW1wb3J0YW5jZShjb252ZXJ0ZXJDb250ZXh0LCBsaW5lSXRlbSBhcyBEYXRhRmllbGRUeXBlcyksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcsXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzOiB2aXN1YWxTZXR0aW5ncyxcblx0XHRcdFx0dGltZXpvbmVUZXh0OiBleHBvcnRTZXR0aW5ncz8udGltZXpvbmUsXG5cdFx0XHRcdGlzUGFydE9mTGluZUl0ZW06IHRydWUsXG5cdFx0XHRcdGlzTXVsdGlWYWx1ZVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IHRvb2x0aXAgPSBfZ2V0VG9vbHRpcChsaW5lSXRlbSkgPz8gc0xhYmVsO1xuXHRcdFx0aWYgKHRvb2x0aXApIHtcblx0XHRcdFx0Y29sdW1uLnRvb2x0aXAgPSB0b29sdGlwO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5ncy5kYXRhUG9pbnRUYXJnZXRWYWx1ZSkge1xuXHRcdFx0XHRjb2x1bW4uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3MuZGF0YVBvaW50VGFyZ2V0VmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaCgocmVsYXRlZFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbcmVsYXRlZFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tyZWxhdGVkUHJvcGVydHlOYW1lXS5hbm5vdGF0aW9uUHJvcGVydHk7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgYSBtdWx0aS12YWx1ZSwgcmVsYXRlZCBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBzb3J0ZWQgYXMgd2UgZ28gdGhyb3VnaCBhIDEtbiByZWxhdGlvblxuXHRcdFx0XHRpZiAoaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzLm5vblNvcnRhYmxlUHJvcGVydGllcy5wdXNoKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFkZFByb3BlcnR5VG9EaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwKFxuXHRcdFx0XHRcdGRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXAsXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXNJbmZvLFxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgbGluZUl0ZW0gcG9pbnRzIHRvIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSB3aXRoIGEgdGV4dEFycmFuZ2VtZW50IFRleHRPbmx5LCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgY29sdW1uIHdpdGggdGhlIHZhbHVlIG5hdmlnYXRpb24gcHJvcGVydHkuXG5cdFx0XHRcdC8vIFRoZSB0ZXh0IHByb3BlcnR5IGlzIHJlZmVyZW5jZWQgb24gdGhlIHJlbGF0ZWQgcHJvcGVydGllcyBvZiB0aGUgbGluZUl0ZW0sIHNvIHdpbGwgYmUgY3JlYXRlZCBvbiB0aGUgX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zIG1ldGhvZC5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdLmRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdFx0XHRjcmVhdGVQcm9wZXJ0eUFubm90YXRlZFRleHRPbmx5KFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0XHRcdGxpbmVJdGVtLFxuXHRcdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdFx0XHRcdFx0cmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRcdFx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbYWRkaXRpb25hbFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5TmFtZV07XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0cmV0dXJuIGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlVHlwZSxcblx0XHR0YWJsZUNyZWF0aW9uTW9kZSxcblx0XHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwLFxuXHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllc1xuXHQpO1xufTtcbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLmZpbmQoZnVuY3Rpb24gKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0e31cblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtYXRjaGVkUHJvcGVydGllcztcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZmllbGQgZ3JvdXAgaGFzIHRvIGJlIGZsYWdnZWQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmllbGRHcm91cCBUaGUgZmllbGRHcm91cCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGRHcm91cCBpcyByZXF1aXJlZC5cbiAqL1xuY29uc3QgaXNSZXF1aXJlZEZpZWxkR3JvdXAgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZmllbGRHcm91cDogRmllbGRHcm91cCxcblx0dGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpZWxkR3JvdXBEYXRhID0gZmllbGRHcm91cC5EYXRhO1xuXHRyZXR1cm4gZmllbGRHcm91cERhdGEuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuXHRcdC8vIHdlIGV4Y2x1ZGUgYm9vbGVhbiB0eXBlLCB0aGUgZW5kLXVzZXIgbWF5IHdhbnQgdG8ga2VlcCB0aGUgdW5kZXJseWluZyBjaGVjayBib3ggZW1wdHkgb24gcHVycG9zZVxuXHRcdGlmIChpc0RhdGFGaWVsZChpdGVtKSAmJiBpdGVtPy5WYWx1ZT8uJHRhcmdldC50eXBlICE9PSBcIkVkbS5Cb29sZWFuXCIpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGlzU3RhdGljYWxseU1hbmRhdG9yeShpdGVtKSB8fFxuXHRcdFx0XHQodGFibGVDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MgJiZcblx0XHRcdFx0XHRpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkoaXRlbS5WYWx1ZS4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dCkpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gaGFzIHRvIGJlIGZsYWdnZWQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBUaGUgcHJvcGVydHkgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHJlcXVpcmVkLlxuICovXG5jb25zdCBpc1JlcXVpcmVkRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHR0YWJsZUNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlXG4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YUZpZWxkVGFyZ2V0ID0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0Y29uc3QgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSA9IGhhc0ZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeShkYXRhRmllbGRGb3JBbm5vdGF0aW9uKTtcblx0Ly8gQ2hlY2sgaWYgdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRzIHRvIGEgRmllbGRHcm91cFxuXHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChkYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGlmIChpc1JlcXVpcmVkRmllbGRHcm91cChjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGRUYXJnZXQgYXMgRmllbGRHcm91cCwgdGFibGVDcmVhdGlvbk1vZGUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgZmllbGRHcm91cERhdGEgPSAoZGF0YUZpZWxkVGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGE7XG5cdFx0cmV0dXJuIGZpZWxkR3JvdXBEYXRhLnNvbWUoKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gaXNSZXF1aXJlZENvbHVtbihjb252ZXJ0ZXJDb250ZXh0LCBpbm5lckRhdGFGaWVsZCwgdGFibGVDcmVhdGlvbk1vZGUpO1xuXHRcdH0pO1xuXHR9XG5cdC8qSWYgdGhlIHVuZGVybHlpbmcgZGF0YXBvaW50IGlzIGEgcmF0aW5nIGluZGljYXRvciwgdGhlIGVuZC11c2VyIG1heSB3YW50IHRvIGtlZXAgdGhlIHJhdGluZyBlbXB0eSAodmFsdWUgMCkgb24gcHVycG9zZS5cblx0QmVzaWRlcywgY3VycmVudGx5LCBvbmx5IGEgZmllbGRDb250cm9sIHNldCBvbiBhIGRhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBkYXRhUG9pbnQgaGFzIGFuIGluZmx1ZW5jZSBpbiB0aGUgdGFibGUuXG5cdEFjY29yZGluZ2x5LCBpZiBhIGRhdGFwb2ludCBjb21lcyBmcm9tIGEgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB3aXRoIGEgZmllbGRDb250cm9sIHNldCBhcyBub3QgbWFuZGF0b3J5LCB0aGlzIGRhdGFQb2ludCBtdXN0IG5vdCBiZSBmbGFnZ2VkIGFzIFwicmVxdWlyZWRcIiovXG5cdGlmIChoYXNEYXRhUG9pbnRUYXJnZXQoZGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiYgKGRhdGFGaWVsZFRhcmdldCBhcyBEYXRhUG9pbnQpLlZpc3VhbGl6YXRpb24gIT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRpZiAoRGF0YUZpZWxkRm9yQW5ub3RhdGlvbkZpZWxkQ29udHJvbE5vdE1hbmRhdG9yeSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoaXNTdGF0aWNhbGx5TWFuZGF0b3J5KGRhdGFGaWVsZEZvckFubm90YXRpb24pKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzUmVxdWlyZWREYXRhUG9pbnQoY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkVGFyZ2V0IGFzIERhdGFQb2ludCwgdGFibGVDcmVhdGlvbk1vZGUpO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvcGVydHkgaGFzIHRvIGJlIGZsYWdnZWQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHRhYmxlQ3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHRhYmxlXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZC5cbiAqL1xuY29uc3QgaXNSZXF1aXJlZFByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0dGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZVxuKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0cHJvcGVydHkudHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiICYmXG5cdFx0IWlzUmF0aW5nVmlzdWFsaXphdGlvbkZyb21EYXRhRmllbGREZWZhdWx0KHByb3BlcnR5KSAmJlxuXHRcdChpc1N0YXRpY2FsbHlNYW5kYXRvcnkocHJvcGVydHkpIHx8XG5cdFx0XHQodGFibGVDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MgJiZcblx0XHRcdFx0aXNBbm5vdGF0ZWRSZXF1aXJlZFByb3BlcnR5KHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSwgY29udmVydGVyQ29udGV4dCkpKVxuXHQpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBkYXRhUG9pbnQgaGFzIHRvIGJlIGZsYWdnZWQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZGF0YVBvaW50IFRoZSBkYXRhUG9pbnQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gdGFibGVDcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGUgb2YgdGhlIHVuZGVybHlpbmcgdGFibGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGFQb2ludCBpcyByZXF1aXJlZC5cbiAqL1xuY29uc3QgaXNSZXF1aXJlZERhdGFQb2ludCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkYXRhUG9pbnQ6IERhdGFQb2ludCxcblx0dGFibGVDcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZVxuKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0aXNTdGF0aWNhbGx5TWFuZGF0b3J5KGRhdGFQb2ludCkgfHxcblx0XHQodGFibGVDcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MgJiZcblx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eShkYXRhUG9pbnQuVmFsdWUuJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSB1bmRlcmx5aW5nIGNvbHVtbiBoYXMgdG8gYmUgZmxhZ2dlZCBhcyByZXF1aXJlZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB0YWJsZUNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZSBvZiB0aGUgdW5kZXJseWluZyB0YWJsZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdyZXF1aXJlZCcgcHJvcGVydHkgb2YgdGhlIHRhYmxlIGNvbHVtbi5cbiAqL1xuY29uc3QgaXNSZXF1aXJlZENvbHVtbiA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YXJnZXQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSxcblx0dGFibGVDcmVhdGlvbk1vZGU/OiBDcmVhdGlvbk1vZGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gdGFibGVDcmVhdGlvbk1vZGUgfHwgQ3JlYXRpb25Nb2RlLklubGluZTtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmIChpc1Byb3BlcnR5KHRhcmdldCkpIHtcblx0XHRyZXR1cm4gaXNSZXF1aXJlZFByb3BlcnR5KGNvbnZlcnRlckNvbnRleHQsIHRhcmdldCwgY3JlYXRpb25Nb2RlKSA/IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpIDogdW5kZWZpbmVkO1xuXHR9XG5cdC8vIENoZWNrIGlmIHRoZSBkYXRhRmllbGQgaXMgb2YgdHlwZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdGlmIChpc0RhdGFGaWVsZEZvckFubm90YXRpb24odGFyZ2V0KSkge1xuXHRcdHJldHVybiBpc1JlcXVpcmVkRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihjb252ZXJ0ZXJDb250ZXh0LCB0YXJnZXQsIGNyZWF0aW9uTW9kZSkgPyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKSA6IHVuZGVmaW5lZDtcblx0fVxuXHQvL0lmIHRoZSB1bmRlcmx5aW5nIHByb3BlcnR5IGlzIGEgYm9vbGVhbiwgdGhlIGVuZC11c2VyIG1heSB3YW50IHRvIGtlZXAgdGhlIGNoZWNrIGJveCBlbXB0eSBvbiBwdXJwb3NlXG5cdGlmIChpc0RhdGFGaWVsZCh0YXJnZXQpICYmIHRhcmdldC5WYWx1ZT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKSB7XG5cdFx0cmV0dXJuIGlzU3RhdGljYWxseU1hbmRhdG9yeSh0YXJnZXQpIHx8XG5cdFx0XHQoY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzICYmXG5cdFx0XHRcdGlzQW5ub3RhdGVkUmVxdWlyZWRQcm9wZXJ0eSh0YXJnZXQuVmFsdWUuJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQpKVxuXHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5jb25zdCBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUgPSBmdW5jdGlvbiAocHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsIGV4cG9ydFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKGV4cG9ydFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdHByb3BlcnRpZXMgPSBleHBvcnRQcm9wZXJ0aWVzO1xuXHR9XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHRcdC5tYXAoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcyEuaW5kZXhPZihwcm9wZXJ0eSl9fWA7XG5cdFx0XHR9KVxuXHRcdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBUaGVzZSBtYXkgYmUgY3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIHNsb3QgY29sdW1ucyBjb21pbmcgdGhyb3VnaFxuICogYSBidWlsZGluZyBibG9jaywgb3IgYW5ub3RhdGlvbiBjb2x1bW5zIHRvIG92ZXJ3cml0ZSBhbm5vdGF0aW9uLWJhc2VkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4ge1xuXHRjb25zdCBpbnRlcm5hbENvbHVtbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0Q29sdW1uPiA9IHt9O1xuXHRmdW5jdGlvbiBpc0Fubm90YXRpb25Db2x1bW4oXG5cdFx0Y29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0XHRrZXk6IHN0cmluZ1xuXHQpOiBjb2x1bW4gaXMgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChhbm5vdGF0aW9uQ29sdW1uKSA9PiBhbm5vdGF0aW9uQ29sdW1uLmtleSA9PT0ga2V5KTtcblx0fVxuXHRmdW5jdGlvbiBpc1Nsb3RDb2x1bW4obWFuaWZlc3RDb2x1bW46IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbik6IG1hbmlmZXN0Q29sdW1uIGlzIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSBDb2x1bW5UeXBlLlNsb3Q7XG5cdH1cblx0ZnVuY3Rpb24gaXNDdXN0b21Db2x1bW4obWFuaWZlc3RDb2x1bW46IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbik6IG1hbmlmZXN0Q29sdW1uIGlzIE1hbmlmZXN0RGVmaW5lZEN1c3RvbUNvbHVtbiB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IHVuZGVmaW5lZCAmJiAhIW1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlO1xuXHR9XG5cdGZ1bmN0aW9uIF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdLCBhbm5vdGF0aW9uVGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc3RyaWN0aW9uc09uUHJvcGVydGllcyA9IGdldFJlc3RyaWN0aW9uc09uUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0XHRwcm9wZXJ0eUluZm9zLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRhbm5vdGF0aW9uVGFibGVDb2x1bW5zLmZvckVhY2goKHByb3ApID0+IHtcblx0XHRcdFx0aWYgKHByb3AubmFtZSA9PT0gcHJvcGVydHkpIHtcblx0XHRcdFx0XHRwcm9wLnNvcnRhYmxlID0gIXJlc3RyaWN0aW9uc09uUHJvcGVydGllcy5ub25Tb3J0YWJsZVByb3BlcnRpZXMuaW5jbHVkZXMocHJvcGVydHkucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikpO1xuXHRcdFx0XHRcdHByb3AuaXNHcm91cGFibGUgPSBwcm9wLnNvcnRhYmxlO1xuXHRcdFx0XHRcdHByb3AuZmlsdGVyYWJsZSA9ICFyZXN0cmljdGlvbnNPblByb3BlcnRpZXMubm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuaW5jbHVkZXMocHJvcGVydHkucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXHRmb3IgKGNvbnN0IGtleSBpbiBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RDb2x1bW4gPSBjb2x1bW5zW2tleV07XG5cdFx0S2V5SGVscGVyLnZhbGlkYXRlS2V5KGtleSk7XG5cdFx0Ly8gQmFzZVRhYmxlQ29sdW1uXG5cdFx0Y29uc3QgYmFzZVRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogbWFuaWZlc3RDb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXHRcdGlmIChpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSkpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW46IEN1c3RvbUVsZW1lbnQ8QW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+ID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGltcG9ydGFuY2U6IG1hbmlmZXN0Q29sdW1uPy5pbXBvcnRhbmNlLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uKG1hbmlmZXN0Q29sdW1uLCBrZXkpXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0Q29sdW1uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIHRydWUpLFxuXHRcdFx0XHRzZXR0aW5nczogbWFuaWZlc3RDb2x1bW4uc2V0dGluZ3MsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKG1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnMpLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZ2V0Q3VzdG9tRXhwb3J0U2V0dGluZ3MoXG5cdFx0XHRcdFx0bWFuaWZlc3RDb2x1bW4/LmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0a2V5XG5cdFx0XHRcdClcblx0XHRcdH07XG5cdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdG9vbHRpcFRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwobWFuaWZlc3RDb2x1bW4udG9vbHRpcCksXG5cdFx0XHRcdGhlYWRlclRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmZldGNoVGV4dEZyb21NZXRhTW9kZWwobWFuaWZlc3RDb2x1bW4uaGVhZGVyKTtcblxuXHRcdFx0Y29uc3QgY3VzdG9tQ29sdW1uRXhwb3J0U2V0dGluZ3M6IENvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IHByb3BlcnR5SW5mb3Ncblx0XHRcdFx0PyBnZXRDdXN0b21FeHBvcnRTZXR0aW5ncyhtYW5pZmVzdENvbHVtbj8uZXhwb3J0U2V0dGluZ3MsIGFubm90YXRpb25Db2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlLCBwcm9wZXJ0eUluZm9zKVxuXHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRjb25zdCBiYXNlTWFuaWZlc3RDb2x1bW4gPSB7XG5cdFx0XHRcdC4uLmJhc2VUYWJsZUNvbHVtbixcblx0XHRcdFx0aGVhZGVyOiBoZWFkZXJUZXh0LFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSB8fCBJbXBvcnRhbmNlLk5vbmUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiB8fCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogY3VzdG9tQ29sdW1uRXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdGlkOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHRuYW1lOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHQvL05lZWRlZCBmb3IgTURDOlxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IDQgfSxcblx0XHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogZmFsc2UsXG5cdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9LFxuXHRcdFx0XHR0b29sdGlwOiB0b29sdGlwVGV4dCA/IHRvb2x0aXBUZXh0IDogaGVhZGVyVGV4dCxcblx0XHRcdFx0cHJvcGVydGllczogbWFuaWZlc3RDb2x1bW4ucHJvcGVydGllcyxcblx0XHRcdFx0cmVxdWlyZWQ6XG5cdFx0XHRcdFx0bWFuaWZlc3RDb2x1bW4ucmVxdWlyZWQgJiZcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSlcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0X3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMocHJvcGVydHlJbmZvcywgYW5ub3RhdGlvbkNvbHVtbnMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuU2xvdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIGlmIChpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuRGVmYXVsdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gJyR7a2V5fScgcmVmZXJlbmNlZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kYDtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5NYW5pZmVzdCxcblx0XHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTG93LFxuXHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25Db2x1bW5zPy5JbnZhbGlkS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGludGVybmFsQ29sdW1ucztcbn07XG5cbi8qKlxuICogQWRkcyBjb21wdXRlZCBjb2x1bW5zIHN1Y2ggYXMgdGhlIGRyYWZ0IHN0YXR1cyBhbmQgc2l0dWF0aW9ucyBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgdGFibGUgY29sdW1ucyBjb2xsZWN0ZWQgc28gZmFyXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZW5yaWNoZWQgc2V0IG9mIHRhYmxlIGNvbHVtbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENvbXB1dGVkQ29sdW1ucyhcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVUeXBlID0gZ2V0VGFibGVUeXBlKGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RTZXR0aW5ncyk7XG5cblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJHcmlkVGFibGVcIiAmJiB0YWJsZVR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHQvLyBUb2RheSB3ZSBvbmx5IGRvIHNvbWV0aGluZyBoZXJlIGluIGNhc2Ugb2YgZ3JpZCBvciB0cmVlIHRhYmxlXG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucztcblx0fVxuXG5cdC8vIEluIGNhc2UgYSBncmlkIHRhYmxlIG9yIHRyZWUgdGFibGUgaXMgdXNlZCwgd2UgZGlzcGxheSB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgaW4gYSBzZXBhcmF0ZSBjb2x1bW5cblx0Ly8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGhlcmUgdG8gZW5zdXJlLCB0aGF0IHRoZSBmaWVsZCBidWlsZGluZyBibG9ja1xuXHQvLyBkb2VzIG5vdCByZW5kZXIgaXQgaW50byB0aGUgSUQgY29sdW1uXG5cdGNvbnN0IGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCA9IHRhYmxlQ29sdW1ucy5maW5kKFxuXHRcdChjb2x1bW4pID0+IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5oYXNTaXR1YXRpb25zSW5kaWNhdG9yICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc1NpdHVhdGlvbnNJbmRpY2F0b3IgPT09IHRydWVcblx0KTtcblx0aWYgKGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yPy5mb3JtYXRPcHRpb25zKSB7XG5cdFx0Ly8gU3dpdGNoIG9mZiB0aGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgaW4gdGhlIGZvdW5kIGNvbHVtblxuXHRcdGNvbHVtbldpdGhTaXR1YXRpb25zSW5kaWNhdG9yLmZvcm1hdE9wdGlvbnMuaGFzU2l0dWF0aW9uc0luZGljYXRvciA9IGZhbHNlO1xuXG5cdFx0Ly8gSW5zZXJ0IGEgc2VwYXJhdGUgc2l0dWF0aW9ucyBpbmRpY2F0b3IgY29sdW1uXG5cdFx0Y29uc3Qgc2l0dWF0aW9uc0luZGljYXRvckNvbHVtbjogQ29tcHV0ZWRUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleTogXCJzaXR1YXRpb25zSW5kaWNhdG9yXCIsXG5cdFx0XHRuYW1lOiBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIixcblx0XHRcdHByb3BlcnR5S2V5OiBjb2x1bW5XaXRoU2l0dWF0aW9uc0luZGljYXRvci5uYW1lLFxuXHRcdFx0aXNTaXR1YXRpb25zSW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkRlZmF1bHRcIixcblx0XHRcdGxhYmVsOiBcIntzYXAuZmUuaTE4bj5DX1NJVFVBVElPTlNfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dG9vbHRpcDogXCJ7c2FwLmZlLmkxOG4+Q19TSVRVQVRJT05TX1NUQVRVU19DT0xVTU5fTEFCRUxfVE9PTFRJUH1cIixcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQ29tcHV0ZWQsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBudWxsLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjbGlwYm9hcmRTZXR0aW5nczogbnVsbCxcblx0XHRcdHByb3BlcnR5SW5mb3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuXHRcdH07XG5cblx0XHQvLyBQbGFjZSB0aGUgZHJhZnQgc3RhdHVzIGNvbHVtbiBhZnRlciB0aGUgZmlyc3QgdmlzaWJsZSBjb2x1bW5cblx0XHRjb25zdCBpbmRleE9mRmlyc3RWaXNpYmxlQ29sdW1uOiBpbnQgPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpO1xuXHRcdHRhYmxlQ29sdW1ucy5zcGxpY2UoaW5kZXhPZkZpcnN0VmlzaWJsZUNvbHVtbiArIDEsIDAsIHNpdHVhdGlvbnNJbmRpY2F0b3JDb2x1bW4pO1xuXHR9XG5cblx0Ly8gSW4gY2FzZSBhIGdyaWQgdGFibGUgb3IgdHJlZSB0YWJsZSBpcyB1c2VkLCB3ZSBkaXNwbGF5IHRoZSBkcmFmdCBpbmRpY2F0b3IgaW4gYSBzZXBhcmF0ZSBjb2x1bW5cblx0Ly8gc28gd2UgaGF2ZSB0byBkaXNhYmxlIGl0IGhlcmUgdG8gZW5zdXJlLCB0aGF0IHRoZSBmaWVsZCBidWlsZGluZyBibG9ja1xuXHQvLyBkb2VzIG5vdCByZW5kZXIgaXQgaW50byB0aGUgSUQgY29sdW1uXG5cdC8vIFRoZSBhZGRpdGlvbmFsIGNvbHVtbiBpcyBvbmx5IGFkZGVkIGZvciB0YWJsZXMgb24gYSBMUiBhbmQgaW4gY2FzZSB0ZWhlIGVudGl0eSBpcyBkcmFmdCBlbmFibGVkIVxuXHRjb25zdCBjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3I6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkID0gdGFibGVDb2x1bW5zLmZpbmQoXG5cdFx0KGNvbHVtbikgPT4gY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yID09PSB0cnVlXG5cdCk7XG5cdGlmIChcblx0XHRjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3I/LmZvcm1hdE9wdGlvbnMgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdChNb2RlbEhlbHBlci5pc0RyYWZ0Tm9kZShjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSB8fCBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSlcblx0KSB7XG5cdFx0Ly8gU3dpdGNoIG9mZiB0aGUgZHJhZnQgaW5kaWNhdG9yIGluIHRoZSBmb3VuZCBjb2x1bW5cblx0XHRjb2x1bW5XaXRoRHJhZnRJbmRpY2F0b3IuZm9ybWF0T3B0aW9ucy5oYXNEcmFmdEluZGljYXRvciA9IGZhbHNlO1xuXG5cdFx0Ly8gSW5zZXJ0IGEgc2VwYXJhdGUgZHJhZnQgaW5kaWNhdG9yIGNvbHVtblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yQ29sdW1uOiBDb21wdXRlZFRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBcImRyYWZ0U3RhdHVzXCIsXG5cdFx0XHRuYW1lOiBcImRyYWZ0U3RhdHVzXCIsXG5cdFx0XHRwcm9wZXJ0eUtleTogY29sdW1uV2l0aERyYWZ0SW5kaWNhdG9yLm5hbWUsXG5cdFx0XHRpc0RyYWZ0SW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkRlZmF1bHRcIixcblx0XHRcdGxhYmVsOiBcIntzYXAuZmUuaTE4bj5DX0RSQUZUX1NUQVRVU19DT0xVTU5fTEFCRUxfVE9PTFRJUH1cIixcblx0XHRcdHRvb2x0aXA6IFwie3NhcC5mZS5pMThuPkNfRFJBRlRfU1RBVFVTX0NPTFVNTl9MQUJFTF9UT09MVElQfVwiLFxuXHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Db21wdXRlZCxcblx0XHRcdGZvcm1hdE9wdGlvbnM6IG51bGwsXG5cdFx0XHRleHBvcnRTZXR0aW5nczogbnVsbCxcblx0XHRcdHByb3BlcnR5SW5mb3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZVxuXHRcdH07XG5cdFx0bGV0IGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlcjogaW50ID0gMDtcblx0XHRpZiAoY29sdW1uV2l0aFNpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRcdC8vIElmIHRoZXJlJ3MgYSBzaXR1YXRpb25zIGluZGljYXRvciBjb2x1bW4sIHBsYWNlIHRoZSBkcmFmdCBzdGF0dXMgY29sdW1uIGJlZm9yZSBpdFxuXHRcdFx0Y29sdW1uSW5kZXhUb0luc2VydEFmdGVyID1cblx0XHRcdFx0dGFibGVDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiAoY29sdW1uIGFzIENvbXB1dGVkVGFibGVDb2x1bW4pLmlzU2l0dWF0aW9uc0luZGljYXRvciA9PT0gdHJ1ZSkgLSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPdGhlcndpc2UgcGxhY2UgdGhlIGRyYWZ0IHN0YXR1cyBjb2x1bW4gYWZ0ZXIgdGhlIGZpcnN0IHZpc2libGUgY29sdW1uXG5cdFx0XHRjb2x1bW5JbmRleFRvSW5zZXJ0QWZ0ZXIgPSB0YWJsZUNvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+IGNvbHVtbi5hdmFpbGFiaWxpdHkgIT09IFwiSGlkZGVuXCIpO1xuXHRcdH1cblx0XHR0YWJsZUNvbHVtbnMuc3BsaWNlKGNvbHVtbkluZGV4VG9JbnNlcnRBZnRlciArIDEsIDAsIGRyYWZ0SW5kaWNhdG9yQ29sdW1uKTtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbHVtbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBpc0FuYWx5dGljYWxUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cdGNvbnN0IGlzUmVzcG9uc2l2ZVRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb24gPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncy5wZXJzb25hbGl6YXRpb247XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGFibGUgcGVyc29uYWxpemF0aW9uIGZ1bGx5IGVuYWJsZWQuXG5cdFx0XHRzd2l0Y2ggKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkFuYWx5dGljYWxUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cCxBZ2dyZWdhdGVcIjtcblx0XHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVUYWJsZVwiOlxuXHRcdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cFwiO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBcIlNvcnQsQ29sdW1uLEZpbHRlclwiO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHBlcnNvbmFsaXphdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZ3JvdXAgJiYgKGlzQW5hbHl0aWNhbFRhYmxlIHx8IGlzUmVzcG9uc2l2ZVRhYmxlKSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmxlbmd0aCA+IDAgPyBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBObyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgfHwgX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlciwgY29udmVydGVyQ29udGV4dCkpIHtcblx0XHRcdFx0Ly8gRmVhdHVyZSBwYXJpdHkgd2l0aCBWMi5cblx0XHRcdFx0Ly8gRW5hYmxlIHRhYmxlIGZpbHRlcmluZyBieSBkZWZhdWx0IG9ubHkgaW4gY2FzZSBvZiBDb250cm9sIGxldmVsIHZhcmlhbnQgbWFuYWdlbWVudC5cblx0XHRcdFx0Ly8gT3Igd2hlbiB0aGUgTFIgZmlsdGVyIGJhciBpcyBoaWRkZW4gdmlhIG1hbmlmZXN0IHNldHRpbmdcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXHRcdGlmIChpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFJldHVybnMgYSBCb29sZWFuIHZhbHVlIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKlxuICogQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cbiAqIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RXcmFwcGVyIE1hbmlmZXN0IHNldHRpbmdzIGdldHRlciBmb3IgdGhlIHBhZ2VcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEJvb2xlYW4gc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqL1xuZnVuY3Rpb24gX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJlxuXHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNvcnQgY29uZGl0aW9ucyBmb3IgdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0UmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpLm5vblNvcnRhYmxlUHJvcGVydGllcztcblx0bGV0IHNvcnRDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyVHlwZVtdID0gW107XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHtcblx0XHRcdHNvcnRlcnM6IHNvcnRlcnNcblx0XHR9O1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlNvcnRPcmRlci5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvblByb3BlcnR5ID0gY29uZGl0aW9uLlByb3BlcnR5O1xuXHRcdFx0aWYgKGNvbmRpdGlvblByb3BlcnR5Py4kdGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgIW5vblNvcnRhYmxlUHJvcGVydGllcy5pbmNsdWRlcyhjb25kaXRpb25Qcm9wZXJ0eS4kdGFyZ2V0Lm5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IGluZm9OYW1lID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhbY29uZGl0aW9uUHJvcGVydHldLCBjb2x1bW5zKVswXTtcblx0XHRcdFx0aWYgKGluZm9OYW1lKSB7XG5cdFx0XHRcdFx0Y29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRzb3J0Q29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeShjb25kaXRpb25zKSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnM7XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgbGV2ZWwgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Jbml0aWFsRXhwYW5zaW9uTGV2ZWw/LnZhbHVlT2YoKTtcblx0cmV0dXJuIHR5cGVvZiBsZXZlbCA9PT0gXCJudW1iZXJcIiA/IGxldmVsIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXRocyBUaGUgYXJyYXkgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gY29sdW1ucyBUaGUgYXJyYXkgb2YgcHJvcGVydHlJbmZvc1xuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMocGF0aHM6IFByb3BlcnR5UGF0aFtdLCBjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogc3RyaW5nW10ge1xuXHRjb25zdCBpbmZvTmFtZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBwcm9wZXJ0eUluZm86IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCBhbm5vdGF0aW9uQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdHBhdGhzLmZvckVhY2goKGN1cnJlbnRQYXRoKSA9PiB7XG5cdFx0aWYgKGN1cnJlbnRQYXRoPy52YWx1ZSkge1xuXHRcdFx0cHJvcGVydHlJbmZvID0gY29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRcdHJldHVybiAhYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBjdXJyZW50UGF0aD8udmFsdWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChwcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0aW5mb05hbWVzLnB1c2gocHJvcGVydHlJbmZvLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGdyb3VwIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR0YWJsZVR5cGU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRsZXQgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5O1xuXHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdGFHcm91cEJ5ID0gYUdyb3VwQnkuc2xpY2UoMCwgMSk7XG5cdFx0fVxuXHRcdGNvbnN0IGFHcm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcCgoaW5mb05hbWUpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cdFx0Z3JvdXBDb25kaXRpb25zID0gYUdyb3VwTGV2ZWxzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KHsgZ3JvdXBMZXZlbHM6IGFHcm91cExldmVscyB9KSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZ3JvdXBDb25kaXRpb25zO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjb2x1bW4ncyBwcm9wZXJ0eUluZm9zIG9mIGEgYW5hbHl0aWNhbCB0YWJsZSBpbnRlZ3JhdGluZyBhbGwgZXh0ZW5zaW9ucyBhbmQgYmluZGluZy1yZWxldmFudCBwcm9wZXJ0eSBpbmZvIHBhcnQuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHZvaWQge1xuXHRjb25zdCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSA9IE9iamVjdC5rZXlzKHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzISkuZmluZCgoYWdncmVnYXRlKSA9PiBhZ2dyZWdhdGUgPT09IGNvbHVtbi5uYW1lKTtcblx0XHRpZiAoYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24gPSB0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyFbYWdncmVnYXRhYmxlUHJvcGVydHlOYW1lXTtcblx0XHRcdGNvbHVtbi5hZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0Y29sdW1uLmV4dGVuc2lvbiA9IHtcblx0XHRcdFx0Y3VzdG9tQWdncmVnYXRlOiBhZ2dyZWdhdGFibGVQcm9wZXJ0eURlZmluaXRpb24uZGVmYXVsdEFnZ3JlZ2F0ZSA/PyB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubGVuZ3RoKSB7XG5cdFx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MuZm9yRWFjaCgoYWRkaXRpb25hbFByb3BlcnR5SW5mbykgPT4ge1xuXHRcdFx0XHQvLyBDcmVhdGUgcHJvcGVydHlJbmZvIGZvciBlYWNoIGFkZGl0aW9uYWwgcHJvcGVydHkuXG5cdFx0XHRcdC8vIFRoZSBuZXcgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5X1RlY2huaWNhbDo6JyBmb3IgdW5pcXVlbmVzcyBhbmQgaXQgaGFzIGJlZW4gbmFtZWQgdGVjaG5pY2FsIHByb3BlcnR5IGFzIGl0IHJlcXVpcmVzIGRlZGljYXRlZCBNREMgYXR0cmlidXRlcyAodGVjaG5pY2FsbHlHcm91cGFibGUgYW5kIHRlY2huaWNhbGx5QWdncmVnYXRhYmxlKS5cblx0XHRcdFx0Y3JlYXRlVGVjaG5pY2FsUHJvcGVydHkoYWRkaXRpb25hbFByb3BlcnR5SW5mbywgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLm1hcChcblx0XHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHRcdCk7XG5cdFx0XHQvLyBBZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHRoZSBjb21wbGV4IHByb3BlcnR5IHVzaW5nIHRoZSBoaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/LmNvbmNhdChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpO1xuXHRcdH1cblx0fSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIHNldCBvbiB0aGUgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgIFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBwYXRocyBvZiB0aGUgcmVzdHJpY3RlZCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldFJlcXVpcmVkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBQcm9wZXJ0eVBhdGhbXSB7XG5cdHJldHVybiBnZXRDb250ZXh0UHJvcGVydHlSZXN0cmljdGlvbihcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHQoY2FwYWJpbGl0aWVzKSA9PiB7XG5cdFx0XHRyZXR1cm4gKGNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfCB1bmRlZmluZWQpPy5JbnNlcnRSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcztcblx0XHR9LFxuXHRcdGZhbHNlXG5cdCk7XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb3BlcnR5IGlzIGFubm90YXRlZCBhcyBhIHJlcXVpcmVkIHByb3BlcnR5LlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXF1aXJlZFxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRlZFJlcXVpcmVkUHJvcGVydHkobmFtZTogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0cmV0dXJuIGdldFJlcXVpcmVkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdC5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS4kdGFyZ2V0Py5mdWxseVF1YWxpZmllZE5hbWUpXG5cdFx0LmluY2x1ZGVzKG5hbWUpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBhZ2dyZWdhdGUgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gYWdncmVnYXRlc0RlZmluaXRpb25zXG4gKiBAcmV0dXJucyBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGFnZ3JlZ2F0ZXNEZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT5cbik6IHN0cmluZyB7XG5cdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVzW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucykge1xuXHRcdFx0YWdncmVnYXRlc1trZXldID0ge307XG5cdFx0fVxuXHR9XG5cdHJldHVybiBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcbn1cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0aW9uQmVoYXZpb3VyOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdO1xuXHRjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhbjtcblx0c3RhbmRhcmRBY3Rpb25zOiB7XG5cdFx0W2tleSBpbiBcImNyZWF0ZVwiIHwgXCJkZWxldGVcIiB8IFwicGFzdGVcIiB8IFwibWFzc0VkaXRcIiB8IFwiaW5zaWdodHNcIiB8IFwiY3JlYXRpb25Sb3dcIiB8IFwiY3V0XCJdOiBTdGFuZGFyZEFjdGlvbjtcblx0fTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHN0YW5kYXJkIGFjdGlvbnMgYW5kIGFkamFjZW50IHByb3BlcnRpZXMgdGhhdCBhcmUgbmVlZGVkIGluIHRoZSBmdXJ0aGVyIGNvbnZlcnNpb24gcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIFRoZSB0YWJsZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBTdGFuZGFyZCBhY3Rpb25zIGFuZCBjb25uZWN0ZWQgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuXHQpO1xuXHRjb25zdCBjdXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkID0gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dClcblx0KTtcblx0Y29uc3Qgc3RhbmRhcmRBY3Rpb25zID0ge1xuXHRcdGN1dDogZ2V0U3RhbmRhcmRBY3Rpb25DdXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0aW5zaWdodHM6IGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KVxuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdGN1dEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkLFxuXHRcdHN0YW5kYXJkQWN0aW9uc1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbjogU3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbixcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVxuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiB7XG5cdC8vIE5lZWQgdG8gZ2V0IHRoZSB0YXJnZXRcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0eXBlTmFtZVBsdXJhbCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgdGl0bGUgPSB0eXBlTmFtZVBsdXJhbCAmJiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odHlwZU5hbWVQbHVyYWwpKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gZ2V0VGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBnZXRUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb25Nb2RlID0gZ2V0U2VsZWN0aW9uTW9kZShcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRoYXNBYnNvbHV0ZVBhdGgsXG5cdFx0dGFyZ2V0Q2FwYWJpbGl0aWVzLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29uZmlndXJhdGlvbi5tYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uY3V0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb25cblx0KTtcblx0bGV0IHRocmVzaG9sZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyAxMCA6IDMwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zKSB7XG5cdFx0dGhyZXNob2xkID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMudmFsdWVPZigpO1xuXHR9IGVsc2UgaWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHQvLyBUbyBtYWtlIHNjcm9sbGluZyBzbW9vdGgsIHdlIHNldCB0aGUgdGhyZXNob2xkIHZhbHVlIGhpZ2hlciBmb3IgdHJlZSB0YWJsZXNcblx0XHR0aHJlc2hvbGQgPSAyMDA7XG5cdH1cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0ZW50aXR5VHlwZU5hbWU6IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuZW50aXR5VHlwZSA/IGVudGl0eVNldC5lbnRpdHlUeXBlLm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGVcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkLFxuXHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dCksXG5cdFx0ZGlzcGxheU1vZGU6IGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSxcblx0XHRjcmVhdGU6IHN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24uY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dClcblx0XHRcdC5maWx0ZXIoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eT8uJHRhcmdldD8udHlwZSAhPT0gXCJFZG0uQm9vbGVhblwiKVxuXHRcdFx0Lm1hcCgocHJvcGVydHkpID0+IHByb3BlcnR5LnZhbHVlKVxuXHR9O1xufVxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIHR5cGUgb2YgYSBjb2x1bW4gZm9yIHRoZSBleHBvcnQuXG4gKlxuICogQHBhcmFtIGRhdGFUeXBlIFRoZSBkYXRhIHR5cGUgb2YgYSBwcm9wZXJ0eSwgY29sdW1uXG4gKiBAcGFyYW0gaXNBVGltZXpvbmUgSXMgdGhlIGdpdmVuIHByb3BlcnR5IGEgdGltZXpvbmVcbiAqIEBwYXJhbSBpc0N1cnJlbmN5IElzIHRoZSBnaXZlbiBwcm9wZXJ0eSBhIGN1cnJlbmN5XG4gKiBAcGFyYW0gZXhwb3J0U2V0dGluZ3MgVGhlIGFscmVhZHkgZGV0ZWN0ZWQgZXhwb3J0IHNldHRpbmdzIGZyb20gZGF0YWZpZWxkc1xuICogQHJldHVybnMgVGhlIHN1cHBvcnRlZCBleHBvcnQgdHlwZVxuICovXG5mdW5jdGlvbiBnZXRFeHBvcnREYXRhVHlwZShcblx0ZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNBVGltZXpvbmUgPSBmYWxzZSxcblx0aXNDdXJyZW5jeSA9IGZhbHNlLFxuXHRleHBvcnRTZXR0aW5ncz86IENvbHVtbkV4cG9ydFNldHRpbmdzXG4pOiBzdHJpbmcge1xuXHRsZXQgZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRpZiAoIWRhdGFUeXBlIHx8IGV4cG9ydFNldHRpbmdzPy5kYXRhUG9pbnRUYXJnZXRWYWx1ZSkge1xuXHRcdHJldHVybiBleHBvcnREYXRhVHlwZTtcblx0fVxuXHRpZiAoZXhwb3J0U2V0dGluZ3M/LmlzQ3VycmVuY3kgfHwgaXNDdXJyZW5jeSkge1xuXHRcdHJldHVybiBcIkN1cnJlbmN5XCI7XG5cdH1cblx0aWYgKGlzQVRpbWV6b25lKSB7XG5cdFx0cmV0dXJuIFwiVGltZXpvbmVcIjtcblx0fVxuXHRpZiAoZXhwb3J0U2V0dGluZ3M/LndyYXApIHtcblx0XHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG5cdH1cblx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdGNhc2UgXCJFZG0uRGVjaW1hbFwiOlxuXHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0Y2FzZSBcIkVkbS5Eb3VibGVcIjpcblx0XHRjYXNlIFwiRWRtLkJ5dGVcIjpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJOdW1iZXJcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZU9mVGltZVwiOlxuXHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJUaW1lXCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJCb29sZWFuXCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHR9XG5cdHJldHVybiBleHBvcnREYXRhVHlwZTtcbn1cbi8qKlxuICogU3BsaXRzIHRoZSB2aXN1YWxpemF0aW9uIHBhdGggaW50byBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgc3BsaXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpOiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZzsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9IHtcblx0Y29uc3QgW3RhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoXSA9IHZpc3VhbGl6YXRpb25QYXRoLnNwbGl0KFwiQFwiKTtcblx0bGV0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB0YXJnZXROYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRyZXR1cm4geyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHNlbGVjdGlvblZhcmlhbnRQYXRoKTtcblx0Y29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb25WYXJpYW50ID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50O1xuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAoIXByb3BlcnR5TmFtZXMuaW5jbHVkZXMocHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2gocHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cbmZ1bmN0aW9uIF9nZXRNdWx0aVNlbGVjdE1vZGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cbmZ1bmN0aW9uIF9nZXRUYWJsZU1vZGUoXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhblxuKTogeyByb3dDb3VudE1vZGU/OiBUYWJsZVJvd0NvdW50TW9kZTsgcm93Q291bnQ/OiBudW1iZXIgfSB7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiAzXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlID8/IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPyB0YWJsZVNldHRpbmdzLnJvd0NvdW50IDogNVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQoX3RhYmxlVHlwZTogVGFibGVUeXBlLCBfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCAmJiBfdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0PyBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dFxuXHRcdDogZmFsc2U7XG59XG5mdW5jdGlvbiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xufVxuZnVuY3Rpb24gX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgPyBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgOiAxO1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVuYWJsZVBhc3RlOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0ICE9PSB1bmRlZmluZWRcblx0XHQ/IHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0XG5cdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIiB8fCBlbmFibGVQYXN0ZTtcbn1cbmZ1bmN0aW9uIF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZnJvemVuQ29sdW1uQ291bnQ7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciB2YWx1ZSBmcm9tIHRoZSB0YWJsZVNldHRpbmdzIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gdGFibGVTZXR0aW5ncyBUYWJsZVNldHRpbmdzIE9iamVjdFxuICogQHJldHVybnMgUmV0dXJucyB0aGUgdmFsdWUgb2Ygd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgb3IgZmFsc2VcbiAqL1xuZnVuY3Rpb24gX2dldFdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyKHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3Mud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlckNvbmZpZ3VyYXRpb24oXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkXG4pOiB7XG5cdGZpbHRlcnM6IFBhcnRpYWw8UmVjb3JkPFwicXVpY2tGaWx0ZXJzXCIgfCBcImhpZGRlbkZpbHRlcnNcIiwgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbj4+O1xuXHRoZWFkZXJWaXNpYmxlOiBib29sZWFuO1xufSB7XG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRjb25zdCBmaWx0ZXJzOiBQYXJ0aWFsPFJlY29yZDxcInF1aWNrRmlsdGVyc1wiIHwgXCJoaWRkZW5GaWx0ZXJzXCIsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+PiA9IHt9O1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRpZiAodGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24pIHtcblx0XHRjb25zdCBxdWlja0ZpbHRlclBhdGhzID0gKHRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uLnBhdGhzID8/IFtdKS5yZWR1Y2UoXG5cdFx0XHQoZmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10sIHBhdGgpID0+IHtcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aC5hbm5vdGF0aW9uUGF0aCkpIHtcblx0XHRcdFx0XHRmaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpbHRlclBhdGhzO1xuXHRcdFx0fSxcblx0XHRcdFtdXG5cdFx0KTtcblx0XHRpZiAocXVpY2tGaWx0ZXJQYXRocy5sZW5ndGgpIHtcblx0XHRcdGZpbHRlcnMucXVpY2tGaWx0ZXJzID0ge1xuXHRcdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzLnF1aWNrVmFyaWFudFNlbGVjdGlvbi5zaG93Q291bnRzLFxuXHRcdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblx0aWYgKHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0LyoqXG5cdFx0ICogUHJvdmlkZSBTZWxlY3Rpb24gVmFyaWFudCB0byBoaWRkZW5GaWx0ZXJzIGluIG9yZGVyIHRvIHNldCB0aGUgU1YgZmlsdGVycyB0byB0aGUgdGFibGUuXG5cdFx0ICogTURDIFRhYmxlIG92ZXJyaWRlcyBiaW5kaW5nIEZpbHRlciBhbmQgZnJvbSBTQVAgRkUgdGhlIG9ubHkgbWV0aG9kIHdoZXJlIHdlIGFyZSBhYmxlIHRvIGFkZFxuXHRcdCAqIGFkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHQgKiBUbyBhdm9pZCBpbXBsZW1lbnRpbmcgc3BlY2lmaWMgTFIgZmVhdHVyZSB0byBTQVAgRkUgTWFjcm8gVGFibGUsIHRoZSBmaWx0ZXIocykgIG5vdCBtYW5hZ2VkIGJ5IHRoZSBGaWx0ZXJCYXJcblx0XHQgKiBjYW4gYmUgcGFzc2VkIHRvIG1hY3JvIHRhYmxlIHZpYSBwYXJhbWV0ZXIvY29udGV4dCBuYW1lZCBmaWx0ZXJzIGFuZCBrZXkgaGlkZGVuRmlsdGVycy5cblx0XHQgKi9cblx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSB7IHBhdGhzOiBbeyBhbm5vdGF0aW9uUGF0aDogYEAke3NlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV19YCB9XSB9O1xuXHR9XG5cblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEoZmlsdGVycz8ucXVpY2tGaWx0ZXJzICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuLyoqXG4gKiBBZGRzIHRoZSB0b29sdGlwIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gY29sdW1uLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgcmVmZXJlbmNlZCBvbiB0aGUgY29sdW1uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gdG8gYmUgdXBkYXRlZFxuICovXG5mdW5jdGlvbiBfYWRkVG9vbFRpcChwcm9wZXJ0eTogUHJvcGVydHksIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdGNvbnN0IHRvb2x0aXAgPSBfZ2V0VG9vbHRpcChwcm9wZXJ0eSkgPz8gY29sdW1uLmxhYmVsO1xuXHRpZiAodG9vbHRpcCkge1xuXHRcdGNvbHVtbi50b29sdGlwID0gdG9vbHRpcDtcblx0fVxufVxuZnVuY3Rpb24gX2dldENvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyhcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCByZWxhdGl2ZVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaCgobmF2UHJvcGVydHkpID0+IHtcblx0XHRcdGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscy5wdXNoKGdldExhYmVsKG5hdlByb3BlcnR5KSB8fCBuYXZQcm9wZXJ0eS5uYW1lKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzO1xuXHR9XG59XG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGFjdGlvbiB3aWxsIGhhdmUgYW4gZXhwcmVzc2lvbiBmb3IgZW5hYmxlbWVudCBnZW5lcmF0ZWQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIGNvbnRhaW5pbmcgYW4gYWN0aW9uXG4gKiBAcGFyYW0gc0VudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5IGZvciB0ZW1wbGF0aW5nXG4gKiBAcmV0dXJucyBXaGV0aGVyIGFuIGV4cHJlc3Npb24gZm9yIGVuYWJsZW1lbnQgaXMgdG8gYmUgZ2VuZXJhdGVkXG4gKi9cbmZ1bmN0aW9uIF91c2VFbmFibGVkRXhwcmVzc2lvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBzRW50aXR5VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdC8vIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyB3aGVuIGEgdGFibGUgYWN0aW9uIGhhcyBhbiBPcGVyYXRpb25BdmFpbGFibGUgdGhhdCBsZWFkcyB0byBhbiBlbmFibGVtZW50IGV4cHJlc3Npb25cblx0Ly8gYW5kIGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgdGFibGUgZW50cmllcy5cblx0Ly8gMS4gQW4gYWN0aW9uIHdpdGggYW4gb3ZlcmxvYWQsIHRoYXQgaXMgZXhlY3V0ZWQgYWdhaW5zdCBhIHBhcmVudCBlbnRpdHkuXG5cdC8vIDIuIEFuIHVuYm91bmQgYWN0aW9uXG5cdC8vIDMuIEEgc3RhdGljIGFjdGlvbiAodGhhdCBpcywgYm91bmQgdG8gYSBjb2xsZWN0aW9uKVxuXHRsZXQgdXNlRW5hYmxlZEV4cHJlc3Npb24gPSBmYWxzZTtcblx0aWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmICghZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCkge1xuXHRcdFx0Ly8gVW5ib3VuZCBhY3Rpb24uIElzIHJlY29nbmlzZWQsIGJ1dCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gY2hlY2tzIGZvciBpc0JvdW5kID0gdHJ1ZSwgc28gbm90IGdlbmVyYXRlZC5cblx0XHRcdHVzZUVuYWJsZWRFeHByZXNzaW9uID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uc291cmNlVHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdC8vIE92ZXJsb2FkIGFjdGlvblxuXHRcdFx0dXNlRW5hYmxlZEV4cHJlc3Npb24gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8ucGFyYW1ldGVyc1swXS5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdC8vIFN0YXRpYyBhY3Rpb25cblx0XHRcdHVzZUVuYWJsZWRFeHByZXNzaW9uID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVzZUVuYWJsZWRFeHByZXNzaW9uO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIGNvbnRyb2wgY29uZmlndXJhdGlvbiB3aXRoIFRyZWUtVGFibGUgc3BlY2lmaWMgaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHRhYmxlQ29uZmlndXJhdGlvbiBUaGUgdGFibGUgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHRhYmxlU2V0dGluZ3MgU2V0dGluZ3MgZnJvbSB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRyZWVUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0dGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHZvaWQge1xuXHR0YWJsZUNvbmZpZ3VyYXRpb24uaGllcmFyY2h5UXVhbGlmaWVyID0gdGFibGVTZXR0aW5ncy5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdGNvbnN0IGhpZXJhcmNoeVBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRIaWVyYXJjaHlQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHlQYXRoKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dGFibGVDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciFcblx0KTtcblx0Y29uc3Qgbm9uVXBkYXRhYmxlTmF2aWdhdGlvblByb3BlcnRpZXMgPSBnZXROb25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcyhkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSA9ICFub25VcGRhdGFibGVOYXZpZ2F0aW9uUHJvcGVydGllcz8uaW5jbHVkZXMoaGllcmFyY2h5UGFyZW50TmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5pc05vZGVNb3ZhYmxlID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuaXNOb2RlTW92YWJsZSwgdGFibGVDb25maWd1cmF0aW9uKTtcblx0dGFibGVDb25maWd1cmF0aW9uLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdHRhYmxlQ29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50ID0gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pc0NyZWF0ZUVuYWJsZWQsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cblx0aWYgKHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5ub2RlVHlwZT8ucHJvcGVydHlOYW1lICYmIHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5ub2RlVHlwZT8udmFsdWVzKSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGUubm9kZVR5cGUudmFsdWVzO1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5ub2RlVHlwZSA9IHtcblx0XHRcdHByb3BlcnR5TmFtZTogdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGUubm9kZVR5cGUucHJvcGVydHlOYW1lLFxuXHRcdFx0dmFsdWVzOiBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHR0ZXh0OiB2YWx1ZXNbdmFsdWVdXG5cdFx0XHRcdH07XG5cdFx0XHR9KVxuXHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VzdG9tRnVuY3Rpb25JbmZvKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHRhYmxlQ29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbik6IEV4dGVybmFsTWV0aG9kQ29uZmlnIHwgdW5kZWZpbmVkIHtcblx0aWYgKCF2YWx1ZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgbGFzdERvdEluZGV4ID0gdmFsdWUubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXHRjb25zdCBtb2R1bGVOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIik7XG5cdGNvbnN0IG1ldGhvZE5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSk7XG5cblx0Ly8gQWRkIHRoZSBjdXN0b20gbW9kdWxlIGluIHRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXMgaWYgbmVjZXNzYXJ5XG5cdGlmICghbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiL2V4dGVuc2lvbi9cIikpIHtcblx0XHRpZiAoIXRhYmxlQ29uZmlndXJhdGlvbi5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzKSB7XG5cdFx0XHR0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA9IFttb2R1bGVOYW1lXTtcblx0XHR9IGVsc2UgaWYgKCF0YWJsZUNvbmZpZ3VyYXRpb24uYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xuXHRcdFx0dGFibGVDb25maWd1cmF0aW9uLmFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMucHVzaChtb2R1bGVOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtb2R1bGVOYW1lLCBtZXRob2ROYW1lIH07XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRhYmxlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBvcHRpbWlzdGljIGJhdGNoIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiBAcmV0dXJucyBUcnVlIGlmIE9wdGltaXN0aWMgYmF0Y2ggbW9kZSBpcyBkaXNhYmxlZFxuICovXG5mdW5jdGlvbiBnZXRPcHRpbWlzdGljQmF0Y2hTZXR0aW5nc0Zyb21NYW5pZmVzdCh0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdC8vIE9wdGltaXN0aWMgYmF0Y2ggaXMgc2V0IGJ5IGRlZmF1bHRcblx0cmV0dXJuIHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8uZGlzYWJsZVJlcXVlc3RDYWNoZSB8fCBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0ID0gZmFsc2UsXG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogU2VsZWN0aW9uVmFyaWFudFR5cGVcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBfbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3MgPz8ge307XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGRpc2FibGVDb3B5VG9DbGlwYm9hcmQgPSB0YWJsZVNldHRpbmdzLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQ7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIkFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBsaW5lSXRlbUFubm90YXRpb25cblx0XHQ/IGdldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbilcblx0XHQ6IHt9O1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCBleHBvcnRSZXF1ZXN0U2l6ZSA9IHRhYmxlU2V0dGluZ3MuZXhwb3J0UmVxdWVzdFNpemU7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IGdldFRhYmxlVHlwZShjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MpO1xuXHQvLyBCeSBkZWZhdWx0LCBwYXN0ZSBpcyBlbmFibGVkIG9uIGFuIE9iamVjdFBhZ2UgYW5kIG9uIGEgTGlzdFJlcG9ydCB3aXRoIGEgZHJhZnQgVHJlZVRhYmxlXG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlID8/XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiIHx8XG5cdFx0XHQodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiICYmIChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpKTtcblx0Y29uc3QgdGFibGVSb3dNb2RlID0gX2dldFRhYmxlTW9kZSh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MsIHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpO1xuXHRjb25zdCBjb25kZW5zZWRUYWJsZUxheW91dCA9IF9nZXRDb25kZW5zZWRUYWJsZUxheW91dCh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MpO1xuXHRsZXQgaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9IGZhbHNlO1xuXHRpZiAodGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUpIHtcblx0XHRpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID1cblx0XHRcdHR5cGVvZiB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlID09PSBcInRydWVcIlxuXHRcdFx0XHQ6IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlO1xuXHR9XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGZyb3plbkNvbHVtbkNvdW50OiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IF9nZXRXaWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcih0YWJsZVNldHRpbmdzKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCkpLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdCxcblx0XHRlbmFibGVBZGRDYXJkVG9JbnNpZ2h0czogdGFibGVTZXR0aW5ncz8uZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMsXG5cdFx0ZW5hYmxlUGFzdGU6IGVuYWJsZVBhc3RlLFxuXHRcdGRpc2FibGVDb3B5VG9DbGlwYm9hcmQ6IGRpc2FibGVDb3B5VG9DbGlwYm9hcmQsXG5cdFx0aGVhZGVyVmlzaWJsZTogdHJ1ZSxcblx0XHRoZWFkZXI6IHRhYmxlU2V0dGluZ3MuaGVhZGVyLFxuXHRcdG11bHRpU2VsZWN0TW9kZTogX2dldE11bHRpU2VsZWN0TW9kZSh0YWJsZVNldHRpbmdzLCB0YWJsZVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd0NvdW50OiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU6IGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUsXG5cdFx0c2hvd1Jvd0NvdW50OiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24gPyBmYWxzZSA6ICFfbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk/LnNob3dDb3VudHMsXG5cdFx0dHlwZTogdGFibGVUeXBlLFxuXHRcdGRpc2FibGVSZXF1ZXN0Q2FjaGU6IGdldE9wdGltaXN0aWNCYXRjaFNldHRpbmdzRnJvbU1hbmlmZXN0KHRhYmxlTWFuaWZlc3RTZXR0aW5ncyksXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0aXNDb21wYWN0VHlwZTogX21hbmlmZXN0V3JhcHBlci5pc0NvbXBhY3RUeXBlKCksXG5cdFx0YmVmb3JlUmViaW5kVGFibGU6IHRhYmxlU2V0dGluZ3MuYmVmb3JlUmViaW5kVGFibGUsXG5cdFx0ZXhwb3J0UmVxdWVzdFNpemU6IGV4cG9ydFJlcXVlc3RTaXplXG5cdH07XG5cblx0Y29uc3QgdGFibGVDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4udGFibGVSb3dNb2RlLCAuLi5vRmlsdGVyQ29uZmlndXJhdGlvbiB9O1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dXBkYXRlVHJlZVRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRhYmxlQ29uZmlndXJhdGlvbiwgdGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHR9XG5cdGlmICh0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkNoYW5nZSkge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25DaGFuZ2UgPSBnZXRDdXN0b21GdW5jdGlvbkluZm8odGFibGVTZXR0aW5ncy5zZWxlY3Rpb25DaGFuZ2UsIHRhYmxlQ29uZmlndXJhdGlvbik7XG5cdH1cblx0aWYgKHRhYmxlU2V0dGluZ3MuaGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dGFibGVDb25maWd1cmF0aW9uLmhlYWRlclZpc2libGUgPSB0YWJsZVNldHRpbmdzLmhlYWRlclZpc2libGU7XG5cdH1cblxuXHRyZXR1cm4gdGFibGVDb25maWd1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dGFibGVNYW5pZmVzdFNldHRpbmdzPzogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVHlwZSB7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnR5cGUpIHtcblx0XHQvLyBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYSB0YWJsZSB0eXBlIHdlIHdpbGwgdXNlIHRoaXMgb25lXG5cdFx0cmV0dXJuIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnR5cGU7XG5cdH1cblxuXHQvLyBjaGVjayBpZiBVcGxvYWRUYWJsZSBzaGFsbCBiZSB1c2VkXG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5NZWRpYVJlc291cmNlPy5TdHJlYW0pIHtcblx0XHRyZXR1cm4gXCJVcGxvYWRUYWJsZVwiO1xuXHR9XG5cblx0Ly8gZGVmYXVsdCBpcyB0aGUgUmVzcG9uc2l2ZVRhYmxlXG5cdHJldHVybiBcIlJlc3BvbnNpdmVUYWJsZVwiO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwcm9wZXJ0eSB1c2luZyB0aGUgdGV4dCBhcnJhbmdlbWVudCBhbm5vdGF0aW9uIHNldCB0byB0ZXh0IG9ubHkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgY29ycmVzcG9uZGluZyBEYXRhTW9kZWxPYmplY3RQYXRoLlxuICogQHBhcmFtIGxpbmVJdGVtIFRoZSBjb2x1bW4gdG8gYmUgZXZhbHVhdGVkLlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgbGlzdCBvZiBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHQuXG4gKiBAcGFyYW0gcmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzIFRoZSBleGlzdGluZyByZXN0cmljdGlvbnMgb24gcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eUFubm90YXRlZFRleHRPbmx5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0bGluZUl0ZW06IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0cmVzdHJpY3Rpb25zT25Qcm9wZXJ0aWVzOiBSZXN0cmljdGlvbnNPblByb3BlcnRpZXNcbik6IHZvaWQge1xuXHRjb25zdCBpc1Byb3BlcnR5TmF2aWdhdGVkID1cblx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoICE9PSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGg7XG5cdGlmIChpc1Byb3BlcnR5TmF2aWdhdGVkICYmIGlzRGF0YUZpZWxkKGxpbmVJdGVtKSkge1xuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtyZWxhdGl2ZVBhdGhdID0gbGluZUl0ZW0uVmFsdWUuJHRhcmdldDtcblx0XHRyZXN0cmljdGlvbnNPblByb3BlcnRpZXMubm9uU29ydGFibGVQcm9wZXJ0aWVzLnB1c2gocmVsYXRpdmVQYXRoKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZEZvckFubm90YXRpb24obGluZUl0ZW0pICYmIGhhc0ZpZWxkR3JvdXBUYXJnZXQobGluZUl0ZW0pKSB7XG5cdFx0KGxpbmVJdGVtLlRhcmdldC4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApLkRhdGEuZm9yRWFjaCgoZmllbGQpID0+IHtcblx0XHRcdGlmIChpc0RhdGFGaWVsZChmaWVsZCkgJiYgZ2V0RGlzcGxheU1vZGUoZmllbGQuVmFsdWUuJHRhcmdldCkgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRjb25zdCBpbmhlcmVkUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0ZmllbGQuVmFsdWUucGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBpc0luaGVyZWRQcm9wZXJ0eU5hdmlnYXRlZCA9XG5cdFx0XHRcdFx0aW5oZXJlZFByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggIT09XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkubmF2aWdhdGlvblByb3BlcnRpZXMubGVuZ3RoO1xuXHRcdFx0XHRpZiAoaXNJbmhlcmVkUHJvcGVydHlOYXZpZ2F0ZWQpIHtcblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbZmllbGQuVmFsdWUucGF0aF0gPSBmaWVsZC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdHJlc3RyaWN0aW9uc09uUHJvcGVydGllcy5ub25Tb3J0YWJsZVByb3BlcnRpZXMucHVzaChmaWVsZC5WYWx1ZS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgdW5kZWZpbmVkLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nO1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBpc1R5cGVEZWZpbml0aW9uKG9Qcm9wZXJ0eS50YXJnZXRUeXBlKVxuXHRcdFx0PyBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50YXJnZXRUeXBlLnVuZGVybHlpbmdUeXBlXVxuXHRcdFx0OiBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50eXBlXTtcblx0fVxuXHRpZiAob1RhcmdldE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiBkYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWc6IFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZz8udHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSAmJiBvVGFyZ2V0TWFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5Jc0RpZ2l0U2VxdWVuY2V9YF0gJiZcblx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IGZhbHNlXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufVxuLyoqXG4gKiBBZGQgYSBkZXNjcmlwdGlvbiBwcm9wZXJ0eSB0byB0aGUgbGlzdCBvZiBkZXNjcmlwdGlvbiBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIGNvbHVtbnMgb2YgYSB0YWJsZVxuICpcbiAqIEBwYXJhbSB0ZXh0UHJvcGVydGllcyBUaGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHJlZmVyZW5jZWQgYXMgdGV4dCBvbiBhIHRleHQgYXJyYW5nZW1lbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGxpbmtlZCB0byB0aGUgY29sdW1uIChuYW1lZCBhbHNvIGNvbXBsZXggcHJvcGVydHkpXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnR5TmFtZSBUaGUgcHJvcGVydHkgbmFtZSB0byBiZSBhZGRlZFxuICovXG5cbmZ1bmN0aW9uIGFkZFByb3BlcnR5VG9EaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwKFxuXHRkaXNwbGF5TW9kZU9mRGVzY3JpcHRpb25Qcm9wZXJ0aWVzTWFwOiBSZWNvcmQ8c3RyaW5nLCBEaXNwbGF5TW9kZT4sXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyxcblx0cmVsYXRlZFByb3BlcnR5TmFtZTogc3RyaW5nXG4pOiB2b2lkIHtcblx0aWYgKFxuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdLmRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uICYmXG5cdFx0IWRpc3BsYXlNb2RlT2ZEZXNjcmlwdGlvblByb3BlcnRpZXNNYXBbcmVsYXRlZFByb3BlcnR5TmFtZV1cblx0KSB7XG5cdFx0ZGlzcGxheU1vZGVPZkRlc2NyaXB0aW9uUHJvcGVydGllc01hcFtyZWxhdGVkUHJvcGVydHlOYW1lXSA9XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tyZWxhdGVkUHJvcGVydHlOYW1lXS5kaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbiE7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcmVmZXJlbmNlZCBwcm9wZXJ0aWVzIG9mIGEgTGluZUl0ZW0gaW4gY2FzZSB0aGUgTGluZUl0ZW0gaXMgYW5ub3RhdGVkIGFzIGhpZGRlbi5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmdDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmcm9tIExpbmVJdGVtcyBhbmQgZnJvbSBwcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGVcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGdpdmVuIGNvbHVtbiBmcm9tIGxpbmVJdGVtIG9yIHByb3BlcnR5IG9mIGVudGl0eVNldFxuICovXG5mdW5jdGlvbiBjb21wdXRlSGlkZGVuT25SZWxhdGVkQ29sdW1ucyhleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLCBuYW1lOiBzdHJpbmcsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogdm9pZCB7XG5cdGNvbnN0IHJlbGF0ZWRBbm5vdGF0aW9uQ29sdW1ucyA9IGV4aXN0aW5nQ29sdW1ucy5maWx0ZXIoXG5cdFx0KGV4aXN0aW5nQ29sdW1uKSA9PiBleGlzdGluZ0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSAmJiBleGlzdGluZ0NvbHVtbi5pc1BhcnRPZkxpbmVJdGVtXG5cdCk7XG5cdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gISFyZWxhdGVkQW5ub3RhdGlvbkNvbHVtbnMubGVuZ3RoO1xuXHRpZiAoXG5cdFx0cmVsYXRlZEFubm90YXRpb25Db2x1bW5zLmxlbmd0aCAmJlxuXHRcdCFyZWxhdGVkQW5ub3RhdGlvbkNvbHVtbnM/LnNvbWUoKGFubm90YXRpb25Db2x1bW4pID0+IGFubm90YXRpb25Db2x1bW4uYXZhaWxhYmlsaXR5ICE9PSBcIkhpZGRlblwiKVxuXHQpIHtcblx0XHRjb2x1bW4uc29ydGFibGUgPSBmYWxzZTtcblx0XHRjb2x1bW4uaXNHcm91cGFibGUgPSBmYWxzZTtcblx0XHRjb2x1bW4uZmlsdGVyYWJsZSA9IGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwb3J0IHNldHRpbmdzIHByb3BlcnRpZXMgb2YgYSBtYW5pZmVzdCBjb2x1bW4uXG4gKlxuICogQHBhcmFtIGV4cG9ydFNldHRpbmdzIFRoZSBjdXN0b21pemVkL292ZXJ3cml0dGVuIGV4cG9ydCBzZXR0aW5ncyBvZiBhIG1hbmlmZXN0IGNvbHVtblxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmcm9tIExpbmVJdGVtc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gcHJvcGVydHlJbmZvcyBUaGUgcHJvcGVydGllcyBsaW5rZWQgdG8gYSBjb21wbGV4IGNvbHVtblxuICogQHBhcmFtIGNvbHVtbktleSBUaGUgY29sdW1uIGtleSBvZiB0aGUgY29sdW1uIHRvIGJlIG92ZXJ3cml0dGVuXG4gKiBAcmV0dXJucyBUaGUgZXhwb3J0IHNldHRpbmdzIG9mIHRoZSBjb2x1bW4gbWVyZ2luZyBjdXN0b21pemVkIGV4cG9ydCBzZXR0aW5ncyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBkZXRlY3RlZCBvbiB0aGUgYW5ub3RhdGlvbiBjb2x1bW5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3VzdG9tRXhwb3J0U2V0dGluZ3MoXG5cdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IHVuZGVmaW5lZCxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXSxcblx0Y29sdW1uS2V5Pzogc3RyaW5nXG4pOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB7XG5cdGxldCBjb2x1bW5Gcm9tQW5ub3RhdGlvbnM7XG5cdGlmIChjb2x1bW5LZXkpIHtcblx0XHRjb2x1bW5Gcm9tQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKChhbm5vdGF0aW9uQ29sdW1uKSA9PiBhbm5vdGF0aW9uQ29sdW1uLmtleSA9PT0gY29sdW1uS2V5KTtcblx0fVxuXHRjb25zdCBjdXN0b21FeHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0dHlwZTogZXhwb3J0U2V0dGluZ3M/LnR5cGUgPz8gY29sdW1uRnJvbUFubm90YXRpb25zPy5leHBvcnRTZXR0aW5ncz8udHlwZSxcblx0XHR0ZW1wbGF0ZTpcblx0XHRcdGV4cG9ydFNldHRpbmdzPy50ZW1wbGF0ZSA/P1xuXHRcdFx0X2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MsIGV4cG9ydFNldHRpbmdzPy5wcm9wZXJ0eSkgPz9cblx0XHRcdGNvbHVtbkZyb21Bbm5vdGF0aW9ucz8uZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlLFxuXHRcdHByb3BlcnR5OiBleHBvcnRTZXR0aW5ncz8ucHJvcGVydHlcblx0XHRcdD8gX2dldFByb3BlcnR5TmFtZXMoZXhwb3J0U2V0dGluZ3M/LnByb3BlcnR5LCBhbm5vdGF0aW9uQ29sdW1ucywgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSlcblx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHdpZHRoOiBleHBvcnRTZXR0aW5ncz8ud2lkdGgsXG5cdFx0d3JhcDogISEoZXhwb3J0U2V0dGluZ3M/LnByb3BlcnR5ICYmIGV4cG9ydFNldHRpbmdzLnByb3BlcnR5Py5sZW5ndGggPiAxKSA/PyAhIShwcm9wZXJ0eUluZm9zICYmIHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMSlcblx0fTtcblx0cmV0dXJuIHJlbW92ZVVuZGVmaW5lZEZyb21FeHBvcnRTZXR0aW5ncyhjdXN0b21FeHBvcnRTZXR0aW5ncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0Z2V0VGFibGVBY3Rpb25zLFxuXHRnZXRUYWJsZUNvbHVtbnMsXG5cdGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0Y3JlYXRlVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uLFxuXHRnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGdldEltcG9ydGFuY2UsXG5cdGdldFNlbGVjdGlvbk1vZGUsXG5cdGdldFJvd1N0YXR1c1Zpc2liaWxpdHksXG5cdGdldFAxM25Nb2RlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbnNDb25maWd1cmF0aW9uLFxuXHRnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uLFxuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsXG5cdHNwbGl0UGF0aCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRnZXRUeXBlQ29uZmlnLFxuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlLFxuXHRjcmVhdGVSZXF1ZXN0ZWRQcm9wZXJ0aWVzLFxuXHRnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aFxufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BZ1RLQSxVQUFVLEVBTWY7RUFBQSxXQU5LQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7RUFBQSxHQUFWQSxVQUFVLEtBQVZBLFVBQVU7RUEwTWY7RUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxFQUFFO0VBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
|