@sapui5/sap.fe.core 1.108.3 → 1.108.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.108.3",
3
+ "version": "1.108.7",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.108.3</version>
9
+ <version>1.108.7</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -276,26 +276,23 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
276
276
 
277
277
  var _getFilterField = function (filterFields, propertyPath, converterContext, entityType) {
278
278
  var filterField = filterFields[propertyPath];
279
- var availability = filterField && filterField.availability;
280
279
 
281
280
  if (filterField) {
282
281
  delete filterFields[propertyPath];
283
282
  } else {
284
283
  filterField = _createFilterSelectionField(entityType, entityType.resolvePath(propertyPath), propertyPath, true, converterContext);
285
- }
286
-
287
- if (!filterField) {
288
- var _converterContext$get;
289
-
290
- (_converterContext$get = converterContext.getDiagnostics()) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.addIssue(IssueCategory.Annotation, IssueSeverity.High, IssueType.MISSING_SELECTIONFIELD);
291
284
  } // defined SelectionFields are available by default
292
285
 
293
286
 
294
287
  if (filterField) {
295
288
  var _entityType$annotatio, _entityType$annotatio2;
296
289
 
297
- filterField.availability = availability === AvailabilityType.Hidden ? AvailabilityType.Hidden : AvailabilityType.Default;
290
+ filterField.availability = filterField.availability === AvailabilityType.Hidden ? AvailabilityType.Hidden : AvailabilityType.Default;
298
291
  filterField.isParameter = !!((_entityType$annotatio = entityType.annotations) !== null && _entityType$annotatio !== void 0 && (_entityType$annotatio2 = _entityType$annotatio.Common) !== null && _entityType$annotatio2 !== void 0 && _entityType$annotatio2.ResultContext);
292
+ } else {
293
+ var _converterContext$get;
294
+
295
+ (_converterContext$get = converterContext.getDiagnostics()) === null || _converterContext$get === void 0 ? void 0 : _converterContext$get.addIssue(IssueCategory.Annotation, IssueSeverity.High, IssueType.MISSING_SELECTIONFIELD);
299
296
  }
300
297
 
301
298
  return filterField;
@@ -986,4 +983,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
986
983
  _exports.getExpandFilterFields = getExpandFilterFields;
987
984
  return _exports;
988
985
  }, false);
