@sapui5/sap.fe.core 1.124.5 → 1.124.6
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 +4 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +5 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +19 -11
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +29 -13
- package/src/sap/fe/core/converters/controls/Common/Table.js +10 -4
- package/src/sap/fe/core/converters/controls/Common/Table.ts +5 -1
- 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/RoutingServiceFactory.js +10 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +9 -2
- package/src/sap/fe/core/services/ShellServicesFactory.js +16 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
|
@@ -3312,14 +3312,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
3312
3312
|
* @returns The export settings of the column merging customized export settings with the default values detected on the annotation column
|
|
3313
3313
|
*/
|
|
3314
3314
|
function getCustomExportSettings(exportSettings, annotationColumns, converterContext, entityType, propertyInfos, columnKey) {
|
|
3315
|
-
var
|
|
3315
|
+
var _columnFromAnnotation3, _columnFromAnnotation4, _columnFromAnnotation5, _columnFromAnnotation6, _columnFromAnnotation7, _exportSettings$prope;
|
|
3316
3316
|
let columnFromAnnotations;
|
|
3317
3317
|
if (columnKey) {
|
|
3318
|
+
var _columnFromAnnotation;
|
|
3318
3319
|
columnFromAnnotations = annotationColumns.find(annotationColumn => annotationColumn.key === columnKey);
|
|
3320
|
+
if (((_columnFromAnnotation = columnFromAnnotations) === null || _columnFromAnnotation === void 0 ? void 0 : _columnFromAnnotation.exportSettings) === null) {
|
|
3321
|
+
var _columnFromAnnotation2;
|
|
3322
|
+
return (_columnFromAnnotation2 = columnFromAnnotations) === null || _columnFromAnnotation2 === void 0 ? void 0 : _columnFromAnnotation2.exportSettings;
|
|
3323
|
+
}
|
|
3319
3324
|
}
|
|
3320
3325
|
const customExportSettings = {
|
|
3321
|
-
|
|
3322
|
-
|
|
3326
|
+
...((_columnFromAnnotation3 = columnFromAnnotations) === null || _columnFromAnnotation3 === void 0 ? void 0 : _columnFromAnnotation3.exportSettings),
|
|
3327
|
+
type: (exportSettings === null || exportSettings === void 0 ? void 0 : exportSettings.type) ?? ((_columnFromAnnotation4 = columnFromAnnotations) === null || _columnFromAnnotation4 === void 0 ? void 0 : (_columnFromAnnotation5 = _columnFromAnnotation4.exportSettings) === null || _columnFromAnnotation5 === void 0 ? void 0 : _columnFromAnnotation5.type),
|
|
3328
|
+
template: (exportSettings === null || exportSettings === void 0 ? void 0 : exportSettings.template) ?? _appendCustomTemplate(propertyInfos, exportSettings === null || exportSettings === void 0 ? void 0 : exportSettings.property) ?? ((_columnFromAnnotation6 = columnFromAnnotations) === null || _columnFromAnnotation6 === void 0 ? void 0 : (_columnFromAnnotation7 = _columnFromAnnotation6.exportSettings) === null || _columnFromAnnotation7 === void 0 ? void 0 : _columnFromAnnotation7.template),
|
|
3323
3329
|
property: exportSettings !== null && exportSettings !== void 0 && exportSettings.property ? _getPropertyNames(exportSettings === null || exportSettings === void 0 ? void 0 : exportSettings.property, annotationColumns, converterContext, entityType) : undefined,
|
|
3324
3330
|
width: exportSettings === null || exportSettings === void 0 ? void 0 : exportSettings.width,
|
|
3325
3331
|
wrap: !!(exportSettings !== null && exportSettings !== void 0 && exportSettings.property && ((_exportSettings$prope = exportSettings.property) === null || _exportSettings$prope === void 0 ? void 0 : _exportSettings$prope.length) > 1) ?? !!(propertyInfos && propertyInfos.length > 1)
|
|
@@ -3350,4 +3356,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
3350
3356
|
getNavigationTargetPath
|
|
3351
3357
|
};
|
|
3352
3358
|
}, false);
|
|
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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
|
|
3359
|
+
//# 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/OiBzdHJpbmdbXSxcblx0Y29sdW1uS2V5Pzogc3RyaW5nXG4pOiBDb2x1bW5FeHBvcnRTZXR0aW5ncyB8IG51bGwge1xuXHRsZXQgY29sdW1uRnJvbUFubm90YXRpb25zO1xuXHRpZiAoY29sdW1uS2V5KSB7XG5cdFx0Y29sdW1uRnJvbUFubm90YXRpb25zID0gYW5ub3RhdGlvbkNvbHVtbnMuZmluZCgoYW5ub3RhdGlvbkNvbHVtbikgPT4gYW5ub3RhdGlvbkNvbHVtbi5rZXkgPT09IGNvbHVtbktleSk7XG5cdFx0aWYgKGNvbHVtbkZyb21Bbm5vdGF0aW9ucz8uZXhwb3J0U2V0dGluZ3MgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBjb2x1bW5Gcm9tQW5ub3RhdGlvbnM/LmV4cG9ydFNldHRpbmdzO1xuXHRcdH1cblx0fVxuXHRjb25zdCBjdXN0b21FeHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0Li4uY29sdW1uRnJvbUFubm90YXRpb25zPy5leHBvcnRTZXR0aW5ncyxcblx0XHR0eXBlOiBleHBvcnRTZXR0aW5ncz8udHlwZSA/PyBjb2x1bW5Gcm9tQW5ub3RhdGlvbnM/LmV4cG9ydFNldHRpbmdzPy50eXBlLFxuXHRcdHRlbXBsYXRlOlxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlID8/XG5cdFx0XHRfYXBwZW5kQ3VzdG9tVGVtcGxhdGUocHJvcGVydHlJbmZvcywgZXhwb3J0U2V0dGluZ3M/LnByb3BlcnR5KSA/P1xuXHRcdFx0Y29sdW1uRnJvbUFubm90YXRpb25zPy5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGUsXG5cdFx0cHJvcGVydHk6IGV4cG9ydFNldHRpbmdzPy5wcm9wZXJ0eVxuXHRcdFx0PyBfZ2V0UHJvcGVydHlOYW1lcyhleHBvcnRTZXR0aW5ncz8ucHJvcGVydHksIGFubm90YXRpb25Db2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKVxuXHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0d2lkdGg6IGV4cG9ydFNldHRpbmdzPy53aWR0aCxcblx0XHR3cmFwOiAhIShleHBvcnRTZXR0aW5ncz8ucHJvcGVydHkgJiYgZXhwb3J0U2V0dGluZ3MucHJvcGVydHk/Lmxlbmd0aCA+IDEpID8/ICEhKHByb3BlcnR5SW5mb3MgJiYgcHJvcGVydHlJbmZvcy5sZW5ndGggPiAxKVxuXHR9O1xuXHRyZXR1cm4gcmVtb3ZlVW5kZWZpbmVkRnJvbUV4cG9ydFNldHRpbmdzKGN1c3RvbUV4cG9ydFNldHRpbmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzLFxuXHRjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGdldENhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0Z2V0SW1wb3J0YW5jZSxcblx0Z2V0U2VsZWN0aW9uTW9kZSxcblx0Z2V0Um93U3RhdHVzVmlzaWJpbGl0eSxcblx0Z2V0UDEzbk1vZGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uc0NvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSxcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdGdldFR5cGVDb25maWcsXG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUsXG5cdGNyZWF0ZVJlcXVlc3RlZFByb3BlcnRpZXMsXG5cdGdldE5hdmlnYXRpb25UYXJnZXRQYXRoXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|