989
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkxhYmVsIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50cyIsInJlZHVjZSIsInByZXZpb3VzVmFsdWUiLCJzZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydHlOYW1lcyIsInByb3BlcnR5TmFtZSIsImNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsIiwibGlzdFJlcG9ydFRhYmxlcyIsImNvbnRleHRQYXRoIiwibGVuZ3RoIiwiZXZlcnkiLCJ2aXN1YWxpemF0aW9uIiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJnZXRTZWxlY3Rpb25WYXJpYW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50UGF0aHMiLCJtYXAiLCJ0YWJsZUZpbHRlcnMiLCJjb250cm9sIiwiZmlsdGVycyIsInRhYmxlU1ZDb25maWdzIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicGF0aHMiLCJhbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJwdXNoIiwic2VsZWN0aW9uVmFyaWFudENvbmZpZyIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic3ZDb25maWdzIiwiY29uY2F0IiwiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ1bmRlZmluZWQiLCJ0YXJnZXRUeXBlIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJjb25kaXRpb25QYXRoIiwiYXZhaWxhYmlsaXR5IiwiSGlkZGVuRmlsdGVyIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJsYWJlbCIsIm5hbWUiLCJnZXRNb2RlbFR5cGUiLCJzVHlwZSIsIm1EZWZhdWx0VHlwZUZvckVkbVR5cGUiLCJtb2RlbFR5cGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsInNlbGVjdGlvbkZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCIsInByb3BlcnR5UGF0aHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJsb2NhbFNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsInNwbGljZSIsImpvaW4iLCJfZ2V0RmlsdGVyRmllbGQiLCJmaWx0ZXJGaWVsZHMiLCJmaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsIkRlZmF1bHQiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwiZGVmYXVsdEZpbHRlclZhbHVlIiwiRmlsdGVyRGVmYXVsdFZhbHVlIiwiX2dldFBhcmFtZXRlckZpZWxkcyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljc1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJmYkNvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiT2JqZWN0Iiwia2V5cyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwidHlwZSIsIlNsb3QiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwidGVtcGxhdGUiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic2V0dGluZ3MiLCJyZXF1aXJlZCIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8iLCJkYXRhVHlwZSIsIm1heENvbmRpdGlvbnMiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJNb2RlbEhlbHBlciIsImlzU2luZ2xldG9uIiwiZ2V0RW50aXR5U2V0IiwiY2FwYWJpbGl0ZXMiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJmaW5kIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsInNvcnQiLCJhIiwiYiIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJhc3NpZ24iLCJpc011bHRpVmFsdWUiLCJiSXNNdWx0aVZhbHVlIiwiZmlsdGVyRXhwcmVzc2lvbiIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRyeSIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiU2VsZWN0aW9uRmllbGRzIiwibmF2UHJvcGVydGllcyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdE9wdGlvbnMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzdGFydHNXaXRoIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJudWxsYWJsZSIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9GaWVsZCIsImFSZXF1aXJlZFByb3BzIiwiYVR5cGVDb25maWciLCJyZXBsYWNlIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwic2VsZWN0aW9uRmllbGRUeXBlcyIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIl9vRmlsdGVycmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIm9SZXQiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwiYU5vbkZpbHRlcmFibGVQcm9wcyIsImFGZXRjaGVkUHJvcGVydGllcyIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiaGlkZUJhc2ljU2VhcmNoIiwiQm9vbGVhbiIsIlNlYXJjaGFibGUiLCJpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwibG9jYWxlQ29tcGFyZSIsInNGZXRjaFByb3BlcnRpZXMiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsImFGaWVsZEdyb3VwcyIsImdldEFubm90YXRpb25zQnlUZXJtIiwiaSIsImZpbHRlckZhY2V0IiwiVGFyZ2V0IiwiJHRhcmdldCIsIklEIiwidG9TdHJpbmciLCJhbGxGaWx0ZXJzIiwiZmlsdGVyIiwic0NvbnRleHRQYXRoIiwiYWdncmVnYXRlcyIsImFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhZ2dyZWdhdGVLZXkiLCJyZWxhdGl2ZVBhdGgiLCJpc0Nhc2VTZW5zaXRpdmUiLCJnZXRFeHBhbmRGaWx0ZXJGaWVsZHMiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwidmFsdWVMaXN0QW5ub3RhdGlvbiIsInJlcXVpcmVkUHJvcGVydGllcyIsInZhbHVlTGlzdCIsImdldE9iamVjdCIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLCBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sIEZpbHRlclNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuY29uc3Qgc0VkbVN0cmluZyA9IFwiRWRtLlN0cmluZ1wiO1xuY29uc3Qgc1N0cmluZ0RhdGFUeXBlID0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkID0gQ3VzdG9tRWxlbWVudDxGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6XG5cdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRHcm91cC5MYWJlbCB8fCBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGZpZWxkR3JvdXAucXVhbGlmaWVyKVxuXHRcdFx0XHRcdCkgfHwgZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHM6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10pOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG5cdHJldHVybiBzZWxlY3Rpb25WYXJpYW50cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCBzZWxlY3Rpb25WYXJpYW50KSA9PiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudC5wcm9wZXJ0eU5hbWVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cHJldmlvdXNWYWx1ZVtwcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0fSwge30pO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eSBzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgTGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50cyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0cmV0dXJuIGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0Y29uc3QgdGFibGVTVkNvbmZpZ3M6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUZpbHRlcnNba2V5XS5wYXRocykpIHtcblx0XHRcdFx0XHRjb25zdCBwYXRocyA9IHRhYmxlRmlsdGVyc1trZXldLnBhdGhzO1xuXHRcdFx0XHRcdHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChwYXRoICYmIHBhdGguYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uVmFyaWFudFBhdGhzLmluZGV4T2YocGF0aC5hbm5vdGF0aW9uUGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5wdXNoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50Q29uZmlnID0gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGVTVkNvbmZpZ3MucHVzaChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVTVkNvbmZpZ3M7XG5cdFx0fSlcblx0XHQucmVkdWNlKChzdkNvbmZpZ3MsIHNlbGVjdGlvblZhcmlhbnQpID0+IHN2Q29uZmlncy5jb25jYXQoc2VsZWN0aW9uVmFyaWFudCksIFtdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGAke2tleX0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKFxuXHRcdHByb3BlcnR5ICE9PSB1bmRlZmluZWQgJiZcblx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiZcblx0XHQoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKVxuXHQpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHRcdHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuQWRhcHRhdGlvbixcblx0XHRcdGxhYmVsOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKSxcblx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgdGFyZ2V0RW50aXR5VHlwZS5uYW1lKVxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbFR5cGUoc1R5cGU6IGFueSkge1xuXHR0eXBlIGRlZmF1bHRNb2RlbFR5cGUgPSB7XG5cdFx0W2tleTogc3RyaW5nXToge1xuXHRcdFx0W2tleTogc3RyaW5nXTogc3RyaW5nO1xuXHRcdH07XG5cdH07XG5cdGNvbnN0IG1EZWZhdWx0VHlwZUZvckVkbVR5cGU6IGRlZmF1bHRNb2RlbFR5cGUgPSB7XG5cdFx0XCJFZG0uQm9vbGVhblwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiQm9vbFwiXG5cdFx0fSxcblx0XHRcIkVkbS5CeXRlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRGF0ZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGF0ZVwiXG5cdFx0fSxcblx0XHRcIkVkbS5EYXRlVGltZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGF0ZVwiXG5cdFx0fSxcblx0XHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGVjaW1hbFwiXG5cdFx0fSxcblx0XHRcIkVkbS5Eb3VibGVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkZsb2F0XCJcblx0XHR9LFxuXHRcdFwiRWRtLkZsb2F0XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdFx0fSxcblx0XHRcIkVkbS5HdWlkXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJHdWlkXCJcblx0XHR9LFxuXHRcdFwiRWRtLkludDE2XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uSW50MzJcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdFx0fSxcblx0XHRcIkVkbS5JbnQ2NFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0XHR9LFxuXHRcdFwiRWRtLlNCeXRlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uU2luZ2xlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdFx0fSxcblx0XHRcIkVkbS5TdHJpbmdcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIlN0cmluZ1wiXG5cdFx0fSxcblx0XHRcIkVkbS5UaW1lXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJUaW1lT2ZEYXlcIlxuXHRcdH0sXG5cdFx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJUaW1lT2ZEYXlcIlxuXHRcdH0sXG5cdFx0XCJFZG0uU3RyZWFtXCI6IHtcblx0XHRcdC8vbm8gY29ycmVzcG9uZGluZyBtb2RlbFR5cGUgLSBpZ25vcmUgZm9yIGZpbHRlcmluZ1xuXHRcdH1cblx0fTtcblx0cmV0dXJuIHNUeXBlICYmIHNUeXBlIGluIG1EZWZhdWx0VHlwZUZvckVkbVR5cGUgJiYgbURlZmF1bHRUeXBlRm9yRWRtVHlwZVtzVHlwZV0ubW9kZWxUeXBlO1xufVxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPjtcblxuXHRcdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkudGFyZ2V0VHlwZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5LnRhcmdldFR5cGUuX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIikge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBwcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMCwgMSkuam9pbihcIi9cIikgOiBcIlwiO1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgbmF2aWdhdGlvblBhdGgsIFtwcm9wZXJ0eV0sIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0Y29uc3QgYXZhaWxhYmlsaXR5ID0gZmlsdGVyRmllbGQgJiYgZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5O1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9IGF2YWlsYWJpbGl0eSA9PT0gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdDtcblx0XHRmaWx0ZXJGaWVsZC5pc1BhcmFtZXRlciA9ICEhZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZDtcbn07XG5cbmNvbnN0IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRhU2VsZWN0T3B0aW9uczogYW55W10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IGFueSA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHR9KTtcblx0aWYgKGFTZWxlY3RPcHRpb25zICYmIGFTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWU6IGFueSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWUudmFsdWU7XG5cdFx0XHRjb25zdCBjdXJyZW50U2VsZWN0aW9uRmllbGRzOiBhbnkgPSB7fTtcblx0XHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0Y29uc3QgaXNQYXJhbWV0ZXJpemVkID0gISFwYXJhbWV0ZXJFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQgJiYgIWRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0ID1cblx0XHRpc1BhcmFtZXRlcml6ZWQgJiYgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJblRhYmxlcyA9XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPT09IDAgfHwgbGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+IHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiAhdGFibGUuZW5hYmxlQW5hbHl0aWNzU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmNvbmRpdGlvblBhdGggfHwgcHJvcGVydHlOYW1lLFxuXHRcdFx0dGVtcGxhdGU6IGZpbHRlckZpZWxkLnRlbXBsYXRlLFxuXHRcdFx0bGFiZWw6IGZpbHRlckZpZWxkLmxhYmVsLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCxcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKSB7XG5cdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoe30sIHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBhbnksIHNSZXN0cmljdGlvbjogYW55KSB7XG5cdGlmIChzUmVzdHJpY3Rpb24gPT09IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfHwgc1Jlc3RyaWN0aW9uID09PSBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHtcblx0XHRsZXQgYVByb3BzID0gW107XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGggfHwgb1Byb3BlcnR5LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcHM7XG5cdH0gZWxzZSBpZiAoc1Jlc3RyaWN0aW9uID09PSBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiKSB7XG5cdFx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9ucyA9IHt9IGFzIGFueTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucykge1xuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS52YWx1ZV0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9uc107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHRyZXR1cm4gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb247XG59O1xuXG5jb25zdCBnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0Z3JvdXBMYWJlbDogXCJcIixcblx0XHRncm91cDogXCJcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdGhpZGRlbkZpbHRlcjogZmFsc2Vcblx0fTtcbn07XG5cbmNvbnN0IGdldFNlYXJjaFJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGxldCBzZWFyY2hSZXN0cmljdGlvbnM7XG5cdGlmICghTW9kZWxIZWxwZXIuaXNTaW5nbGV0b24oY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRjb25zdCBjYXBhYmlsaXRlcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMgYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzO1xuXHRcdHNlYXJjaFJlc3RyaWN0aW9ucyA9IGNhcGFiaWxpdGVzPy5TZWFyY2hSZXN0cmljdGlvbnM7XG5cdH1cblx0cmV0dXJuIHNlYXJjaFJlc3RyaWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHNOYXZpZ2F0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zOiBhbnkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5ICYmXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5ICYmXG5cdFx0XHRcdChvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCA9PT0gc05hdmlnYXRpb25QYXRoIHx8XG5cdFx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkudmFsdWUgPT09IHNOYXZpZ2F0aW9uUGF0aClcblx0XHRcdCk7XG5cdFx0fSlcblx0KTtcbn07XG5cbmNvbnN0IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKG9GaWx0ZXJGaWVsZEluZm86IGFueSkge1xuXHRyZXR1cm4ge1xuXHRcdGtleTogb0ZpbHRlckZpZWxkSW5mby5rZXksXG5cdFx0YW5ub3RhdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGgsXG5cdFx0Y29uZGl0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdG5hbWU6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkXG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChhRXhwcmVzc2lvbnM6IGFueSkge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBbXG5cdFx0XCJTaW5nbGVWYWx1ZVwiLFxuXHRcdFwiTXVsdGlWYWx1ZVwiLFxuXHRcdFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcIk11bHRpUmFuZ2VcIixcblx0XHRcIlNlYXJjaEV4cHJlc3Npb25cIixcblx0XHRcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIlxuXHRdO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlNb2RlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eUFubm90YXRpb25zOiBhbnksIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM6IGFueSkge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24gPVxuXHRcdFx0b1RleHRBbm5vdGF0aW9uICYmXG5cdFx0XHQoKG9Qcm9wZXJ0eUFubm90YXRpb25zICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJiBvQ29sbGVjdGlvbkFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSk7XG5cblx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbi52YWx1ZU9mKCkgPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbi52YWx1ZU9mKCkgPT09IFwiVUkuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fVxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjsgLy9UZXh0Rmlyc3Rcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgb0ZpbHRlckZpZWxkSW5mbzogYW55LCBvVHlwZUNvbmZpZzogYW55KSB7XG5cdGxldCBvUHJvcGVydHlJbmZvID0gX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8ob0ZpbHRlckZpZWxkSW5mbyk7XG5cdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGg7XG5cblx0aWYgKCFzQW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcblx0fVxuXHRjb25zdCB0YXJnZXRQcm9wZXJ0eU9iamVjdCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGguaW5jbHVkZXMoXCIvXCIpXG5cdCk7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbikge1xuXHQvLyBGZXRjaCBhbGwgc2VsZWN0aW9uVmFyaWFudHMgZGVmaW5lZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIGFuZCBkaWZmZXJlbnQgdmlld3MgKG11bHRpIHRhYmxlIG1vZGUpXG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdID0gZ2V0U2VsZWN0aW9uVmFyaWFudHMobHJUYWJsZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHMpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdC8vRmlsdGVycyB3aGljaCBoYXMgdG8gYmUgYWRkZWQgd2hpY2ggaXMgcGFydCBvZiBTVi9EZWZhdWx0IGFubm90YXRpb25zIGJ1dCBub3QgcHJlc2VudCBpbiB0aGUgU2VsZWN0aW9uRmllbGRzXG5cdGNvbnN0IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyA9ICgoYW5ub3RhdGlvblBhdGggJiYgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihhbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24pIHx8XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyB8fFxuXHRcdFtdKSBhcyBQcm9wZXJ0eVBhdGhbXTtcblxuXHRjb25zdCBuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAobHJUYWJsZXMubGVuZ3RoID09PSAwICYmICEhbGluZUl0ZW1UZXJtKSB7XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obGluZUl0ZW1UZXJtKS5hbm5vdGF0aW9uIGFzIExpbmVJdGVtKT8uZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRcdGlmIChfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KGVudHJ5KSkge1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMoZW50cnkuVmFsdWUucGF0aC5zcGxpdChcIi9cIilbMF0pKSB7XG5cdFx0XHRcdFx0bmF2UHJvcGVydGllcy5wdXNoKGVudHJ5LlZhbHVlLnBhdGguc3BsaXQoXCIvXCIpWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi4gbm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoZW50aXR5VHlwZSwgbmF2UHJvcGVydGllcywgZmFsc2UsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLmFkZGl0aW9uYWwgbWFuaWZlc3QgZGVmaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHQpXG5cdH07XG5cdGxldCBhU2VsZWN0T3B0aW9uczogYW55W10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IGFueSA9XG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5yZWR1Y2UoKHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHNlbGVjdGlvbkZpZWxkLnZhbHVlO1xuXHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0bGV0IG5hdmlnYXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aC5zdGFydHNXaXRoKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKSkge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gXCJcIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IGFubm90YXRpb25QYXRoLnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpIHtcblx0Y29uc3Qgb1R5cGVDb25maWcgPSBnZXRUeXBlQ29uZmlnKHByb3BlcnR5LCBwcm9wZXJ0eT8udHlwZSk7XG5cdGlmIChwcm9wZXJ0eT8udHlwZSA9PT0gc0VkbVN0cmluZyAmJiAob1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHVuZGVmaW5lZCB8fCBvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBvVHlwZUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZDogYW55LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRhUmVxdWlyZWRQcm9wczogYW55LFxuXHRhVHlwZUNvbmZpZzogYW55XG4pIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm86IGFueSA9IGZldGNoUHJvcGVydHlJbmZvKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5SW5mb0ZpZWxkLCBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldKSxcblx0XHRzUHJvcGVydHlQYXRoOiBzdHJpbmcgPSBcIlwiO1xuXHRpZiAocHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0XHRtYXhDb25kaXRpb25zOiAhb1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciAmJiBpc011bHRpVmFsdWUob1Byb3BlcnR5SW5mbykgPyAtMSA6IDEsXG5cdFx0XHRyZXF1aXJlZDogcHJvcGVydHlJbmZvRmllbGQucmVxdWlyZWQgPz8gKG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5kZXhPZihzUHJvcGVydHlQYXRoKSA+PSAwKSxcblx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGRhdGFUeXBlOiBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IGFueSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBhbnlcbikge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkVHlwZXM6IGFueSA9IFtdO1xuXHRjb25zdCBhVHlwZUNvbmZpZzogYW55ID0ge307XG5cblx0aWYgKGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKSB7XG5cdFx0cHJvcGVydHlJbmZvRmllbGRzID0gcHJvcGVydHlJbmZvRmllbGRzLmNvbmNhdChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyk7XG5cdH1cblx0Ly9hZGQgdHlwZUNvbmZpZ1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1ldGVyRmllbGQ6IGFueSkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUYXJnZXRPYmplY3QgPSBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXHRcdFx0c2VsZWN0aW9uRmllbGRUeXBlcy5wdXNoKHByb3BlcnR5VGFyZ2V0T2JqZWN0Py50eXBlKTtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0aW9uRmllbGRUeXBlcy5wdXNoKHNFZG1TdHJpbmcpO1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0bGV0IF9vRmlsdGVycmVzdHJpY3Rpb25zO1xuXHRpZiAoIU1vZGVsSGVscGVyLmlzU2luZ2xldG9uKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0X29GaWx0ZXJyZXN0cmljdGlvbnMgPSAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMpXG5cdFx0XHQ/LkZpbHRlclJlc3RyaWN0aW9ucztcblx0fVxuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gX29GaWx0ZXJyZXN0cmljdGlvbnM7XG5cdGNvbnN0IG9SZXQgPSB7fSBhcyBhbnk7XG5cdG9SZXRbXCJSZXF1aXJlZFByb3BlcnRpZXNcIl0gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXRbXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0W1wiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCIpIHx8IHt9O1xuXG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc0VudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQoZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXSk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQoZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdKTtcblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHtcblx0XHRcdC4uLihnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCIpIHx8IHt9KSxcblx0XHRcdC4uLm9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXG5cdFx0fTtcblx0fVxuXHRjb25zdCBhUmVxdWlyZWRQcm9wcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBhbnkgPSBbXTtcblxuXHQvLyBwcm9jZXNzIHRoZSBmaWVsZHMgdG8gYWRkIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZDogYW55KSB7XG5cdFx0bGV0IHNQcm9wZXJ0eVBhdGg7XG5cdFx0aWYgKGFOb25GaWx0ZXJhYmxlUHJvcHMuaW5kZXhPZihzUHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbikge1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSwge1xuXHRcdFwiYXZhaWxhYmlsaXR5XCI6IFwib3ZlcndyaXRlXCIsXG5cdFx0bGFiZWw6IFwib3ZlcndyaXRlXCIsXG5cdFx0dHlwZTogXCJvdmVyd3JpdGVcIixcblx0XHRwb3NpdGlvbjogXCJvdmVyd3JpdGVcIixcblx0XHR0ZW1wbGF0ZTogXCJvdmVyd3JpdGVcIixcblx0XHRzZXR0aW5nczogXCJvdmVyd3JpdGVcIixcblx0XHR2aXN1YWxGaWx0ZXI6IFwib3ZlcndyaXRlXCIsXG5cdFx0cmVxdWlyZWQ6IFwib3ZlcndyaXRlXCJcblx0fSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGZpZWxkcyB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGZpbHRlciBiYXJcbiAqIFRoaXMgY29uZmlndXJhdGlvbiB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGFubm90YXRpb24gYW5kIHRoZSBzZWxlY3Rpb24gdmFyaWFudHMuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsclRhYmxlc1xuICogQHBhcmFtIGFubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gW2luY2x1ZGVIaWRkZW5dXG4gKiBAcGFyYW0gW2xpbmVJdGVtVGVybV1cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmcgPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiBhbnkge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdGFGZXRjaGVkUHJvcGVydGllcy5zb3J0KGZ1bmN0aW9uIChhOiBhbnksIGI6IGFueSkge1xuXHRcdGlmIChhLmdyb3VwTGFiZWwgPT09IHVuZGVmaW5lZCB8fCBhLmdyb3VwTGFiZWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aWYgKGIuZ3JvdXBMYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGIuZ3JvdXBMYWJlbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwubG9jYWxlQ29tcGFyZShiLmdyb3VwTGFiZWwpO1xuXHR9KTtcblxuXHRsZXQgc0ZldGNoUHJvcGVydGllcyA9IEpTT04uc3RyaW5naWZ5KGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0Y29uc3Qgc1Byb3BlcnR5SW5mbyA9IHNGZXRjaFByb3BlcnRpZXM7XG5cdC8vIGVuZCBvZiBwcm9wZXJ0eUZpZWxkcyBwcm9jZXNzaW5nXG5cblx0Ly8gdG8gcG9wdWxhdGUgc2VsZWN0aW9uIGZpZWxkc1xuXHRsZXQgcHJvcFNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0cHJvcFNlbGVjdGlvbkZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcFNlbGVjdGlvbkZpZWxkcyk7XG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApO1xuXG5cdGlmIChmaWx0ZXJGYWNldHMgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJGYWNldHMubGVuZ3RoIDwgMCkge1xuXHRcdGZvciAoY29uc3QgaSBpbiBhRmllbGRHcm91cHMpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwID0ge1xuXHRcdFx0XHQuLi5maWx0ZXJGYWNldE1hcCxcblx0XHRcdFx0Li4uZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhhRmllbGRHcm91cHNbaV0pXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGYWNldE1hcCA9IGZpbHRlckZhY2V0cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiwgZmlsdGVyRmFjZXQ6IFJlZmVyZW5jZUZhY2V0VHlwZXMpID0+IHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGE/Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHByZXZpb3VzVmFsdWVbKChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhW2ldIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGhdID0ge1xuXHRcdFx0XHRcdGdyb3VwOiBmaWx0ZXJGYWNldD8uSUQ/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0Z3JvdXBMYWJlbDogZmlsdGVyRmFjZXQ/LkxhYmVsPy50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHR9LCB7fSk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5maWx0ZXJGaWVsZHM7XG5cblx0Ly8gZmluYWxseSBjcmVhdGUgZmluYWwgbGlzdCBvZiBmaWx0ZXIgZmllbGRzIGJ5IGFkZGluZyB0aGUgU2VsZWN0aW9uRmllbGRzIGZpcnN0IChvcmRlciBtYXR0ZXJzKS4uLlxuXHRsZXQgYWxsRmlsdGVycyA9IHByb3BTZWxlY3Rpb25GaWVsZHNcblxuXHRcdC8vIC4uLmFuZCBhZGRpbmcgcmVtYWluaW5nIGZpbHRlciBmaWVsZHMsIHRoYXQgYXJlIG5vdCB1c2VkIGluIGEgU2VsZWN0aW9uVmFyaWFudCAob3JkZXIgZG9lc24ndCBtYXR0ZXIpXG5cdFx0LmNvbmNhdChcblx0XHRcdE9iamVjdC5rZXlzKGZpbHRlckZpZWxkcylcblx0XHRcdFx0LmZpbHRlcigocHJvcGVydHlQYXRoKSA9PiAhKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKVxuXHRcdFx0XHQubWFwKChwcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXSwgZmlsdGVyRmFjZXRNYXBbcHJvcGVydHlQYXRoXSk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXG5cdC8vaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCB0YWJsZXMgXCJhZ2dyZWdhdGFibGVcIiBwcm9wZXJ0aWVzIG11c3QgYmUgZXhjbHVkZWRcblx0aWYgKGNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsKGxyVGFibGVzLCBzQ29udGV4dFBhdGgpKSB7XG5cdFx0Ly8gQ3VycmVudGx5IGFsbCBhZ3JlZ2F0ZXMgYXJlIHJvb3QgZW50aXR5IHByb3BlcnRpZXMgKG5vIHByb3BlcnRpZXMgY29taW5nIGZyb20gbmF2aWdhdGlvbikgYW5kIGFsbFxuXHRcdC8vIHRhYmxlcyB3aXRoIHNhbWUgZW50aXR5U2V0IGdldHMgc2FtZSBhZ2dyZWFndGUgY29uZmlndXJhdGlvbiB0aGF0J3Mgd2h5IHdlIGNhbiB1c2UgZmlyc3QgdGFibGUgaW50b1xuXHRcdC8vIExSIHRvIGdldCBhZ2dyZWdhdGVzICh3aXRob3V0IGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcyBzaW5jZSB3ZSBleHBlY3QgdG8gYmUgYWJsZSB0byBmaWx0ZXIgdGhlbSkuXG5cdFx0Y29uc3QgYWdncmVnYXRlcyA9IGxyVGFibGVzWzBdLmFnZ3JlZ2F0ZXM7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoYWdncmVnYXRlcykubWFwKChhZ2dyZWdhdGVLZXkpID0+IGFnZ3JlZ2F0ZXNbYWdncmVnYXRlS2V5XS5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0YWxsRmlsdGVycyA9IGFsbEZpbHRlcnMuZmlsdGVyKChmaWx0ZXJGaWVsZCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWdncmVnYXRhYmxlUHJvcGVydGllcy5pbmRleE9mKGZpbHRlckZpZWxkLmtleSkgPT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhhbGxGaWx0ZXJzLCBlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiBUaGUgRmlsdGVyUmVzdHJpY3Rpb24gYW5ub3RhdGlvblxuICogQHBhcmFtIHZhbHVlTGlzdEFubm90YXRpb24gVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZm9yIGV4cGFuZEZpbHRlckZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kRmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBhbnksXG5cdHZhbHVlTGlzdEFubm90YXRpb246IGFueVxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUxpc3RBbm5vdGF0aW9uLmdldE9iamVjdCgpO1xuXHRpZiAocmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfHwgaGlkZUJhc2ljU2VhcmNoIHx8IHZhbHVlTGlzdD8uRmV0Y2hWYWx1ZXMgPT09IDIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW9ES0EsZTs7YUFBQUEsZTtJQUFBQSxlO0lBQUFBLGU7S0FBQUEsZSxLQUFBQSxlOztFQUtMLElBQU1DLFVBQVUsR0FBRyxZQUFuQjtFQUNBLElBQU1DLGVBQWUsR0FBRyxnQ0FBeEI7O0VBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MseUJBQVQsQ0FBbUNDLFVBQW5DLEVBQXdGO0lBQ3ZGLElBQU1DLGNBQTJDLEdBQUcsRUFBcEQ7SUFDQUQsVUFBVSxDQUFDRSxJQUFYLENBQWdCQyxPQUFoQixDQUF3QixVQUFDQyxTQUFELEVBQXVDO01BQzlELElBQUlBLFNBQVMsQ0FBQ0MsS0FBVixLQUFvQixzQ0FB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
986
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkxhYmVsIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50cyIsInJlZHVjZSIsInByZXZpb3VzVmFsdWUiLCJzZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydHlOYW1lcyIsInByb3BlcnR5TmFtZSIsImNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsIiwibGlzdFJlcG9ydFRhYmxlcyIsImNvbnRleHRQYXRoIiwibGVuZ3RoIiwiZXZlcnkiLCJ2aXN1YWxpemF0aW9uIiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJnZXRTZWxlY3Rpb25WYXJpYW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50UGF0aHMiLCJtYXAiLCJ0YWJsZUZpbHRlcnMiLCJjb250cm9sIiwiZmlsdGVycyIsInRhYmxlU1ZDb25maWdzIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicGF0aHMiLCJhbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJwdXNoIiwic2VsZWN0aW9uVmFyaWFudENvbmZpZyIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic3ZDb25maWdzIiwiY29uY2F0IiwiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ1bmRlZmluZWQiLCJ0YXJnZXRUeXBlIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJjb25kaXRpb25QYXRoIiwiYXZhaWxhYmlsaXR5IiwiSGlkZGVuRmlsdGVyIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJsYWJlbCIsIm5hbWUiLCJnZXRNb2RlbFR5cGUiLCJzVHlwZSIsIm1EZWZhdWx0VHlwZUZvckVkbVR5cGUiLCJtb2RlbFR5cGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsInNlbGVjdGlvbkZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCIsInByb3BlcnR5UGF0aHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJsb2NhbFNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsInNwbGljZSIsImpvaW4iLCJfZ2V0RmlsdGVyRmllbGQiLCJmaWx0ZXJGaWVsZHMiLCJmaWx0ZXJGaWVsZCIsIkRlZmF1bHQiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiSGlnaCIsIklzc3VlVHlwZSIsIk1JU1NJTkdfU0VMRUNUSU9ORklFTEQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwiZGVmYXVsdEZpbHRlclZhbHVlIiwiRmlsdGVyRGVmYXVsdFZhbHVlIiwiX2dldFBhcmFtZXRlckZpZWxkcyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljc1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJmYkNvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiT2JqZWN0Iiwia2V5cyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwidHlwZSIsIlNsb3QiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwidGVtcGxhdGUiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic2V0dGluZ3MiLCJyZXF1aXJlZCIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8iLCJkYXRhVHlwZSIsIm1heENvbmRpdGlvbnMiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJzZWFyY2hSZXN0cmljdGlvbnMiLCJNb2RlbEhlbHBlciIsImlzU2luZ2xldG9uIiwiZ2V0RW50aXR5U2V0IiwiY2FwYWJpbGl0ZXMiLCJDYXBhYmlsaXRpZXMiLCJTZWFyY2hSZXN0cmljdGlvbnMiLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwic05hdmlnYXRpb25QYXRoIiwib05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwiYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJmaW5kIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsInNvcnQiLCJhIiwiYiIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJhc3NpZ24iLCJpc011bHRpVmFsdWUiLCJiSXNNdWx0aVZhbHVlIiwiZmlsdGVyRXhwcmVzc2lvbiIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRyeSIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiU2VsZWN0aW9uRmllbGRzIiwibmF2UHJvcGVydGllcyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdE9wdGlvbnMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzdGFydHNXaXRoIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJudWxsYWJsZSIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm9GaWVsZCIsImFSZXF1aXJlZFByb3BzIiwiYVR5cGVDb25maWciLCJyZXBsYWNlIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsImRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzIiwic2VsZWN0aW9uRmllbGRUeXBlcyIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIl9vRmlsdGVycmVzdHJpY3Rpb25zIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIm9SZXQiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwiYU5vbkZpbHRlcmFibGVQcm9wcyIsImFGZXRjaGVkUHJvcGVydGllcyIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiaGlkZUJhc2ljU2VhcmNoIiwiQm9vbGVhbiIsIlNlYXJjaGFibGUiLCJpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwibG9jYWxlQ29tcGFyZSIsInNGZXRjaFByb3BlcnRpZXMiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsImZpbHRlckZhY2V0cyIsIkZpbHRlckZhY2V0cyIsImFGaWVsZEdyb3VwcyIsImdldEFubm90YXRpb25zQnlUZXJtIiwiaSIsImZpbHRlckZhY2V0IiwiVGFyZ2V0IiwiJHRhcmdldCIsIklEIiwidG9TdHJpbmciLCJhbGxGaWx0ZXJzIiwiZmlsdGVyIiwic0NvbnRleHRQYXRoIiwiYWdncmVnYXRlcyIsImFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhZ2dyZWdhdGVLZXkiLCJyZWxhdGl2ZVBhdGgiLCJpc0Nhc2VTZW5zaXRpdmUiLCJnZXRFeHBhbmRGaWx0ZXJGaWVsZHMiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwidmFsdWVMaXN0QW5ub3RhdGlvbiIsInJlcXVpcmVkUHJvcGVydGllcyIsInZhbHVlTGlzdCIsImdldE9iamVjdCIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLCBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sIEZpbHRlclNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg6IHN0cmluZztcblx0YXZhaWxhYmlsaXR5OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRzZXR0aW5ncz86IEZpbHRlclNldHRpbmdzO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG50eXBlIEZpbHRlckdyb3VwID0ge1xuXHRncm91cD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcbn07XG5cbmVudW0gZmlsdGVyRmllbGRUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuY29uc3Qgc0VkbVN0cmluZyA9IFwiRWRtLlN0cmluZ1wiO1xuY29uc3Qgc1N0cmluZ0RhdGFUeXBlID0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkID0gQ3VzdG9tRWxlbWVudDxGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6XG5cdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRHcm91cC5MYWJlbCB8fCBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGZpZWxkR3JvdXAucXVhbGlmaWVyKVxuXHRcdFx0XHRcdCkgfHwgZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHM6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10pOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG5cdHJldHVybiBzZWxlY3Rpb25WYXJpYW50cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCBzZWxlY3Rpb25WYXJpYW50KSA9PiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudC5wcm9wZXJ0eU5hbWVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cHJldmlvdXNWYWx1ZVtwcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0fSwge30pO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eSBzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgTGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50cyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0cmV0dXJuIGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0Y29uc3QgdGFibGVTVkNvbmZpZ3M6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUZpbHRlcnNba2V5XS5wYXRocykpIHtcblx0XHRcdFx0XHRjb25zdCBwYXRocyA9IHRhYmxlRmlsdGVyc1trZXldLnBhdGhzO1xuXHRcdFx0XHRcdHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChwYXRoICYmIHBhdGguYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uVmFyaWFudFBhdGhzLmluZGV4T2YocGF0aC5hbm5vdGF0aW9uUGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5wdXNoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50Q29uZmlnID0gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGVTVkNvbmZpZ3MucHVzaChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVTVkNvbmZpZ3M7XG5cdFx0fSlcblx0XHQucmVkdWNlKChzdkNvbmZpZ3MsIHNlbGVjdGlvblZhcmlhbnQpID0+IHN2Q29uZmlncy5jb25jYXQoc2VsZWN0aW9uVmFyaWFudCksIFtdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGAke2tleX0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKFxuXHRcdHByb3BlcnR5ICE9PSB1bmRlZmluZWQgJiZcblx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiZcblx0XHQoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKVxuXHQpIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShwcm9wZXJ0eSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGtleTogS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRhdmFpbGFiaWxpdHk6XG5cdFx0XHRcdHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCkgPT09IHRydWUgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuQWRhcHRhdGlvbixcblx0XHRcdGxhYmVsOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKSxcblx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgdGFyZ2V0RW50aXR5VHlwZS5uYW1lKVxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbFR5cGUoc1R5cGU6IGFueSkge1xuXHR0eXBlIGRlZmF1bHRNb2RlbFR5cGUgPSB7XG5cdFx0W2tleTogc3RyaW5nXToge1xuXHRcdFx0W2tleTogc3RyaW5nXTogc3RyaW5nO1xuXHRcdH07XG5cdH07XG5cdGNvbnN0IG1EZWZhdWx0VHlwZUZvckVkbVR5cGU6IGRlZmF1bHRNb2RlbFR5cGUgPSB7XG5cdFx0XCJFZG0uQm9vbGVhblwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiQm9vbFwiXG5cdFx0fSxcblx0XHRcIkVkbS5CeXRlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRGF0ZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGF0ZVwiXG5cdFx0fSxcblx0XHRcIkVkbS5EYXRlVGltZVwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGF0ZVwiXG5cdFx0fSxcblx0XHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiRGVjaW1hbFwiXG5cdFx0fSxcblx0XHRcIkVkbS5Eb3VibGVcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkZsb2F0XCJcblx0XHR9LFxuXHRcdFwiRWRtLkZsb2F0XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdFx0fSxcblx0XHRcIkVkbS5HdWlkXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJHdWlkXCJcblx0XHR9LFxuXHRcdFwiRWRtLkludDE2XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uSW50MzJcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdFx0fSxcblx0XHRcIkVkbS5JbnQ2NFwiOiB7XG5cdFx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0XHR9LFxuXHRcdFwiRWRtLlNCeXRlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHRcdH0sXG5cdFx0XCJFZG0uU2luZ2xlXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdFx0fSxcblx0XHRcIkVkbS5TdHJpbmdcIjoge1xuXHRcdFx0bW9kZWxUeXBlOiBcIlN0cmluZ1wiXG5cdFx0fSxcblx0XHRcIkVkbS5UaW1lXCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJUaW1lT2ZEYXlcIlxuXHRcdH0sXG5cdFx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRcdG1vZGVsVHlwZTogXCJUaW1lT2ZEYXlcIlxuXHRcdH0sXG5cdFx0XCJFZG0uU3RyZWFtXCI6IHtcblx0XHRcdC8vbm8gY29ycmVzcG9uZGluZyBtb2RlbFR5cGUgLSBpZ25vcmUgZm9yIGZpbHRlcmluZ1xuXHRcdH1cblx0fTtcblx0cmV0dXJuIHNUeXBlICYmIHNUeXBlIGluIG1EZWZhdWx0VHlwZUZvckVkbVR5cGUgJiYgbURlZmF1bHRUeXBlRm9yRWRtVHlwZVtzVHlwZV0ubW9kZWxUeXBlO1xufVxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0cHJvcGVydGllczogQXJyYXk8UHJvcGVydHk+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRsZXQgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnR5UGF0aHMpIHtcblx0XHRwcm9wZXJ0eVBhdGhzLmZvckVhY2goKHByb3BlcnR5UGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgbG9jYWxTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPjtcblxuXHRcdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHByb3BlcnR5Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUuZW50aXR5UHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkudGFyZ2V0VHlwZSAhPT0gdW5kZWZpbmVkICYmIHByb3BlcnR5LnRhcmdldFR5cGUuX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIikge1xuXHRcdFx0XHQvLyBoYW5kbGUgQ29tcGxleFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblBhdGggPSBwcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMCwgMSkuam9pbihcIi9cIikgOiBcIlwiO1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgbmF2aWdhdGlvblBhdGgsIFtwcm9wZXJ0eV0sIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMgPSB7XG5cdFx0XHRcdC4uLnNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdFx0Li4ubG9jYWxTZWxlY3Rpb25GaWVsZHNcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbmNvbnN0IF9nZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQ7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fSBlbHNlIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGFTZWxlY3RPcHRpb25zOiBhbnlbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXVxuKTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSA9IFtdO1xuXHRjb25zdCBVSVNlbGVjdGlvbkZpZWxkczogYW55ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IGFueSA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoIShzUHJvcGVydHlQYXRoIGluIGN1cnJlbnRTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWx0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0aWYgKCEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAmJiAhKHByb3BlcnR5UGF0aCBpbiBVSVNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG4vKipcbiAqIEdldCBhbGwgcGFyYW1ldGVyIGZpbHRlciBmaWVsZHMgaW4gY2FzZSBvZiBhIHBhcmFtZXRlcml6ZWQgc2VydmljZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyYW1ldGVyIEZpbHRlckZpZWxkc1xuICovXG5mdW5jdGlvbiBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoYC8ke2RhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZX1gKTtcblxuXHRyZXR1cm4gKFxuXHRcdHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHRcblx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0XHRcdFx0XHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdFx0e30gYXMgUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRcdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KTtcblx0XHRcdCAgfSlcblx0XHRcdDogW11cblx0KSBhcyBGaWx0ZXJGaWVsZFtdO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gbGlzdFJlcG9ydFRhYmxlcyBUaGUgbGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY2hhcnRzIFRoZSBBTFAgY2hhcnRzXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2ggPSBmdW5jdGlvbiAoXG5cdGxpc3RSZXBvcnRUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fCBsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh0YWJsZSkgPT4gdGFibGUuZW5hYmxlQW5hbHl0aWNzICYmICF0YWJsZS5lbmFibGVBbmFseXRpY3NTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGZpbHRlciBmaWVsZHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+IHtcblx0Y29uc3QgZmJDb25maWc6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBkZWZpbmVkRmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj4gPSBmYkNvbmZpZz8uZmlsdGVyRmllbGRzIHx8IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRPYmplY3Qua2V5cyhkZWZpbmVkRmlsdGVyRmllbGRzKS5tYXAoKGtleSkgPT4gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoa2V5KSksXG5cdFx0dHJ1ZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdCk7XG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBkZWZpbmVkRmlsdGVyRmllbGRzKSB7XG5cdFx0Y29uc3QgZmlsdGVyRmllbGQgPSBkZWZpbmVkRmlsdGVyRmllbGRzW3NLZXldO1xuXHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KHNLZXkpO1xuXHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gc2VsZWN0aW9uRmllbGRzW3Byb3BlcnR5TmFtZV07XG5cdFx0Y29uc3QgdHlwZSA9IGZpbHRlckZpZWxkLnR5cGUgPT09IFwiU2xvdFwiID8gZmlsdGVyRmllbGRUeXBlLlNsb3QgOiBmaWx0ZXJGaWVsZFR5cGUuRGVmYXVsdDtcblx0XHRjb25zdCB2aXN1YWxGaWx0ZXIgPVxuXHRcdFx0ZmlsdGVyRmllbGQgJiYgZmlsdGVyRmllbGQ/LnZpc3VhbEZpbHRlclxuXHRcdFx0XHQ/IGdldFZpc3VhbEZpbHRlcnMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgc0tleSwgZGVmaW5lZEZpbHRlckZpZWxkcylcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0ZmlsdGVyRmllbGRzW3NLZXldID0ge1xuXHRcdFx0a2V5OiBzS2V5LFxuXHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25GaWVsZD8uYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRjb25kaXRpb25QYXRoOiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogZmlsdGVyRmllbGQubGFiZWwsXG5cdFx0XHRwb3NpdGlvbjogZmlsdGVyRmllbGQucG9zaXRpb24gfHwgeyBwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlciB9LFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgfHwgQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpIHtcblx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZCh7fSwgcHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJSZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IGFueSwgc1Jlc3RyaWN0aW9uOiBhbnkpIHtcblx0aWYgKHNSZXN0cmljdGlvbiA9PT0gXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8fCBzUmVzdHJpY3Rpb24gPT09IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikge1xuXHRcdGxldCBhUHJvcHMgPSBbXTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aCB8fCBvUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQcm9wcztcblx0fSBlbHNlIGlmIChzUmVzdHJpY3Rpb24gPT09IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCIpIHtcblx0XHRjb25zdCBtQWxsb3dlZEV4cHJlc3Npb25zID0ge30gYXMgYW55O1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LnZhbHVlXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LnZhbHVlXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LnZhbHVlXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xuXHR9XG5cdHJldHVybiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjtcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRzZWFyY2hcIixcblx0XHRwYXRoOiBcIiRzZWFyY2hcIixcblx0XHRkYXRhVHlwZTogc1N0cmluZ0RhdGFUeXBlLFxuXHRcdG1heENvbmRpdGlvbnM6IDFcblx0fTtcbn07XG5cbmNvbnN0IGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0bGV0IHNlYXJjaFJlc3RyaWN0aW9ucztcblx0aWYgKCFNb2RlbEhlbHBlci5pc1NpbmdsZXRvbihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdGNvbnN0IGNhcGFiaWxpdGVzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXM7XG5cdFx0c2VhcmNoUmVzdHJpY3Rpb25zID0gY2FwYWJpbGl0ZXM/LlNlYXJjaFJlc3RyaWN0aW9ucztcblx0fVxuXHRyZXR1cm4gc2VhcmNoUmVzdHJpY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoOiBzdHJpbmcpIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnM6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0KG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoID09PSBzTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoKVxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufTtcblxuY29uc3QgX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAob0ZpbHRlckZpZWxkSW5mbzogYW55KSB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoLFxuXHRcdGxhYmVsOiBvRmlsdGVyRmllbGRJbmZvLmxhYmVsLFxuXHRcdGhpZGRlbkZpbHRlcjogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIsXG5cdFx0ZGlzcGxheTogXCJWYWx1ZVwiLFxuXHRcdGlzUGFyYW1ldGVyOiBvRmlsdGVyRmllbGRJbmZvLmlzUGFyYW1ldGVyLFxuXHRcdGNhc2VTZW5zaXRpdmU6IG9GaWx0ZXJGaWVsZEluZm8uY2FzZVNlbnNpdGl2ZSxcblx0XHRhdmFpbGFiaWxpdHk6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5LFxuXHRcdHBvc2l0aW9uOiBvRmlsdGVyRmllbGRJbmZvLnBvc2l0aW9uLFxuXHRcdHR5cGU6IG9GaWx0ZXJGaWVsZEluZm8udHlwZSxcblx0XHR0ZW1wbGF0ZTogb0ZpbHRlckZpZWxkSW5mby50ZW1wbGF0ZSxcblx0XHRtZW51OiBvRmlsdGVyRmllbGRJbmZvLm1lbnUsXG5cdFx0cmVxdWlyZWQ6IG9GaWx0ZXJGaWVsZEluZm8ucmVxdWlyZWRcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uID0gZnVuY3Rpb24gKGFFeHByZXNzaW9uczogYW55KSB7XG5cdGNvbnN0IGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSA9IFtcblx0XHRcIlNpbmdsZVZhbHVlXCIsXG5cdFx0XCJNdWx0aVZhbHVlXCIsXG5cdFx0XCJTaW5nbGVSYW5nZVwiLFxuXHRcdFwiTXVsdGlSYW5nZVwiLFxuXHRcdFwiU2VhcmNoRXhwcmVzc2lvblwiLFxuXHRcdFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXG5cdF07XG5cblx0YUV4cHJlc3Npb25zLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0cmV0dXJuIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGEpIC0gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYik7XG5cdH0pO1xuXG5cdHJldHVybiBhRXhwcmVzc2lvbnNbMF07XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAob1Byb3BlcnR5QW5ub3RhdGlvbnM6IGFueSwgb0NvbGxlY3Rpb25Bbm5vdGF0aW9uczogYW55KSB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBvRmlsdGVyRmllbGRJbmZvOiBhbnksIG9UeXBlQ29uZmlnOiBhbnkpIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aC5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbmNvbnN0IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmcgPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuID0gZmFsc2UsXG5cdGxpbmVJdGVtVGVybT86IHN0cmluZ1xuKSB7XG5cdC8vIEZldGNoIGFsbCBzZWxlY3Rpb25WYXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudHM6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBnZXRTZWxlY3Rpb25WYXJpYW50cyhsclRhYmxlcywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IGdldEV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyhzZWxlY3Rpb25WYXJpYW50cyk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Ly9GaWx0ZXJzIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB3aGljaCBpcyBwYXJ0IG9mIFNWL0RlZmF1bHQgYW5ub3RhdGlvbnMgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBTZWxlY3Rpb25GaWVsZHNcblx0Y29uc3QgYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzID0gKChhbm5vdGF0aW9uUGF0aCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGFubm90YXRpb25QYXRoKT8uYW5ub3RhdGlvbikgfHxcblx0XHRlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzIHx8XG5cdFx0W10pIGFzIFByb3BlcnR5UGF0aFtdO1xuXG5cdGNvbnN0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuXHRcdFx0aWYgKF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkoZW50cnkpKSB7XG5cdFx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhlbnRyeS5WYWx1ZS5wYXRoLnNwbGl0KFwiL1wiKVswXSkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goZW50cnkuVmFsdWUucGF0aC5zcGxpdChcIi9cIilbMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkczogYW55ID1cblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGguc3BsaXQoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKVswXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZpbHRlclByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHByb3BlcnR5UGF0aCA6IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkcyxcblx0XHRcdFx0XHRmaWx0ZXJQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cExhYmVsID0gXCJcIjtcblx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0fSwgW10pIHx8IFtdO1xuXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkc1xuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGaWVsZHM6IGZpbHRlckZpZWxkcyxcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHM6IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRkZWZhdWx0RmlsdGVyRmllbGRzOiBkZWZhdWx0RmlsdGVyRmllbGRzXG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hUeXBlQ29uZmlnID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuXHRjb25zdCBvVHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIHByb3BlcnR5Py50eXBlKTtcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIChvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkIHx8IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB0cnVlKSkge1xuXHRcdG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG9UeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBhbnksXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFSZXF1aXJlZFByb3BzOiBhbnksXG5cdGFUeXBlQ29uZmlnOiBhbnlcbikge1xuXHRsZXQgb1Byb3BlcnR5SW5mbzogYW55ID0gZmV0Y2hQcm9wZXJ0eUluZm8oY29udmVydGVyQ29udGV4dCwgcHJvcGVydHlJbmZvRmllbGQsIGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleV0pLFxuXHRcdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyA9IFwiXCI7XG5cdGlmIChwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoKSB7XG5cdFx0c1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvXFwrfFxcKi9nLCBcIlwiKTtcblx0fVxuXHRpZiAob1Byb3BlcnR5SW5mbykge1xuXHRcdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRcdG1heENvbmRpdGlvbnM6ICFvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyICYmIGlzTXVsdGlWYWx1ZShvUHJvcGVydHlJbmZvKSA/IC0xIDogMSxcblx0XHRcdHJlcXVpcmVkOiBwcm9wZXJ0eUluZm9GaWVsZC5yZXF1aXJlZCA/PyAob1Byb3BlcnR5SW5mby5pc1BhcmFtZXRlciB8fCBhUmVxdWlyZWRQcm9wcy5pbmRleE9mKHNQcm9wZXJ0eVBhdGgpID49IDApLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZGF0YVR5cGU6IGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleV0udHlwZVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkczogYW55LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcz86IGFueVxuKSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRUeXBlczogYW55ID0gW107XG5cdGNvbnN0IGFUeXBlQ29uZmlnOiBhbnkgPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZDogYW55KSB7XG5cdFx0aWYgKHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRzZWxlY3Rpb25GaWVsZFR5cGVzLnB1c2gocHJvcGVydHlUYXJnZXRPYmplY3Q/LnR5cGUpO1xuXHRcdFx0Y29uc3Qgb1R5cGVDb25maWcgPSBmZXRjaFR5cGVDb25maWcocHJvcGVydHlUYXJnZXRPYmplY3QpO1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IG9UeXBlQ29uZmlnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3Rpb25GaWVsZFR5cGVzLnB1c2goc0VkbVN0cmluZyk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0geyB0eXBlOiBzU3RyaW5nRGF0YVR5cGUgfTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIGZpbHRlclJlc3RyaWN0aW9uc1xuXHRsZXQgX29GaWx0ZXJyZXN0cmljdGlvbnM7XG5cdGlmICghTW9kZWxIZWxwZXIuaXNTaW5nbGV0b24oY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRfb0ZpbHRlcnJlc3RyaWN0aW9ucyA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcylcblx0XHRcdD8uRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHR9XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBfb0ZpbHRlcnJlc3RyaWN0aW9ucztcblx0Y29uc3Qgb1JldCA9IHt9IGFzIGFueTtcblx0b1JldFtcIlJlcXVpcmVkUHJvcGVydGllc1wiXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldFtcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXRbXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIl0gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIikgfHwge307XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdKTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW10pO1xuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0ge1xuXHRcdFx0Li4uKGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIikgfHwge30pLFxuXHRcdFx0Li4ub1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcblx0XHR9O1xuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXM7XG5cdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcHMgPSBvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRjb25zdCBhRmV0Y2hlZFByb3BlcnRpZXM6IGFueSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkOiBhbnkpIHtcblx0XHRsZXQgc1Byb3BlcnR5UGF0aDtcblx0XHRpZiAoYU5vbkZpbHRlcmFibGVQcm9wcy5pbmRleE9mKHNQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5SW5mbyA9IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIGFSZXF1aXJlZFByb3BzLCBhVHlwZUNvbmZpZyk7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vYWRkIGVkaXRcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKSB7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLCB7XG5cdFx0XCJhdmFpbGFiaWxpdHlcIjogXCJvdmVyd3JpdGVcIixcblx0XHRsYWJlbDogXCJvdmVyd3JpdGVcIixcblx0XHR0eXBlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHBvc2l0aW9uOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHRlbXBsYXRlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHNldHRpbmdzOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHZpc3VhbEZpbHRlcjogXCJvdmVyd3JpdGVcIixcblx0XHRyZXF1aXJlZDogXCJvdmVyd3JpdGVcIlxuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZyA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IGFueSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0KTtcblx0YUZldGNoZWRQcm9wZXJ0aWVzLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0aWYgKGEuZ3JvdXBMYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGEuZ3JvdXBMYWJlbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoYi5ncm91cExhYmVsID09PSB1bmRlZmluZWQgfHwgYi5ncm91cExhYmVsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIGEuZ3JvdXBMYWJlbC5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCk7XG5cdH0pO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzO1xuXHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0bGV0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblxuXHRjb25zdCBhRmllbGRHcm91cHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiVUlcIiwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCk7XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4gYWdncmVnYXRlc1thZ2dyZWdhdGVLZXldLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRhbGxGaWx0ZXJzID0gYWxsRmlsdGVycy5maWx0ZXIoKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoZmlsdGVyRmllbGQua2V5KSA9PT0gLTE7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIEFkZCBjYXNlU2Vuc2l0aXZlIHByb3BlcnR5IHRvIGFsbCBzZWxlY3Rpb24gZmllbGRzLlxuXHRjb25zdCBpc0Nhc2VTZW5zaXRpdmUgPSBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCk7XG5cdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKChmaWx0ZXJGaWVsZCkgPT4ge1xuXHRcdGZpbHRlckZpZWxkLmNhc2VTZW5zaXRpdmUgPSBpc0Nhc2VTZW5zaXRpdmU7XG5cdH0pO1xuXG5cdHJldHVybiB7IHNlbGVjdGlvbkZpZWxkcywgc1Byb3BlcnR5SW5mbyB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBiYXIgaW5zaWRlIGEgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGlzIGlzIHRydWUgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkOlxuICogKDEpIGEgZmlsdGVyIHByb3BlcnR5IGlzIG1hbmRhdG9yeSxcbiAqICgyKSBubyBzZWFyY2ggZmllbGQgZXhpc3RzIChlbnRpdHkgaXNuJ3Qgc2VhcmNoIGVuYWJsZWQpLFxuICogKDMpIHdoZW4gdGhlIGRhdGEgaXNuJ3QgbG9hZGVkIGJ5IGRlZmF1bHQgKGFubm90YXRpb24gRmV0Y2hWYWx1ZXMgPSAyKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIFRoZSBGaWx0ZXJSZXN0cmljdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmFsdWVMaXN0QW5ub3RhdGlvbiBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IGFueSxcblx0dmFsdWVMaXN0QW5ub3RhdGlvbjogYW55XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlTGlzdEFubm90YXRpb24uZ2V0T2JqZWN0KCk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bb0RLQSxlOzthQUFBQSxlO0lBQUFBLGU7SUFBQUEsZTtLQUFBQSxlLEtBQUFBLGU7O0VBS0wsSUFBTUMsVUFBVSxHQUFHLFlBQW5CO0VBQ0EsSUFBTUMsZUFBZSxHQUFHLGdDQUF4Qjs7RUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyx5QkFBVCxDQUFtQ0MsVUFBbkMsRUFBd0Y7SUFDdkYsSUFBTUMsY0FBMkMsR0FBRyxFQUFwRDtJQUNBRCxVQUFVLENBQUNFLElBQVgsQ0FBZ0JDLE9BQWhCLENBQXdCLFVBQUNDLFNBQUQsRUFBdUM7TUFDOUQsSUFBSUEsU0FBUyxDQUFDQyxLQUFWLEtBQW9CLHNDQUF4QixFQUFnRTtRQUFBOztRQUMvREosY0FBYyxDQUFDRyxTQUFTLENBQUNFLEtBQVYsQ0FBZ0JDLElBQWpCLENBQWQs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
@@ -328,19 +328,18 @@ const _getFilterField = function (
328
328
  entityType: EntityType
329
329
  ): FilterField | undefined {
330
330
  let filterField: FilterField | undefined = filterFields[propertyPath];
331
- const availability = filterField && filterField.availability;
331
+
332
332
  if (filterField) {
333
333
  delete filterFields[propertyPath];
334
334
  } else {
335
335
  filterField = _createFilterSelectionField(entityType, entityType.resolvePath(propertyPath), propertyPath, true, converterContext);
336
336
  }
337
- if (!filterField) {
338
- converterContext.getDiagnostics()?.addIssue(IssueCategory.Annotation, IssueSeverity.High, IssueType.MISSING_SELECTIONFIELD);
339
- }
340
337
  // defined SelectionFields are available by default
341
338
  if (filterField) {
342
- filterField.availability = availability === AvailabilityType.Hidden ? AvailabilityType.Hidden : AvailabilityType.Default;
339
+ filterField.availability = filterField.availability === AvailabilityType.Hidden ? AvailabilityType.Hidden : AvailabilityType.Default;
343
340
  filterField.isParameter = !!entityType.annotations?.Common?.ResultContext;
341
+ } else {
342
+ converterContext.getDiagnostics()?.addIssue(IssueCategory.Annotation, IssueSeverity.High, IssueType.MISSING_SELECTIONFIELD);
344
343
  }
345
344
  return filterField;
346
345
  };
@@ -37,11 +37,13 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/format/DateFormat"], function (C
37
37
 
38
38
  formatWithBrackets.__functionName = "sap.fe.core.formatters.ValueFormatter#formatWithBrackets";
39
39
 
40
- var formatOPTitle = function (hasActiveEntity, isActiveEntity, firstPart, secondPart) {
40
+ var formatOPTitle = function (resource_NEW_OBJECT, resource_NO_HEADER_INFO, hasActiveEntity, isActiveEntity, firstPart, secondPart) {
41
41
  var result = formatWithBrackets(firstPart, secondPart);
42
42
 
43
43
  if (!result) {
44
- result = !isActiveEntity && !hasActiveEntity ? Core.getLibraryResourceBundle("sap.fe.templates").getText("T_NEW_OBJECT") : Core.getLibraryResourceBundle("sap.fe.templates").getText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO");
44
+ var newObjectResource = resource_NEW_OBJECT ? resource_NEW_OBJECT : Core.getLibraryResourceBundle("sap.fe.templates").getText("T_NEW_OBJECT");
45
+ var noHeaderInfoResource = resource_NO_HEADER_INFO ? resource_NO_HEADER_INFO : Core.getLibraryResourceBundle("sap.fe.templates").getText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO");
46
+ result = !isActiveEntity && !hasActiveEntity ? newObjectResource : noHeaderInfoResource;
45
47
  }
46
48
 
47
49
  return result;
@@ -197,4 +199,4 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/format/DateFormat"], function (C
197
199
 
198
200
  return valueFormatters;
199
201
  }, true);
200
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWx1ZUZvcm1hdHRlcnMiLCJzTmFtZSIsImhhc093blByb3BlcnR5Iiwib0FyZ3MiLCJhcHBseSIsImZvcm1hdFdpdGhCcmFja2V0cyIsImZpcnN0UGFydCIsInNlY29uZFBhcnQiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiZ2V0VGV4dCIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0T1BUaXRsZSIsImhhc0FjdGl2ZUVudGl0eSIsImlzQWN0aXZlRW50aXR5IiwicmVzdWx0IiwiZm9ybWF0V2l0aFBlcmNlbnRhZ2UiLCJzVmFsdWUiLCJ1bmRlZmluZWQiLCJjb21wdXRlUGVyY2VudGFnZSIsInZhbHVlIiwidGFyZ2V0Iiwic1VuaXQiLCJzUGVyY2VudFN0cmluZyIsImlWYWx1ZSIsInBhcnNlRmxvYXQiLCJpVGFyZ2V0IiwidG9TdHJpbmciLCJmb3JtYXRDcml0aWNhbGl0eUljb24iLCJ2YWwiLCJzSWNvbiIsImZvcm1hdENyaXRpY2FsaXR5VmFsdWVTdGF0ZSIsInNWYWx1ZVN0YXRlIiwiZm9ybWF0Q3JpdGljYWxpdHlCdXR0b25UeXBlIiwic1R5cGUiLCJmb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydCIsInNDb2xvciIsImZvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dCIsInVuaXQiLCJ1bml0U3BsaXQiLCJzcGxpdCIsInNlYXJjaFVuaXQiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImxvY2FsZURhdGEiLCJvTG9jYWxlRGF0YSIsIm1EYXRhIiwib1Jlc291cmNlTW9kZWwiLCJ1bml0RGlzcGxheWVkIiwiZGF0ZUZpZWxkcyIsImRpc3BsYXlOYW1lIiwidW5pdHMiLCJzaG9ydCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmFsdWVGb3JtYXR0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIHRhYmxlIGZvcm1hdHRlcnMuXG4gKlxuICogQHBhcmFtIHRoaXMgVGhlIGNvbnRleHRcbiAqIEBwYXJhbSBzTmFtZSBUaGUgaW5uZXIgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIG9BcmdzIFRoZSBpbm5lciBmdW5jdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb25cbiAqL1xuY29uc3QgdmFsdWVGb3JtYXR0ZXJzID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgc05hbWU6IHN0cmluZywgLi4ub0FyZ3M6IGFueVtdKTogYW55IHtcblx0aWYgKHZhbHVlRm9ybWF0dGVycy5oYXNPd25Qcm9wZXJ0eShzTmFtZSkpIHtcblx0XHRyZXR1cm4gKHZhbHVlRm9ybWF0dGVycyBhcyBhbnkpW3NOYW1lXS5hcHBseSh0aGlzLCBvQXJncyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cbn07XG5cbmNvbnN0IGZvcm1hdFdpdGhCcmFja2V0cyA9IChmaXJzdFBhcnQ/OiBzdHJpbmcsIHNlY29uZFBhcnQ/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRpZiAoZmlyc3RQYXJ0ICYmIHNlY29uZFBhcnQpIHtcblx0XHRyZXR1cm4gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKS5nZXRUZXh0KFwiQ19GT1JNQVRfRk9SX1RFWFRfQVJSQU5HRU1FTlRcIiwgW2ZpcnN0UGFydCwgc2Vjb25kUGFydF0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmaXJzdFBhcnQgfHwgc2Vjb25kUGFydCB8fCBcIlwiO1xuXHR9XG59O1xuZm9ybWF0V2l0aEJyYWNrZXRzLl9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlZhbHVlRm9ybWF0dGVyI2Zvcm1hdFdpdGhCcmFja2V0c1wiO1xuXG5jb25zdCBmb3JtYXRPUFRpdGxlID0gKGhhc0FjdGl2ZUVudGl0eTogYm9vbGVhbiwgaXNBY3RpdmVFbnRpdHk6IGJvb2xlYW4sIGZpcnN0UGFydD86IHN0cmluZywgc2Vjb25kUGFydD86IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdGxldCByZXN1bHQgPSBmb3JtYXRXaXRoQnJhY2tldHMoZmlyc3RQYXJ0LCBzZWNvbmRQYXJ0KTtcblx0aWYgKCFyZXN1bHQpIHtcblx0XHRyZXN1bHQgPVxuXHRcdFx0IWlzQWN0aXZlRW50aXR5ICYmICFoYXNBY3RpdmVFbnRpdHlcblx0XHRcdFx0PyBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS50ZW1wbGF0ZXNcIikuZ2V0VGV4dChcIlRfTkVXX09CSkVDVFwiKVxuXHRcdFx0XHQ6IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLnRlbXBsYXRlc1wiKS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfT0JKRUNUX1BBR0VfSEVBREVSX1RJVExFX05PX0hFQURFUl9JTkZPXCJcblx0XHRcdFx0ICApO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xuZm9ybWF0T1BUaXRsZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRPUFRpdGxlXCI7XG5cbmNvbnN0IGZvcm1hdFdpdGhQZXJjZW50YWdlID0gKHNWYWx1ZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBzVmFsdWUgIT09IG51bGwgJiYgc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBgJHtzVmFsdWV9ICVgIDogXCJcIjtcbn07XG5mb3JtYXRXaXRoUGVyY2VudGFnZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRXaXRoUGVyY2VudGFnZVwiO1xuXG5jb25zdCBjb21wdXRlUGVyY2VudGFnZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB0YXJnZXQ6IHN0cmluZyB8IG51bWJlciwgc1VuaXQ/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRsZXQgc1BlcmNlbnRTdHJpbmc6IHN0cmluZztcblx0Y29uc3QgaVZhbHVlOiBudW1iZXIgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IHZhbHVlO1xuXHRjb25zdCBpVGFyZ2V0OiBudW1iZXIgPSB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiID8gcGFyc2VGbG9hdCh0YXJnZXQpIDogdGFyZ2V0O1xuXG5cdGlmIChzVW5pdCA9PT0gXCIlXCIpIHtcblx0XHRpZiAoaVZhbHVlID4gMTAwKSB7XG5cdFx0XHRzUGVyY2VudFN0cmluZyA9IFwiMTAwXCI7XG5cdFx0fSBlbHNlIGlmIChpVmFsdWUgPD0gMCkge1xuXHRcdFx0c1BlcmNlbnRTdHJpbmcgPSBcIjBcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BlcmNlbnRTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlPy50b1N0cmluZygpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpVmFsdWUgPiBpVGFyZ2V0KSB7XG5cdFx0c1BlcmNlbnRTdHJpbmcgPSBcIjEwMFwiO1xuXHR9IGVsc2UgaWYgKGlWYWx1ZSA8PSAwKSB7XG5cdFx0c1BlcmNlbnRTdHJpbmcgPSBcIjBcIjtcblx0fSBlbHNlIHtcblx0XHRzUGVyY2VudFN0cmluZyA9IGlWYWx1ZSAmJiBpVGFyZ2V0ID8gKChpVmFsdWUgLyBpVGFyZ2V0KSAqIDEwMCkudG9TdHJpbmcoKSA6IFwiMFwiO1xuXHR9XG5cdHJldHVybiBzUGVyY2VudFN0cmluZztcbn07XG5jb21wdXRlUGVyY2VudGFnZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNjb21wdXRlUGVyY2VudGFnZVwiO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3JpdGljYWxpdHlJY29uID0gKHZhbD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGxldCBzSWNvbjogc3RyaW5nO1xuXHRpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiIHx8IHZhbCA9PT0gXCIxXCIgfHwgdmFsID09PSAxKSB7XG5cdFx0c0ljb24gPSBcInNhcC1pY29uOi8vbWVzc2FnZS1lcnJvclwiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvQ3JpdGljYWxcIiB8fCB2YWwgPT09IFwiMlwiIHx8IHZhbCA9PT0gMikge1xuXHRcdHNJY29uID0gXCJzYXAtaWNvbjovL21lc3NhZ2Utd2FybmluZ1wiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIiB8fCB2YWwgPT09IFwiM1wiIHx8IHZhbCA9PT0gMykge1xuXHRcdHNJY29uID0gXCJzYXAtaWNvbjovL21lc3NhZ2Utc3VjY2Vzc1wiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvSW5mb3JtYXRpb25cIiB8fCB2YWwgPT09IFwiNVwiIHx8IHZhbCA9PT0gNSkge1xuXHRcdHNJY29uID0gXCJzYXAtaWNvbjovL21lc3NhZ2UtaW5mb3JtYXRpb25cIjtcblx0fSBlbHNlIHtcblx0XHRzSWNvbiA9IFwiXCI7XG5cdH1cblx0cmV0dXJuIHNJY29uO1xufTtcbmZvcm1hdENyaXRpY2FsaXR5SWNvbi5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRDcml0aWNhbGl0eUljb25cIjtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdENyaXRpY2FsaXR5VmFsdWVTdGF0ZSA9ICh2YWw/OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRsZXQgc1ZhbHVlU3RhdGU6IHN0cmluZztcblx0aWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIiB8fCB2YWwgPT09IFwiMVwiIHx8IHZhbCA9PT0gMSkge1xuXHRcdHNWYWx1ZVN0YXRlID0gXCJFcnJvclwiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvQ3JpdGljYWxcIiB8fCB2YWwgPT09IFwiMlwiIHx8IHZhbCA9PT0gMikge1xuXHRcdHNWYWx1ZVN0YXRlID0gXCJXYXJuaW5nXCI7XG5cdH0gZWxzZSBpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiIHx8IHZhbCA9PT0gXCIzXCIgfHwgdmFsID09PSAzKSB7XG5cdFx0c1ZhbHVlU3RhdGUgPSBcIlN1Y2Nlc3NcIjtcblx0fSBlbHNlIGlmICh2YWwgPT09IFwiVUkuQ3JpdGljYWxpdHlUeXBlL0luZm9ybWF0aW9uXCIgfHwgdmFsID09PSBcIjVcIiB8fCB2YWwgPT09IDUpIHtcblx0XHRzVmFsdWVTdGF0ZSA9IFwiSW5mb3JtYXRpb25cIjtcblx0fSBlbHNlIHtcblx0XHRzVmFsdWVTdGF0ZSA9IFwiTm9uZVwiO1xuXHR9XG5cdHJldHVybiBzVmFsdWVTdGF0ZTtcbn07XG5mb3JtYXRDcml0aWNhbGl0eVZhbHVlU3RhdGUuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuVmFsdWVGb3JtYXR0ZXIjZm9ybWF0Q3JpdGljYWxpdHlWYWx1ZVN0YXRlXCI7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDcml0aWNhbGl0eUJ1dHRvblR5cGUgPSAodmFsPzogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0bGV0IHNUeXBlOiBzdHJpbmc7XG5cdGlmICh2YWwgPT09IFwiVUkuQ3JpdGljYWxpdHlUeXBlL05lZ2F0aXZlXCIgfHwgdmFsID09PSBcIjFcIiB8fCB2YWwgPT09IDEpIHtcblx0XHRzVHlwZSA9IFwiUmVqZWN0XCI7XG5cdH0gZWxzZSBpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiIHx8IHZhbCA9PT0gXCIzXCIgfHwgdmFsID09PSAzKSB7XG5cdFx0c1R5cGUgPSBcIkFjY2VwdFwiO1xuXHR9IGVsc2Uge1xuXHRcdHNUeXBlID0gXCJEZWZhdWx0XCI7XG5cdH1cblx0cmV0dXJuIHNUeXBlO1xufTtcbmZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRDcml0aWNhbGl0eUJ1dHRvblR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdENyaXRpY2FsaXR5Q29sb3JNaWNyb0NoYXJ0ID0gKHZhbD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGxldCBzQ29sb3I6IHN0cmluZztcblx0aWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIiB8fCB2YWwgPT09IFwiMVwiIHx8IHZhbCA9PT0gMSkge1xuXHRcdHNDb2xvciA9IFwiRXJyb3JcIjtcblx0fSBlbHNlIGlmICh2YWwgPT09IFwiVUkuQ3JpdGljYWxpdHlUeXBlL0NyaXRpY2FsXCIgfHwgdmFsID09PSBcIjJcIiB8fCB2YWwgPT09IDIpIHtcblx0XHRzQ29sb3IgPSBcIkNyaXRpY2FsXCI7XG5cdH0gZWxzZSBpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiIHx8IHZhbCA9PT0gXCIzXCIgfHwgdmFsID09PSAzKSB7XG5cdFx0c0NvbG9yID0gXCJHb29kXCI7XG5cdH0gZWxzZSB7XG5cdFx0c0NvbG9yID0gXCJOZXV0cmFsXCI7XG5cdH1cblx0cmV0dXJuIHNDb2xvcjtcbn07XG5mb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydC5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydFwiO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0ID0gKHZhbHVlOiBhbnksIHRhcmdldDogYW55LCB1bml0OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAodmFsdWUgJiYgdGFyZ2V0ICYmIHVuaXQpIHtcblx0XHRjb25zdCB1bml0U3BsaXQgPSB1bml0LnNwbGl0KFwiLVwiKTtcblx0XHRjb25zdCBzZWFyY2hVbml0ID0gYCR7dW5pdFNwbGl0WzFdID09PSB1bmRlZmluZWQgPyB1bml0IDogdW5pdFNwbGl0WzFdfS1uYXJyb3dgO1xuXHRcdGNvbnN0IGRhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpIGFzIGFueTtcblx0XHRjb25zdCBsb2NhbGVEYXRhID0gZGF0ZUZvcm1hdC5vTG9jYWxlRGF0YS5tRGF0YTtcblx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKTtcblx0XHRsZXQgdW5pdERpc3BsYXllZCA9IHVuaXQ7XG5cdFx0aWYgKGxvY2FsZURhdGE/LmRhdGVGaWVsZHNbc2VhcmNoVW5pdF0/LmRpc3BsYXlOYW1lKSB7XG5cdFx0XHR1bml0RGlzcGxheWVkID0gbG9jYWxlRGF0YS5kYXRlRmllbGRzW3NlYXJjaFVuaXRdLmRpc3BsYXlOYW1lO1xuXHRcdH0gZWxzZSBpZiAobG9jYWxlRGF0YT8udW5pdHM/LnNob3J0W3VuaXRdPy5kaXNwbGF5TmFtZSkge1xuXHRcdFx0dW5pdERpc3BsYXllZCA9IGxvY2FsZURhdGEudW5pdHMuc2hvcnRbdW5pdF0uZGlzcGxheU5hbWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTU1PTl9QUk9HUkVTU19JTkRJQ0FUT1JfRElTUExBWV9WQUxVRV9XSVRIX1VPTVwiLCBbdmFsdWUsIHRhcmdldCwgdW5pdERpc3BsYXllZF0pO1xuXHR9XG59O1xuZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0Ll9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlZhbHVlRm9ybWF0dGVyI2Zvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dFwiO1xuXG52YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzID0gZm9ybWF0V2l0aEJyYWNrZXRzO1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdE9QVGl0bGUgPSBmb3JtYXRPUFRpdGxlO1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlID0gZm9ybWF0V2l0aFBlcmNlbnRhZ2U7XG52YWx1ZUZvcm1hdHRlcnMuY29tcHV0ZVBlcmNlbnRhZ2UgPSBjb21wdXRlUGVyY2VudGFnZTtcbnZhbHVlRm9ybWF0dGVycy5mb3JtYXRDcml0aWNhbGl0eUljb24gPSBmb3JtYXRDcml0aWNhbGl0eUljb247XG52YWx1ZUZvcm1hdHRlcnMuZm9ybWF0Q3JpdGljYWxpdHlWYWx1ZVN0YXRlID0gZm9ybWF0Q3JpdGljYWxpdHlWYWx1ZVN0YXRlO1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZSA9IGZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZTtcbnZhbHVlRm9ybWF0dGVycy5mb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydCA9IGZvcm1hdENyaXRpY2FsaXR5Q29sb3JNaWNyb0NoYXJ0O1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dCA9IGZvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dDtcbi8qKlxuICogQGdsb2JhbFxuICovXG5leHBvcnQgZGVmYXVsdCB2YWx1ZUZvcm1hdHRlcnM7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQUVBO0FBQ0E7QUFDQTtB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
202
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWx1ZUZvcm1hdHRlcnMiLCJzTmFtZSIsImhhc093blByb3BlcnR5Iiwib0FyZ3MiLCJhcHBseSIsImZvcm1hdFdpdGhCcmFja2V0cyIsImZpcnN0UGFydCIsInNlY29uZFBhcnQiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiZ2V0VGV4dCIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0T1BUaXRsZSIsInJlc291cmNlX05FV19PQkpFQ1QiLCJyZXNvdXJjZV9OT19IRUFERVJfSU5GTyIsImhhc0FjdGl2ZUVudGl0eSIsImlzQWN0aXZlRW50aXR5IiwicmVzdWx0IiwibmV3T2JqZWN0UmVzb3VyY2UiLCJub0hlYWRlckluZm9SZXNvdXJjZSIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwic1ZhbHVlIiwidW5kZWZpbmVkIiwiY29tcHV0ZVBlcmNlbnRhZ2UiLCJ2YWx1ZSIsInRhcmdldCIsInNVbml0Iiwic1BlcmNlbnRTdHJpbmciLCJpVmFsdWUiLCJwYXJzZUZsb2F0IiwiaVRhcmdldCIsInRvU3RyaW5nIiwiZm9ybWF0Q3JpdGljYWxpdHlJY29uIiwidmFsIiwic0ljb24iLCJmb3JtYXRDcml0aWNhbGl0eVZhbHVlU3RhdGUiLCJzVmFsdWVTdGF0ZSIsImZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZSIsInNUeXBlIiwiZm9ybWF0Q3JpdGljYWxpdHlDb2xvck1pY3JvQ2hhcnQiLCJzQ29sb3IiLCJmb3JtYXRQcm9ncmVzc0luZGljYXRvclRleHQiLCJ1bml0IiwidW5pdFNwbGl0Iiwic3BsaXQiLCJzZWFyY2hVbml0IiwiZGF0ZUZvcm1hdCIsIkRhdGVGb3JtYXQiLCJnZXREYXRlSW5zdGFuY2UiLCJsb2NhbGVEYXRhIiwib0xvY2FsZURhdGEiLCJtRGF0YSIsIm9SZXNvdXJjZU1vZGVsIiwidW5pdERpc3BsYXllZCIsImRhdGVGaWVsZHMiLCJkaXNwbGF5TmFtZSIsInVuaXRzIiwic2hvcnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZhbHVlRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbi8qKlxuICogQ29sbGVjdGlvbiBvZiB0YWJsZSBmb3JtYXR0ZXJzLlxuICpcbiAqIEBwYXJhbSB0aGlzIFRoZSBjb250ZXh0XG4gKiBAcGFyYW0gc05hbWUgVGhlIGlubmVyIGZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSBvQXJncyBUaGUgaW5uZXIgZnVuY3Rpb24gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIHZhbHVlIGZyb20gdGhlIGlubmVyIGZ1bmN0aW9uXG4gKi9cbmNvbnN0IHZhbHVlRm9ybWF0dGVycyA9IGZ1bmN0aW9uICh0aGlzOiBvYmplY3QsIHNOYW1lOiBzdHJpbmcsIC4uLm9BcmdzOiBhbnlbXSk6IGFueSB7XG5cdGlmICh2YWx1ZUZvcm1hdHRlcnMuaGFzT3duUHJvcGVydHkoc05hbWUpKSB7XG5cdFx0cmV0dXJuICh2YWx1ZUZvcm1hdHRlcnMgYXMgYW55KVtzTmFtZV0uYXBwbHkodGhpcywgb0FyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG5jb25zdCBmb3JtYXRXaXRoQnJhY2tldHMgPSAoZmlyc3RQYXJ0Pzogc3RyaW5nLCBzZWNvbmRQYXJ0Pzogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0aWYgKGZpcnN0UGFydCAmJiBzZWNvbmRQYXJ0KSB7XG5cdFx0cmV0dXJuIENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtmaXJzdFBhcnQsIHNlY29uZFBhcnRdKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmlyc3RQYXJ0IHx8IHNlY29uZFBhcnQgfHwgXCJcIjtcblx0fVxufTtcbmZvcm1hdFdpdGhCcmFja2V0cy5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRXaXRoQnJhY2tldHNcIjtcblxuY29uc3QgZm9ybWF0T1BUaXRsZSA9IChcblx0cmVzb3VyY2VfTkVXX09CSkVDVDogc3RyaW5nLFxuXHRyZXNvdXJjZV9OT19IRUFERVJfSU5GTzogc3RyaW5nLFxuXHRoYXNBY3RpdmVFbnRpdHk6IGJvb2xlYW4sXG5cdGlzQWN0aXZlRW50aXR5OiBib29sZWFuLFxuXHRmaXJzdFBhcnQ/OiBzdHJpbmcsXG5cdHNlY29uZFBhcnQ/OiBzdHJpbmdcbik6IHN0cmluZyA9PiB7XG5cdGxldCByZXN1bHQgPSBmb3JtYXRXaXRoQnJhY2tldHMoZmlyc3RQYXJ0LCBzZWNvbmRQYXJ0KTtcblx0aWYgKCFyZXN1bHQpIHtcblx0XHRjb25zdCBuZXdPYmplY3RSZXNvdXJjZSA9IHJlc291cmNlX05FV19PQkpFQ1Rcblx0XHRcdD8gcmVzb3VyY2VfTkVXX09CSkVDVFxuXHRcdFx0OiBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS50ZW1wbGF0ZXNcIikuZ2V0VGV4dChcIlRfTkVXX09CSkVDVFwiKTtcblx0XHRjb25zdCBub0hlYWRlckluZm9SZXNvdXJjZSA9IHJlc291cmNlX05PX0hFQURFUl9JTkZPXG5cdFx0XHQ/IHJlc291cmNlX05PX0hFQURFUl9JTkZPXG5cdFx0XHQ6IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLnRlbXBsYXRlc1wiKS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRV9OT19IRUFERVJfSU5GT1wiXG5cdFx0XHQgICk7XG5cdFx0cmVzdWx0ID0gIWlzQWN0aXZlRW50aXR5ICYmICFoYXNBY3RpdmVFbnRpdHkgPyBuZXdPYmplY3RSZXNvdXJjZSA6IG5vSGVhZGVySW5mb1Jlc291cmNlO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xuZm9ybWF0T1BUaXRsZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRPUFRpdGxlXCI7XG5cbmNvbnN0IGZvcm1hdFdpdGhQZXJjZW50YWdlID0gKHNWYWx1ZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBzVmFsdWUgIT09IG51bGwgJiYgc1ZhbHVlICE9PSB1bmRlZmluZWQgPyBgJHtzVmFsdWV9ICVgIDogXCJcIjtcbn07XG5mb3JtYXRXaXRoUGVyY2VudGFnZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRXaXRoUGVyY2VudGFnZVwiO1xuXG5jb25zdCBjb21wdXRlUGVyY2VudGFnZSA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB0YXJnZXQ6IHN0cmluZyB8IG51bWJlciwgc1VuaXQ/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRsZXQgc1BlcmNlbnRTdHJpbmc6IHN0cmluZztcblx0Y29uc3QgaVZhbHVlOiBudW1iZXIgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IHZhbHVlO1xuXHRjb25zdCBpVGFyZ2V0OiBudW1iZXIgPSB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiID8gcGFyc2VGbG9hdCh0YXJnZXQpIDogdGFyZ2V0O1xuXG5cdGlmIChzVW5pdCA9PT0gXCIlXCIpIHtcblx0XHRpZiAoaVZhbHVlID4gMTAwKSB7XG5cdFx0XHRzUGVyY2VudFN0cmluZyA9IFwiMTAwXCI7XG5cdFx0fSBlbHNlIGlmIChpVmFsdWUgPD0gMCkge1xuXHRcdFx0c1BlcmNlbnRTdHJpbmcgPSBcIjBcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BlcmNlbnRTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlPy50b1N0cmluZygpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpVmFsdWUgPiBpVGFyZ2V0KSB7XG5cdFx0c1BlcmNlbnRTdHJpbmcgPSBcIjEwMFwiO1xuXHR9IGVsc2UgaWYgKGlWYWx1ZSA8PSAwKSB7XG5cdFx0c1BlcmNlbnRTdHJpbmcgPSBcIjBcIjtcblx0fSBlbHNlIHtcblx0XHRzUGVyY2VudFN0cmluZyA9IGlWYWx1ZSAmJiBpVGFyZ2V0ID8gKChpVmFsdWUgLyBpVGFyZ2V0KSAqIDEwMCkudG9TdHJpbmcoKSA6IFwiMFwiO1xuXHR9XG5cdHJldHVybiBzUGVyY2VudFN0cmluZztcbn07XG5jb21wdXRlUGVyY2VudGFnZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNjb21wdXRlUGVyY2VudGFnZVwiO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3JpdGljYWxpdHlJY29uID0gKHZhbD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGxldCBzSWNvbjogc3RyaW5nO1xuXHRpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiIHx8IHZhbCA9PT0gXCIxXCIgfHwgdmFsID09PSAxKSB7XG5cdFx0c0ljb24gPSBcInNhcC1pY29uOi8vbWVzc2FnZS1lcnJvclwiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvQ3JpdGljYWxcIiB8fCB2YWwgPT09IFwiMlwiIHx8IHZhbCA9PT0gMikge1xuXHRcdHNJY29uID0gXCJzYXAtaWNvbjovL21lc3NhZ2Utd2FybmluZ1wiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIiB8fCB2YWwgPT09IFwiM1wiIHx8IHZhbCA9PT0gMykge1xuXHRcdHNJY29uID0gXCJzYXAtaWNvbjovL21lc3NhZ2Utc3VjY2Vzc1wiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvSW5mb3JtYXRpb25cIiB8fCB2YWwgPT09IFwiNVwiIHx8IHZhbCA9PT0gNSkge1xuXHRcdHNJY29uID0gXCJzYXAtaWNvbjovL21lc3NhZ2UtaW5mb3JtYXRpb25cIjtcblx0fSBlbHNlIHtcblx0XHRzSWNvbiA9IFwiXCI7XG5cdH1cblx0cmV0dXJuIHNJY29uO1xufTtcbmZvcm1hdENyaXRpY2FsaXR5SWNvbi5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRDcml0aWNhbGl0eUljb25cIjtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdENyaXRpY2FsaXR5VmFsdWVTdGF0ZSA9ICh2YWw/OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRsZXQgc1ZhbHVlU3RhdGU6IHN0cmluZztcblx0aWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIiB8fCB2YWwgPT09IFwiMVwiIHx8IHZhbCA9PT0gMSkge1xuXHRcdHNWYWx1ZVN0YXRlID0gXCJFcnJvclwiO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvQ3JpdGljYWxcIiB8fCB2YWwgPT09IFwiMlwiIHx8IHZhbCA9PT0gMikge1xuXHRcdHNWYWx1ZVN0YXRlID0gXCJXYXJuaW5nXCI7XG5cdH0gZWxzZSBpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiIHx8IHZhbCA9PT0gXCIzXCIgfHwgdmFsID09PSAzKSB7XG5cdFx0c1ZhbHVlU3RhdGUgPSBcIlN1Y2Nlc3NcIjtcblx0fSBlbHNlIGlmICh2YWwgPT09IFwiVUkuQ3JpdGljYWxpdHlUeXBlL0luZm9ybWF0aW9uXCIgfHwgdmFsID09PSBcIjVcIiB8fCB2YWwgPT09IDUpIHtcblx0XHRzVmFsdWVTdGF0ZSA9IFwiSW5mb3JtYXRpb25cIjtcblx0fSBlbHNlIHtcblx0XHRzVmFsdWVTdGF0ZSA9IFwiTm9uZVwiO1xuXHR9XG5cdHJldHVybiBzVmFsdWVTdGF0ZTtcbn07XG5mb3JtYXRDcml0aWNhbGl0eVZhbHVlU3RhdGUuX19mdW5jdGlvbk5hbWUgPSBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuVmFsdWVGb3JtYXR0ZXIjZm9ybWF0Q3JpdGljYWxpdHlWYWx1ZVN0YXRlXCI7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDcml0aWNhbGl0eUJ1dHRvblR5cGUgPSAodmFsPzogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0bGV0IHNUeXBlOiBzdHJpbmc7XG5cdGlmICh2YWwgPT09IFwiVUkuQ3JpdGljYWxpdHlUeXBlL05lZ2F0aXZlXCIgfHwgdmFsID09PSBcIjFcIiB8fCB2YWwgPT09IDEpIHtcblx0XHRzVHlwZSA9IFwiUmVqZWN0XCI7XG5cdH0gZWxzZSBpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiIHx8IHZhbCA9PT0gXCIzXCIgfHwgdmFsID09PSAzKSB7XG5cdFx0c1R5cGUgPSBcIkFjY2VwdFwiO1xuXHR9IGVsc2Uge1xuXHRcdHNUeXBlID0gXCJEZWZhdWx0XCI7XG5cdH1cblx0cmV0dXJuIHNUeXBlO1xufTtcbmZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZS5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRDcml0aWNhbGl0eUJ1dHRvblR5cGVcIjtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdENyaXRpY2FsaXR5Q29sb3JNaWNyb0NoYXJ0ID0gKHZhbD86IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGxldCBzQ29sb3I6IHN0cmluZztcblx0aWYgKHZhbCA9PT0gXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmVcIiB8fCB2YWwgPT09IFwiMVwiIHx8IHZhbCA9PT0gMSkge1xuXHRcdHNDb2xvciA9IFwiRXJyb3JcIjtcblx0fSBlbHNlIGlmICh2YWwgPT09IFwiVUkuQ3JpdGljYWxpdHlUeXBlL0NyaXRpY2FsXCIgfHwgdmFsID09PSBcIjJcIiB8fCB2YWwgPT09IDIpIHtcblx0XHRzQ29sb3IgPSBcIkNyaXRpY2FsXCI7XG5cdH0gZWxzZSBpZiAodmFsID09PSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiIHx8IHZhbCA9PT0gXCIzXCIgfHwgdmFsID09PSAzKSB7XG5cdFx0c0NvbG9yID0gXCJHb29kXCI7XG5cdH0gZWxzZSB7XG5cdFx0c0NvbG9yID0gXCJOZXV0cmFsXCI7XG5cdH1cblx0cmV0dXJuIHNDb2xvcjtcbn07XG5mb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydC5fX2Z1bmN0aW9uTmFtZSA9IFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5WYWx1ZUZvcm1hdHRlciNmb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydFwiO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0ID0gKHZhbHVlOiBhbnksIHRhcmdldDogYW55LCB1bml0OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAodmFsdWUgJiYgdGFyZ2V0ICYmIHVuaXQpIHtcblx0XHRjb25zdCB1bml0U3BsaXQgPSB1bml0LnNwbGl0KFwiLVwiKTtcblx0XHRjb25zdCBzZWFyY2hVbml0ID0gYCR7dW5pdFNwbGl0WzFdID09PSB1bmRlZmluZWQgPyB1bml0IDogdW5pdFNwbGl0WzFdfS1uYXJyb3dgO1xuXHRcdGNvbnN0IGRhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpIGFzIGFueTtcblx0XHRjb25zdCBsb2NhbGVEYXRhID0gZGF0ZUZvcm1hdC5vTG9jYWxlRGF0YS5tRGF0YTtcblx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKTtcblx0XHRsZXQgdW5pdERpc3BsYXllZCA9IHVuaXQ7XG5cdFx0aWYgKGxvY2FsZURhdGE/LmRhdGVGaWVsZHNbc2VhcmNoVW5pdF0/LmRpc3BsYXlOYW1lKSB7XG5cdFx0XHR1bml0RGlzcGxheWVkID0gbG9jYWxlRGF0YS5kYXRlRmllbGRzW3NlYXJjaFVuaXRdLmRpc3BsYXlOYW1lO1xuXHRcdH0gZWxzZSBpZiAobG9jYWxlRGF0YT8udW5pdHM/LnNob3J0W3VuaXRdPy5kaXNwbGF5TmFtZSkge1xuXHRcdFx0dW5pdERpc3BsYXllZCA9IGxvY2FsZURhdGEudW5pdHMuc2hvcnRbdW5pdF0uZGlzcGxheU5hbWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTU1PTl9QUk9HUkVTU19JTkRJQ0FUT1JfRElTUExBWV9WQUxVRV9XSVRIX1VPTVwiLCBbdmFsdWUsIHRhcmdldCwgdW5pdERpc3BsYXllZF0pO1xuXHR9XG59O1xuZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0Ll9fZnVuY3Rpb25OYW1lID0gXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlZhbHVlRm9ybWF0dGVyI2Zvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dFwiO1xuXG52YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzID0gZm9ybWF0V2l0aEJyYWNrZXRzO1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdE9QVGl0bGUgPSBmb3JtYXRPUFRpdGxlO1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlID0gZm9ybWF0V2l0aFBlcmNlbnRhZ2U7XG52YWx1ZUZvcm1hdHRlcnMuY29tcHV0ZVBlcmNlbnRhZ2UgPSBjb21wdXRlUGVyY2VudGFnZTtcbnZhbHVlRm9ybWF0dGVycy5mb3JtYXRDcml0aWNhbGl0eUljb24gPSBmb3JtYXRDcml0aWNhbGl0eUljb247XG52YWx1ZUZvcm1hdHRlcnMuZm9ybWF0Q3JpdGljYWxpdHlWYWx1ZVN0YXRlID0gZm9ybWF0Q3JpdGljYWxpdHlWYWx1ZVN0YXRlO1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZSA9IGZvcm1hdENyaXRpY2FsaXR5QnV0dG9uVHlwZTtcbnZhbHVlRm9ybWF0dGVycy5mb3JtYXRDcml0aWNhbGl0eUNvbG9yTWljcm9DaGFydCA9IGZvcm1hdENyaXRpY2FsaXR5Q29sb3JNaWNyb0NoYXJ0O1xudmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dCA9IGZvcm1hdFByb2dyZXNzSW5kaWNhdG9yVGV4dDtcbi8qKlxuICogQGdsb2JhbFxuICovXG5leHBvcnQgZGVmYXVsdCB2YWx1ZUZvcm1hdHRlcnM7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxJQUFNQSxlQUFlLEdBQUcsVUFBd0JDLEtBQXhCLEVBQTZEO0lBQ3BGLElBQUlELGVBQWUsQ0FBQ0UsY0FBaEIsQ0FBK0JELEtBQS9CLENBQUosRUFBMkM7TUFBQSxrQ0FEc0JFLEtBQ3RCO1FBRHNCQSxLQUN0QjtNQUFBOztNQUMxQyxPQUFRSCxlQUFELENBQXlCQyxLQUF6QixFQUFnQ0csS0FBaEMsQ0FBc0MsSUFBdEMsRUFBNENELEtBQTVDLENBQVA7SUFDQSxDQUZELE1BRU87TUFDTixPQUFPLEVBQVA7SUFDQTtFQUNELENBTkQ7O0VBUUEsSUFBTUUsa0JBQWtCLEdBQUcsVUFBQ0MsU0FBRCxFQUFxQkMsVUFBckIsRUFBcUQ7SUFDL0UsSUFBSUQsU0FBUyxJQUFJQyxVQUFqQixFQUE2QjtNQUM1QixPQUFPQyxJQUFJLENBQUNDLHdCQUFMLENBQThCLGFBQTlCLEVBQTZDQyxPQUE3QyxDQUFxRCwrQkFBckQsRUFBc0YsQ0FBQ0osU0FBRCxFQUFZQyxVQUFaLENBQXRGLENBQVA7SUFDQSxDQUZELE1BRU87TUFDTixPQUFPRCxTQUFTLElBQUlDLFVBQWIsSUFBMkIsRUFBbEM7SUFD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
@@ -25,15 +25,25 @@ const formatWithBrackets = (firstPart?: string, secondPart?: string): string =>
25
25
  };
26
26
  formatWithBrackets.__functionName = "sap.fe.core.formatters.ValueFormatter#formatWithBrackets";
27
27
 
28
- const formatOPTitle = (hasActiveEntity: boolean, isActiveEntity: boolean, firstPart?: string, secondPart?: string): string => {
28
+ const formatOPTitle = (
29
+ resource_NEW_OBJECT: string,
30
+ resource_NO_HEADER_INFO: string,
31
+ hasActiveEntity: boolean,
32
+ isActiveEntity: boolean,
33
+ firstPart?: string,
34
+ secondPart?: string
35
+ ): string => {
29
36
  let result = formatWithBrackets(firstPart, secondPart);
30
37
  if (!result) {
31
- result =
32
- !isActiveEntity && !hasActiveEntity
33
- ? Core.getLibraryResourceBundle("sap.fe.templates").getText("T_NEW_OBJECT")
34
- : Core.getLibraryResourceBundle("sap.fe.templates").getText(
35
- "T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO"
36
- );
38
+ const newObjectResource = resource_NEW_OBJECT
39
+ ? resource_NEW_OBJECT
40
+ : Core.getLibraryResourceBundle("sap.fe.templates").getText("T_NEW_OBJECT");
41
+ const noHeaderInfoResource = resource_NO_HEADER_INFO
42
+ ? resource_NO_HEADER_INFO
43
+ : Core.getLibraryResourceBundle("sap.fe.templates").getText(
44
+ "T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO"
45
+ );
46
+ result = !isActiveEntity && !hasActiveEntity ? newObjectResource : noHeaderInfoResource;
37
47
  }
38
48
  return result;
39
49
  };
@@ -68,7 +68,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/FPMFormatter", "sap/fe/co
68
68
  controls: [],
69
69
  elements: [],
70
70
  // eslint-disable-next-line no-template-curly-in-string
71
- version: "1.108.3",
71
+ version: "1.108.7",
72
72
  noLibraryCSS: true,
73
73
  extensions: {
74
74
  //Configuration used for rule loading of Support Assistant