@sapui5/sap.fe.core 1.124.1 → 1.124.3

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.
@@ -1801,6 +1801,7 @@ type ComplexTypeFormatOptions = {
1801
1801
  showMeasure?: boolean;
1802
1802
  parseAsString?: boolean;
1803
1803
  parseKeepsEmptyString?: boolean;
1804
+ emptyString?: string | number | null;
1804
1805
  showTime?: boolean;
1805
1806
  showDate?: boolean;
1806
1807
  showTimezone?: boolean;
@@ -1825,7 +1826,13 @@ function _getComplexTypeFormatOptionsFromFirstParam<T, U extends Fn<T>>(
1825
1826
  param?.type === "sap.ui.model.odata.type.Decimal" ||
1826
1827
  param?.type === "sap.ui.model.odata.type.Double")
1827
1828
  ) {
1828
- formatOptions = formatOptions?.showMeasure === false ? { showMeasure: false } : {};
1829
+ if (param?.type === "sap.ui.model.odata.type.Int64" || param?.type === "sap.ui.model.odata.type.Decimal") {
1830
+ //sap.ui.model.odata.type.Int64 do not support parseAsString false
1831
+ formatOptions = formatOptions?.showMeasure === false ? { showMeasure: false } : {};
1832
+ } else {
1833
+ formatOptions = formatOptions?.showMeasure === false ? { parseAsString: false, showMeasure: false } : { parseAsString: false };
1834
+ }
1835
+ formatOptions.emptyString = null;
1829
1836
  }
1830
1837
  return formatOptions;
1831
1838
  }
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/CriticalityFormatter", "s
48
48
  controls: [],
49
49
  elements: [],
50
50
  // eslint-disable-next-line no-template-curly-in-string
51
- version: "1.124.1",
51
+ version: "1.124.3",
52
52
  noLibraryCSS: true,
53
53
  extensions: {
54
54
  //Configuration used for rule loading of Support Assistant
@@ -567,7 +567,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/BusyLocker", "s
567
567
  return true;
568
568
  });
569
569
  }
570
- return this.oRouterProxy.navToHash(sTargetPath, false, parameters === null || parameters === void 0 ? void 0 : parameters.noPreservationCache, parameters === null || parameters === void 0 ? void 0 : parameters.forceFocus, !isStickyMode).then(bNavigated => {
570
+ return this.oRouterProxy.navToHash(sTargetPath, !!parameters.preserveHistory, parameters === null || parameters === void 0 ? void 0 : parameters.noPreservationCache, parameters === null || parameters === void 0 ? void 0 : parameters.forceFocus, !isStickyMode).then(bNavigated => {
571
571
  if (!bNavigated) {
572
572
  // The navigation did not happen --> remove the navigation parameters from the queue as they shouldn't be used
573
573
  this.navigationInfoQueue.pop();
@@ -948,4 +948,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controllerextensions/BusyLocker", "s
948
948
  }(ServiceFactory);
949
949
  return RoutingServiceFactory;
950
950
  }, false);
951
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsIkV2ZW50UHJvdmlkZXIiLCJSb3V0aW5nU2VydmljZSIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJlbmFibGVkIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsInNjb3BlVHlwZSIsIm9BcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsImV2ZW50UHJvdmlkZXIiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0RW50cnkiLCJyb3V0aW5nIiwiX3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24iLCJvQXBwQ29uZmlnIiwib3V0Ym91bmRzIiwiY3Jvc3NOYXZpZ2F0aW9uIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImJlZm9yZUV4aXQiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfZm5PblJvdXRlTWF0Y2hlZCIsImZpcmVFdmVudCIsImV4aXQiLCJkZXN0cm95IiwiaXNGQ0wiLCJjb25maWciLCJyb3V0ZXJDbGFzcyIsIl9tVGFyZ2V0cyIsInRhcmdldHMiLCJzVGFyZ2V0TmFtZSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJ0YXJnZXROYW1lIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJ2aWV3TGV2ZWwiLCJfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4iLCJfbVJvdXRlcyIsInJvdXRlcyIsIm9Sb3V0ZU1hbmlmZXN0SW5mbyIsImFSb3V0ZVRhcmdldHMiLCJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0Iiwic1JvdXRlTmFtZSIsIm5hbWUiLCJzUm91dGVQYXR0ZXJuIiwicGF0dGVybiIsImxlbmd0aCIsImluZGV4T2YiLCJMb2ciLCJ3YXJuaW5nIiwiaVJvdXRlTGV2ZWwiLCJyb3V0ZUxldmVsIiwiaXRlbSIsInNQYXJlbnRUYXJnZXROYW1lIiwicGFyZW50IiwicHVzaCIsIkZDTExldmVsIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiZm9yRWFjaCIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvU2V0dGluZ3MiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJ0YXJnZXRSb3V0ZSIsImRldGFpbCIsInJvdXRlIiwic3RhcnRzV2l0aCIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyaW5nIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJzVGFyZ2V0Q29tcG9uZW50SWQiLCJfc093bmVySWQiLCJnZXRJZCIsInNDb3JyZWN0VGFyZ2V0TmFtZSIsImlkIiwidmlld0lkIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9MYXN0U2VtYW50aWNNYXBwaW5nIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9NYXBwaW5nIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsImRlbGF5ZWRVc2FnZSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJtUGFyYW1ldGVycyIsImdldFVSTCIsInRhcmdldFVybCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJsb2NhbENvbnRleHRQYXRoIiwiam9pbiIsImxvY2FsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJvVmFsdWUiLCJvUHJvcGVydHlJbmZvIiwiZ2V0T2JqZWN0Iiwic0VkbVR5cGUiLCIkVHlwZSIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwiYWxsIiwiYVJlc29sdmVkUGFyYW1ldGVycyIsInZhbHVlIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJrZXkiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlcnMiLCJvUmVzb2x2ZWRQYXJhbWV0ZXIiLCJvRXJyb3IiLCJlcnJvciIsIl9maXJlUm91dGVNYXRjaEV2ZW50cyIsIkVkaXRTdGF0ZSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIiwibmF2aWdhdGVUb0NvbnRleHQiLCJjb250ZXh0IiwicGFyYW1ldGVycyIsInZpZXdEYXRhIiwiY3VycmVudFRhcmdldEluZm8iLCJyb3V0ZVBhcmFtZXRlcnNQcm9taXNlIiwiaXNTdGlja3lNb2RlIiwidGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25JbmZvIiwib1JvdXRlRGV0YWlsIiwiaXNBIiwic1RhcmdldFBhdGgiLCJfZ2V0UGF0aEZyb21Db250ZXh0IiwiYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCIsImV4aXRGcm9tQXBwIiwiY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMiLCJzTGF5b3V0IiwiX2NhbGN1bGF0ZUxheW91dCIsIm9OYXZpZ2F0aW9uSW5mbyIsImJUYXJnZXRFZGl0YWJsZSIsImVkaXRhYmxlIiwiYlBlcnNpc3RPUFNjcm9sbCIsInBlcnNpc3RPUFNjcm9sbCIsImJTaG93UGxhY2Vob2xkZXIiLCJzaG93UGxhY2Vob2xkZXIiLCJyZWFzb24iLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsInVwZGF0ZUZDTExldmVsIiwicmVjcmVhdGVDb250ZXh0IiwidXNlQ29udGV4dCIsImNoZWNrTm9IYXNoQ2hhbmdlIiwic0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSIsImdldEhhc2giLCJyb3V0ZUluZm9CeUhhc2giLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJtRXZlbnRQYXJhbWV0ZXJzIiwicm91dGVJbmZvcm1hdGlvbiIsInNDdXJyZW50Um91dGVOYW1lIiwicm91dGVQYXR0ZXJuIiwic0N1cnJlbnRSb3V0ZVBhdHRlcm4iLCJ2aWV3cyIsImFDdXJyZW50Vmlld3MiLCJzZXRGb2N1c0ZvcmNlZCIsImZvcmNlRm9jdXMiLCJ0cmFuc2llbnQiLCJpbmNsdWRlcyIsIm5hdk1vZGUiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJDb250YWluZXIiLCJzaGVsbFNlcnZpY2VIZWxwZXIiLCJnZXRTaGVsbFNlcnZpY2VzIiwicGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2VydmljZUFzeW5jIiwiaHJlZiIsImdldEhyZWYiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInVybCIsIlVSTCIsIndpbmRvdyIsIm9yaWdpbiIsInBhdGhuYW1lIiwiZW5jb2RlVVJJIiwib3BlbldpbmRvdyIsIm9Sb3V0ZUluZm8iLCJvUm91dGUiLCJzTGFzdFRhcmdldE5hbWUiLCJvVGFyZ2V0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsIm9Sb3V0ZVBhcmFtZXRlcnMiLCJuYXZUbyIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJiTmF2aWdhdGVkIiwicG9wIiwibmF2aWdhdGVUb1JvdXRlIiwic1RhcmdldFJvdXRlTmFtZSIsInNUYXJnZXRVUkwiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJzUGF0aCIsInRlc3QiLCJzU2VtYW50aWNQYXRoIiwidGVjaG5pY2FsUGF0aCIsInNlbWFudGljUGF0aCIsIl9maW5kUGF0aFRvTmF2aWdhdGUiLCJfY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aCIsIm1ldGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImlzRHJhZnRSb290IiwiZ2V0UHJvcGVydHkiLCJlbnRpdHlTZXROYW1lIiwiZ2V0U2VtYW50aWNLZXlzIiwiZ2V0SGVhZGVyQ29udGV4dCIsImxheW91dCIsImZpbmRMYXlvdXRGb3JIYXNoIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY2FsY3VsYXRlTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJfYmVmb3JlUm91dGVNYXRjaGVkIiwiYlBsYWNlaG9sZGVyRW5hYmxlZCIsIlBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiX2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkiLCJoaXN0b3J5Iiwic3RhdGUiLCJmZUxldmVsIiwiX29uUm91dGVNYXRjaGVkIiwib0V2ZW50Iiwib0FwcFN0YXRlSGFuZGxlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImlzTG9ja2VkIiwidW5sb2NrIiwiZ2V0UGFyYW1ldGVycyIsImNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAiLCJOYXZpZ2F0aW9uUmVhc29uIiwiQXBwU3RhdGVDaGFuZ2VkIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJjaGVja1Jlc3RvcmVIaXN0b3J5V2FzVHJpZ2dlcmVkIiwiUmVzdG9yZUhpc3RvcnkiLCJyZXNldFJlc3RvcmVIaXN0b3J5RmxhZyIsImdldFBhcmFtZXRlciIsInJlc3RvcmVIaXN0b3J5IiwicmVzb2x2ZVJvdXRlTWF0Y2giLCJjYXRjaCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIm9EYXRhIiwiZm5GdW5jdGlvbiIsIm9MaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiZGV0YWNoRXZlbnQiLCJhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImRldGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkNvbGxhYm9yYXRpb24iLCJkZWZhdWx0IiwiQ29sbGFib3JhdGlvbkhlbHBlciIsInByb2Nlc3NBbmRFeHBhbmRIYXNoIiwiYmluZCIsImF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsInJlc2V0RWRpdFN0YXRlIiwiYklzSWFwcFN0YXRlIiwiZ2V0SGFzaENoYW5nZXIiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsImJIYXNTdGFydFVwUGFyYW1ldGVycyIsInNIYXNoIiwicHJlZmVycmVkTW9kZSIsInRvVXBwZXJDYXNlIiwiX21hbmFnZUNyZWF0ZVN0YXJ0dXAiLCJfbWFuYWdlRGVlcExpbmtTdGFydHVwIiwiX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdCIsImdldERlZmF1bHRDcmVhdGVIYXNoIiwiQXBwU3RhcnR1cEhlbHBlciIsImdldENvbnRleHRQYXRoIiwiZ2V0Q3JlYXRlU3RhcnR1cEhhc2giLCJzTmV3SGFzaCIsInJlcGxhY2VIYXNoIiwic2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJhbHdheXNDaGVja1RhcmdldEV4aXN0ZW5jZSIsImFwcCIsIl9jaGVja0V4aXN0ZW5jZU9uRGVlcExpbmsiLCJnZXREZWVwTGlua1N0YXJ0dXBIYXNoIiwib0RlZXBMaW5rIiwic1RlY2huaWNhbFBhdGgiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJyZXN1bHRpbmdIYXNoIiwic2hvdWxkRWRpdCIsInZlcmlmeUVkaXRBbm5vdGF0aW9ucyIsInBhcmFtZXRlciIsImdldE91dGJvdW5kcyIsImdldEludGVyZmFjZSIsIlNlcnZpY2UiLCJSb3V0aW5nU2VydmljZUZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIm9Sb3V0aW5nU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nU2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcblxuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEFwcFN0YXJ0dXBIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQXBwU3RhcnR1cEhlbHBlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSwgUm91dGluZ0NvbmZpZ3VyYXRpb24sIFJvdXRpbmdUYXJnZXQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhVXRpbHMgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVV0aWxzXCI7XG5pbXBvcnQgb3BlbldpbmRvdyBmcm9tIFwic2FwL3VpL3V0aWwvb3BlbldpbmRvd1wiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuXG50eXBlIFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlRXZlbnRpbmdcIilcbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgZXh0ZW5kcyBFdmVudFByb3ZpZGVyIHtcblx0QGV2ZW50KClcblx0cm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cblx0QGV2ZW50KClcblx0YWZ0ZXJSb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgUm91dGluZ0V2ZW50UGFyYW1ldGVycyA9IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgJiB7XG5cdG5hdmlnYXRpb25JbmZvPzogeyByZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uIH07XG5cdHJvdXRlSW5mb3JtYXRpb24/OiB1bmtub3duO1xuXHRyb3V0ZVBhdHRlcm4/OiBzdHJpbmc7XG5cdGNvbmZpZzogeyBwYXR0ZXJuPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyA9XG5cdHwgeyBtb2RlOiBcIkFzeW5jXCI7IGNyZWF0ZUNvbnRleHRQcm9taXNlOiBQcm9taXNlPENvbnRleHQ+IH1cblx0fCB7IG1vZGU6IFwiRGVmZXJyZWRcIjsgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmc7IHBhcmVudENvbnRleHQ/OiBDb250ZXh0OyBkYXRhPzogb2JqZWN0IH07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyA9IHtcblx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/OiBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycztcblx0YlRhcmdldEVkaXRhYmxlPzogYm9vbGVhbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGJTaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHR1c2VDb250ZXh0PzogQ29udGV4dDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG5cdGJBY3Rpb25DcmVhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRjaGVja05vSGFzaENoYW5nZT86IGJvb2xlYW47XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGVkaXRhYmxlPzogYm9vbGVhbjtcblx0dHJhbnNpZW50PzogYm9vbGVhbjtcblx0cGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0RkNMTGV2ZWw/OiBudW1iZXI7XG5cdHVwZGF0ZUZDTExldmVsPzogbnVtYmVyO1xuXHRub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjtcblx0cmVjcmVhdGVDb250ZXh0PzogYm9vbGVhbjtcblx0Zm9yY2VGb2N1cz86IGJvb2xlYW47XG5cdHRhcmdldFBhdGg/OiBzdHJpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGNhbGxFeHRlbnNpb24/OiBib29sZWFuO1xuXHRsYXlvdXQ/OiBzdHJpbmc7XG5cdGtlZXBDdXJyZW50TGF5b3V0PzogYm9vbGVhbjtcblx0bmF2TW9kZT86IHN0cmluZztcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nUGFyYW1ldGVyTWFwID0ge1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG50eXBlIE1pbmltYWxQYWdlU2V0dGluZyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0ZnVsbENvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uPzogUmVjb3JkPHN0cmluZywgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24+O1xufTtcblxudHlwZSBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHRhcmdldHM6IHN0cmluZ1tdO1xuXHRyb3V0ZUxldmVsOiBudW1iZXI7XG59O1xuXG50eXBlIFJlc29sdmVkUGFyYW1ldGVycyA9IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH07XG5cbmV4cG9ydCBjbGFzcyBSb3V0aW5nU2VydmljZSBleHRlbmRzIFNlcnZpY2U8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRvQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG9Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0b1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPjtcblxuXHRvdXRib3VuZHMhOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+O1xuXG5cdF9tVGFyZ2V0cyE6IFJlY29yZDxzdHJpbmcsIFJvdXRpbmdUYXJnZXQ+O1xuXG5cdF9tUm91dGVzITogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24+O1xuXG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nO1xuXG5cdGJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3Q/OiBib29sZWFuO1xuXG5cdHNDdXJyZW50Um91dGVOYW1lPzogc3RyaW5nO1xuXG5cdHNDdXJyZW50Um91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXG5cdGFDdXJyZW50Vmlld3M/OiAoVmlldyB8IENvbXBvbmVudENvbnRhaW5lcilbXTtcblxuXHRuYXZpZ2F0aW9uSW5mb1F1ZXVlOiBSb3V0aW5nTmF2aWdhdGlvbkluZm9bXSA9IFtdO1xuXG5cdHNDb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRfZm5PblJvdXRlTWF0Y2hlZCE6IChldjogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KSA9PiB2b2lkO1xuXG5cdGVuYWJsZWQgPSBmYWxzZTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0LnNjb3BlVHlwZSA9PT0gXCJjb21wb25lbnRcIikge1xuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0XHR0aGlzLm9Nb2RlbCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblx0XHRcdHRoaXMuZXZlbnRQcm92aWRlciA9IG5ldyBSb3V0aW5nU2VydmljZUV2ZW50aW5nKCk7XG5cblx0XHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc7XG5cdFx0XHR0aGlzLl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnISk7XG5cblx0XHRcdGNvbnN0IG9BcHBDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHMgPz8ge307XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXG5cdGJlZm9yZUV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIHt9KTtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogUm91dGluZ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0XHRjb25zdCBpc0ZDTCA9IG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCI7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiB0YXJnZXRzXG5cdFx0dGhpcy5fbVRhcmdldHMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnRhcmdldHMpIHtcblx0XHRcdGZvciAoY29uc3Qgc1RhcmdldE5hbWUgb2YgT2JqZWN0LmtleXMob1JvdXRpbmdDb25maWcudGFyZ2V0cykpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdID0gT2JqZWN0LmFzc2lnbih7IHRhcmdldE5hbWU6IHNUYXJnZXROYW1lIH0sIG9Sb3V0aW5nQ29uZmlnLnRhcmdldHNbc1RhcmdldE5hbWVdKTtcblxuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBGQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB0YXJnZXQgcGF0dGVyblxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0dGVybiA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oY29udGV4dFBhdHRlcm4sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2Ygcm91dGVzXG5cdFx0dGhpcy5fbVJvdXRlcyA9IHt9O1xuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8ucm91dGVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9Sb3V0ZU1hbmlmZXN0SW5mbyBvZiBvUm91dGluZ0NvbmZpZy5yb3V0ZXMpIHtcblx0XHRcdFx0Y29uc3QgYVJvdXRlVGFyZ2V0cyA9IGdldFJvdXRlVGFyZ2V0TmFtZXMob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCksXG5cdFx0XHRcdFx0c1JvdXRlTmFtZSA9IG9Sb3V0ZU1hbmlmZXN0SW5mby5uYW1lLFxuXHRcdFx0XHRcdHNSb3V0ZVBhdHRlcm4gPSBvUm91dGVNYW5pZmVzdEluZm8ucGF0dGVybjtcblx0XHRcdFx0aWYgKCFzUm91dGVQYXR0ZXJuKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgcm91dGUgcGF0dGVybjogYWxsIHBhdHRlcm5zIG5lZWQgdG8gZW5kIHdpdGggJzo/cXVlcnk6JywgdGhhdCB3ZSB1c2UgZm9yIHBhcmFtZXRlcnNcblx0XHRcdFx0aWYgKHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIDwgOCB8fCBzUm91dGVQYXR0ZXJuLmluZGV4T2YoXCI6P3F1ZXJ5OlwiKSAhPT0gc1JvdXRlUGF0dGVybi5sZW5ndGggLSA4KSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoYFBhdHRlcm4gZm9yIHJvdXRlICR7c1JvdXRlTmFtZX0gZG9lc24ndCBlbmQgd2l0aCAnOj9xdWVyeTonIDogJHtzUm91dGVQYXR0ZXJufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlSb3V0ZUxldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1JvdXRlUGF0dGVybiwgMCk7XG5cdFx0XHRcdHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc1JvdXRlTmFtZSxcblx0XHRcdFx0XHRwYXR0ZXJuOiBzUm91dGVQYXR0ZXJuLFxuXHRcdFx0XHRcdHRhcmdldHM6IGFSb3V0ZVRhcmdldHMsXG5cdFx0XHRcdFx0cm91dGVMZXZlbDogaVJvdXRlTGV2ZWxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBZGQgdGhlIHBhcmVudCB0YXJnZXRzIGluIHRoZSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSByb3V0ZVxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJvdXRlVGFyZ2V0cykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbaXRlbV0ucGFyZW50O1xuXHRcdFx0XHRcdGlmIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5wdXNoKHNQYXJlbnRUYXJnZXROYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWlzRkNMKSB7XG5cdFx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHJvdXRlIHBhdHRlcm5cblx0XHRcdFx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWw7XG5cdFx0XHRcdFx0aWYgKHZpZXdMZXZlbCA9PT0gdW5kZWZpbmVkIHx8IHZpZXdMZXZlbCA8IGlSb3V0ZUxldmVsKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgY2FzZXMgd2hlbiBkaWZmZXJlbnQgcm91dGVzIHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gV2UgdGFrZSB0aGVcblx0XHRcdFx0XHRcdC8vIGxhcmdlc3Qgdmlld0xldmVsIGluIHRoYXQgY2FzZS5cblx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA9IGlSb3V0ZUxldmVsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZDTCBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBlcXVhbCB0byAtMVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVJvdXRlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uY29udHJvbEFnZ3JlZ2F0aW9uICE9PSBcImJlZ2luQ29sdW1uUGFnZXNcIikge1xuXHRcdFx0XHRcdC8vIFdlJ3JlIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgb25seSAxIHRhcmdldCBmb3IgdGhlIHJvdXRlLCBhbmQgaXQncyBub3QgaW4gdGhlIGZpcnN0IGNvbHVtblxuXHRcdFx0XHRcdC8vIC0tPiB0aGlzIGlzIGEgZnVsbHNjcmVlbiBjb2x1bW4gYWZ0ZXIgYWxsIGNvbHVtbnMgaW4gdGhlIEZDTCBoYXZlIGJlZW4gdXNlZFxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gMztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlciBGQ0wgY2FzZXNcblx0XHRcdFx0XHRhUm91dGVUYXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGFnYXRlIHZpZXdMZXZlbCwgY29udGV4dFBhdHRlcm4sIEZDTExldmVsIGFuZCBjb250cm9sQWdncmVnYXRpb24gdG8gcGFyZW50IHRhcmdldHNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdHdoaWxlIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb247XG5cdFx0XHRcdHNUYXJnZXROYW1lID0gc1BhcmVudFRhcmdldE5hbWU7XG5cdFx0XHRcdHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIERldGVybWluZSB0aGUgcm9vdCBlbnRpdHkgZm9yIHRoZSBhcHBcblx0XHRjb25zdCBhTGV2ZWwwUm91dGVOYW1lcyA9IFtdO1xuXHRcdGNvbnN0IGFMZXZlbDFSb3V0ZU5hbWVzID0gW107XG5cdFx0bGV0IHNEZWZhdWx0Um91dGVOYW1lO1xuXG5cdFx0Zm9yIChjb25zdCBzTmFtZSBpbiB0aGlzLl9tUm91dGVzKSB7XG5cdFx0XHRjb25zdCBpTGV2ZWwgPSB0aGlzLl9tUm91dGVzW3NOYW1lXS5yb3V0ZUxldmVsO1xuXHRcdFx0aWYgKGlMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRhTGV2ZWwwUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoaUxldmVsID09PSAxKSB7XG5cdFx0XHRcdGFMZXZlbDFSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhTGV2ZWwwUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMFJvdXRlTmFtZXNbMF07XG5cdFx0fSBlbHNlIGlmIChhTGV2ZWwxUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMVJvdXRlTmFtZXNbMF07XG5cdFx0fVxuXG5cdFx0aWYgKHNEZWZhdWx0Um91dGVOYW1lKSB7XG5cdFx0XHRjb25zdCBzRGVmYXVsdFRhcmdldE5hbWUgPSB0aGlzLl9tUm91dGVzW3NEZWZhdWx0Um91dGVOYW1lXS50YXJnZXRzLnNsaWNlKC0xKVswXTtcblx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRcdGNvbnN0IG9TZXR0aW5ncyA9IHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucz8uc2V0dGluZ3MgYXMgTWluaW1hbFBhZ2VTZXR0aW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9TZXR0aW5ncykge1xuXHRcdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCBgLyR7b1NldHRpbmdzLmVudGl0eVNldH1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLnNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRgQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCBvciBlbnRpdHlTZXQgbWlzc2luZyBpbiBkZWZhdWx0IHRhcmdldDogJHtzRGVmYXVsdFRhcmdldE5hbWV9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogbm8gZGVmYXVsdCByb3V0ZSBmb3VuZC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvcnJlY3QgcGF0aCB0byB0aGUgZGlmZmVyZW50IHBhZ2VzLCBpbmNsdWRpbmcgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKVxuXHRcdFx0Lm1hcCgoc1RhcmdldEtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0S2V5XTtcblx0XHRcdH0pXG5cdFx0XHQuc29ydCgoYTogUm91dGluZ1RhcmdldCwgYjogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBiLnZpZXdMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGEudmlld0xldmVsIDwgYi52aWV3TGV2ZWwgPyAtMSA6IDE7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goKHRhcmdldDogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHQvLyBBZnRlciBzb3J0aW5nIHRoZSB0YXJnZXRzIHBlciBsZXZlbCB3ZSBjYW4gdGhlbiBnbyB0aHJvdWdoIHRoZWlyIG5hdmlnYXRpb24gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBhdGhzIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRpZiAodGFyZ2V0Lm9wdGlvbnMpIHtcblx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHRhcmdldC5vcHRpb25zLnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZztcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBzZXR0aW5ncy5jb250ZXh0UGF0aCB8fCAoc2V0dGluZ3MuZW50aXR5U2V0ID8gYC8ke3NldHRpbmdzLmVudGl0eVNldH1gIDogXCJcIik7XG5cdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPSBgJHtzQ29udGV4dFBhdGh9L2A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKHNldHRpbmdzLm5hdmlnYXRpb24gfHwge30pLmZvckVhY2goKHNOYXZOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRSb3V0ZSA9IHRoaXMuX21Sb3V0ZXNbc2V0dGluZ3MubmF2aWdhdGlvbiFbc05hdk5hbWVdLmRldGFpbD8ucm91dGVdO1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHRhcmdldFJvdXRlLnRhcmdldHMpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Um91dGUudGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzPy5mdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICsgc05hdk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fS9gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMgVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gYC8ke3NQYXR0ZXJufWA7XG5cdFx0fVxuXHRcdGlmIChzUGF0dGVybi5sZW5ndGgpIHtcblx0XHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXR0ZXJuKSB8fCBzUGF0dGVybiA9PT0gXCJcIikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sICsrdmlld0xldmVsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgdmlld0xldmVsKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHZpZXdMZXZlbDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Um91dGVJbmZvcm1hdGlvbihzUm91dGVOYW1lPzogc3RyaW5nKTogSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRcdGlmIChzUm91dGVOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lPzogc3RyaW5nKTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNUYXJnZXROYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IHN0cmluZywgc0NvbXBvbmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChzQ29tcG9uZW50SWQuaW5kZXhPZihgJHtzT3duZXJJZH0tLS1gKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHJpbmcoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50SW5zdGFuY2UgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlLl9zT3duZXJJZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlLmdldElkXG5cdCAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFyZ2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50SW5zdGFuY2U6IENvbXBvbmVudCB8IFZpZXcpOiBSb3V0aW5nVGFyZ2V0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVGFyZ2V0Q29tcG9uZW50SWQgPSB0aGlzLl9nZXRDb21wb25lbnRJZChcblx0XHRcdChvQ29tcG9uZW50SW5zdGFuY2UgYXMgdW5rbm93biBhcyB7IF9zT3duZXJJZDogc3RyaW5nIH0pLl9zT3duZXJJZCxcblx0XHRcdG9Db21wb25lbnRJbnN0YW5jZS5nZXRJZCgpXG5cdFx0KTtcblx0XHRsZXQgc0NvcnJlY3RUYXJnZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uaWQgPT09IHNUYXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0lkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQpIHtcblx0XHRcdFx0c0NvcnJlY3RUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNDb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IHRydWVcblx0KTogUHJvbWlzZTwoKSA9PiB2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGxldCBzVGFyZ2V0VVJMUHJvbWlzZSwgYklzU3RpY2t5TW9kZTogYm9vbGVhbjtcblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSB7XG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0XHRpZiAoIW1QYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJNYXBwaW5nIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHNSb3V0ZU5hbWUsIG9Db250ZXh0KS50aGVuKFxuXHRcdFx0XHQobVBhcmFtZXRlcnM6IG9iamVjdCB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUhLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IHRhcmdldFVybCA9IGF3YWl0IHNUYXJnZXRVUkxQcm9taXNlO1xuXHRcdGNvbnN0IG5hdmlnYXRlRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2godGFyZ2V0VXJsISwgYlByZXNlcnZlSGlzdG9yeSwgZmFsc2UsIGZhbHNlLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0fTtcblx0XHRpZiAoZGVsYXllZFVzYWdlID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbjsgLy8gd3JvbmcgYnV0IHNvbWVob3cgdGhlIHR5cGVzIGFyZSBhbm5veWluZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0dXJuIGEgbWFwIG9mIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnMgd2hlcmUgdGhlIGJpbmRpbmcgc3ludGF4IGlzIHJlc29sdmVkIHRvIHRoZSBjdXJyZW50IG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUGFyYW1ldGVycyBtYXAgaW4gdGhlIGZvcm1hdCBbazogc3RyaW5nXSA6IENvbXBsZXhCaW5kaW5nU3ludGF4XG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdGFzeW5jIHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBSb3V0aW5nUGFyYW1ldGVyTWFwLCBzVGFyZ2V0Um91dGU6IHN0cmluZyB8IG51bGwsIG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRsZXQgb1BhcmFtZXRlcnNQcm9taXNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBhQ29udGV4dFBhdGhQYXJ0cyA9IHNDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzKS5tYXAoYXN5bmMgKHNQYXJhbWV0ZXJLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24gPSBtUGFyYW1ldGVyc1tzUGFyYW1ldGVyS2V5XTtcblx0XHRcdFx0Ly8gV2UgYXNzdW1lIHRoZSBkZWZpbmVkIHBhcmFtZXRlcnMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdFx0Y29uc3Qgb1BhcnNlZEV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0Y29uc3QgYVBhcnRzID0gb1BhcnNlZEV4cHJlc3Npb24ucGFydHMgfHwgW29QYXJzZWRFeHByZXNzaW9uXTtcblx0XHRcdFx0Y29uc3QgYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBhUGFydHMubWFwKGFzeW5jIGZ1bmN0aW9uIChvUGF0aFBhcnQ6IFByb3BlcnR5QmluZGluZ0luZm8pIHtcblx0XHRcdFx0XHRjb25zdCBhUmVsYXRpdmVQYXJ0cyA9IG9QYXRoUGFydC5wYXRoLnNwbGl0KFwiLi4vXCIpO1xuXHRcdFx0XHRcdC8vIFdlIGdvIHVwIHRoZSBjdXJyZW50IGNvbnRleHQgcGF0aCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGNvbnN0IGFMb2NhbFBhcnRzID0gYUNvbnRleHRQYXRoUGFydHMuc2xpY2UoMCwgYUNvbnRleHRQYXRoUGFydHMubGVuZ3RoIC0gYVJlbGF0aXZlUGFydHMubGVuZ3RoICsgMSk7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0UGF0aCA9IGFMb2NhbFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQ29udGV4dCA9XG5cdFx0XHRcdFx0XHRsb2NhbENvbnRleHRQYXRoID09PSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHRcdFx0PyBvQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQ6IG9Db250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQobG9jYWxDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cblx0XHRcdFx0XHRjb25zdCBvTWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGxvY2FsQ29udGV4dFBhdGggKyBcIi9cIiArIGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKTtcblx0XHRcdFx0XHRyZXR1cm4gbG9jYWxDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShhUmVsYXRpdmVQYXJ0c1thUmVsYXRpdmVQYXJ0cy5sZW5ndGggLSAxXSkudGhlbihmdW5jdGlvbiAob1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gb01ldGFDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBvUHJvcGVydHlJbmZvLiRUeXBlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChvVmFsdWUsIHNFZG1UeXBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKChhUmVzb2x2ZWRQYXJhbWV0ZXJzOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAoYUFsbFJlc29sdmVkUGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXJzW10pIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc29sdmVkUGFyYW1ldGVyOiBSZXNvbHZlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1tvUmVzb2x2ZWRQYXJhbWV0ZXIua2V5XSA9IG9SZXNvbHZlZFBhcmFtZXRlci52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUGFyYW1ldGVycztcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZCBub3QgcGFyc2UgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHJvdXRlICR7c1RhcmdldFJvdXRlfWApO1xuXHRcdFx0b1BhcmFtZXRlcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0fVxuXG5cdF9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVyczogUm91dGUkTWF0Y2hlZEV2ZW50UGFyYW1ldGVycyk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cblx0XHRFZGl0U3RhdGUuY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGUoKTsgLy8gUmVzZXQgVUkgc3RhdGUgd2hlbiBhbGwgYmluZGluZ3MgaGF2ZSBiZWVuIHJlZnJlc2hlZFxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0bywgb3IgdGhlIGxpc3QgYmluZGluZyBmb3IgY3JlYXRpb24gKGRlZmVycmVkIGNyZWF0aW9uKVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBtYXAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZV0gTmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVVJMXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5hc3luY0NvbnRleHRdIFRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgYXN5bmMsIG5hdmlnYXRlIHRvICguLi4pIGFuZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgUHJvbWlzZSB0byBiZSByZXNvbHZlZCBhbmQgdGhlbiBuYXZpZ2F0ZSBpbnRvIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRGVmZXJyZWRDb250ZXh0XSBUaGUgY29udGV4dCBzaGFsbCBiZSBjcmVhdGVkIGRlZmVycmVkIGF0IHRoZSB0YXJnZXQgcGFnZVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuZWRpdGFibGVdIFRoZSB0YXJnZXQgcGFnZSBzaGFsbCBiZSBpbW1lZGlhdGVseSBpbiB0aGUgZWRpdCBtb2RlIHRvIGF2b2lkIGZsaWNrZXJpbmdcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGxdIFRoZSBiUGVyc2lzdE9QU2Nyb2xsIHdpbGwgYmUgdXNlZCBmb3Igc2Nyb2xsaW5nIHRvIGZpcnN0IHRhYlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWxdIGArMWAgaWYgd2UgYWRkIGEgY29sdW1uIGluIEZDTCwgYC0xYCB0byByZW1vdmUgYSBjb2x1bW4sIDAgdG8gc3RheSBvbiB0aGUgc2FtZSBjb2x1bW5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLm5vUHJlc2VydmF0aW9uQ2FjaGVdIERvIG5hdmlnYXRpb24gd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwcmVzZXJ2ZWQgY2FjaGUgbWVjaGFuaXNtXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iUmVjcmVhdGVDb250ZXh0XSBGb3JjZSByZS1jcmVhdGlvbiBvZiB0aGUgY29udGV4dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmUgcGFzc2VkIGFzIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYkZvcmNlRm9jdXNdIEZvcmNlcyBmb2N1cyBzZWxlY3Rpb24gYWZ0ZXIgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhXSBWaWV3IGRhdGFcblx0ICogQHBhcmFtIFt2aWV3RGF0YS5uYXZpZ2F0aW9uXVxuXHQgKiBAcGFyYW0gW2N1cnJlbnRUYXJnZXRJbmZvXSBUaGUgdGFyZ2V0IGluZm9ybWF0aW9uIGZyb20gd2hpY2ggdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm8ubmFtZV1cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9LFxuXHRcdHZpZXdEYXRhPzogeyBuYXZpZ2F0aW9uPzogb2JqZWN0IH0sXG5cdFx0Y3VycmVudFRhcmdldEluZm8/OiB7IG5hbWU6IHN0cmluZyB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgdGFyZ2V0Um91dGUgPSBcIlwiO1xuXHRcdGxldCByb3V0ZVBhcmFtZXRlcnNQcm9taXNlOiBQcm9taXNlPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub01ldGFNb2RlbCk7XG5cblx0XHQvLyBNYW5hZ2UgcGFyYW1ldGVyIG1hcHBpbmdcblx0XHRpZiAocGFyYW1ldGVycz8udGFyZ2V0UGF0aCAmJiB2aWV3RGF0YT8ubmF2aWdhdGlvbikge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbkluZm8gPSB2aWV3RGF0YS5uYXZpZ2F0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHsgZGV0YWlsOiB7IHJvdXRlOiBzdHJpbmc7IHBhcmFtZXRlcnM6IG9iamVjdCB9IH0+O1xuXHRcdFx0Y29uc3Qgb1JvdXRlRGV0YWlsID0gbmF2aWdhdGlvbkluZm9bcGFyYW1ldGVycy50YXJnZXRQYXRoXS5kZXRhaWw7XG5cdFx0XHR0YXJnZXRSb3V0ZSA9IG9Sb3V0ZURldGFpbC5yb3V0ZTtcblxuXHRcdFx0aWYgKG9Sb3V0ZURldGFpbC5wYXJhbWV0ZXJzICYmIGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0cm91dGVQYXJhbWV0ZXJzUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0b1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRcdHRhcmdldFJvdXRlLFxuXHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc1RhcmdldFBhdGggPSB0aGlzLl9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0Ly8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlJ3JlIHN1cHBvc2VkIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBcblx0XHQvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGV4aXQgZnJvbSB0aGUgYXBwIGluc3RlYWRcblx0XHRpZiAoc1RhcmdldFBhdGgubGVuZ3RoID09PSAwICYmIHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCkge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkuZXhpdEZyb21BcHAoKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5hdmlnYXRpb24gZ29lcyB3aXRoIGEgY3JlYXRpb24sIHdlIGFkZCAoLi4uKSB0byB0aGUgcGF0aCAoZXhwZWN0aW5nIGNvbnRleHQgaXMgYW4gT0RhdGFMaXN0QmluZGluZylcblx0XHRpZiAocGFyYW1ldGVycz8uY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiKC4uLilcIjtcblx0XHR9XG5cblx0XHQvLyBBZGQgbGF5b3V0IHBhcmFtZXRlciBpZiBuZWVkZWRcblx0XHRjb25zdCBzTGF5b3V0ID0gdGhpcy5fY2FsY3VsYXRlTGF5b3V0KHNUYXJnZXRQYXRoLCBwYXJhbWV0ZXJzKTtcblx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gYD9sYXlvdXQ9JHtzTGF5b3V0fWA7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2FnZVxuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uSW5mbzogUm91dGluZ05hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM6IHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMsXG5cdFx0XHRiVGFyZ2V0RWRpdGFibGU6IHBhcmFtZXRlcnM/LmVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycz8ucGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0YlNob3dQbGFjZWhvbGRlcjogcGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgOiB0cnVlLFxuXHRcdFx0cmVhc29uOiBwYXJhbWV0ZXJzPy5yZWFzb24sXG5cdFx0XHRyZWRpcmVjdGVkVG9Ob25EcmFmdDogcGFyYW1ldGVycy5yZWRpcmVjdGVkVG9Ob25EcmFmdFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVycz8udXBkYXRlRkNMTGV2ZWwgIT09IC0xICYmIHBhcmFtZXRlcnM/LnJlY3JlYXRlQ29udGV4dCAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0b05hdmlnYXRpb25JbmZvLnVzZUNvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jaGVja05vSGFzaENoYW5nZSkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIG5ldyBoYXNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSA9IHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKS5yZXBsYWNlKC9bJj9dezF9c2FwLWlhcHAtc3RhdGU9W0EtWjAtOV0rLywgXCJcIik7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGggPT09IHNDdXJyZW50SGFzaE5vQXBwU3RhdGUpIHtcblx0XHRcdFx0Ly8gVGhlIGhhc2ggZG9lc24ndCBjaGFuZ2UsIGJ1dCB3ZSBmaXJlIHRoZSByb3V0ZU1hdGNoIGV2ZW50IHRvIHRyaWdnZXIgcGFnZSByZWZyZXNoIC8gYmluZGluZ1xuXHRcdFx0XHRjb25zdCByb3V0ZUluZm9CeUhhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKSk7XG5cdFx0XHRcdGxldCBtRXZlbnRQYXJhbWV0ZXJzOiBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0geyBjb25maWc6IHt9IH07XG5cdFx0XHRcdGlmIChyb3V0ZUluZm9CeUhhc2gpIHtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzID0geyAuLi5yb3V0ZUluZm9CeUhhc2gsIGNvbmZpZzoge30gfTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gb05hdmlnYXRpb25JbmZvO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMudmlld3MgPSB0aGlzLmFDdXJyZW50Vmlld3M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5zZXRGb2N1c0ZvcmNlZCghIXBhcmFtZXRlcnMuZm9yY2VGb2N1cyk7XG5cblx0XHRcdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobUV2ZW50UGFyYW1ldGVycyk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycz8udHJhbnNpZW50ICYmICEhcGFyYW1ldGVycy5lZGl0YWJsZSAmJiAhc1RhcmdldFBhdGguaW5jbHVkZXMoXCIoLi4uKVwiKSkge1xuXHRcdFx0aWYgKHNUYXJnZXRQYXRoLmluY2x1ZGVzKFwiP1wiKSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIpIHtcblx0XHRcdC8vIE5hdmlnYXRlIHRvIG5ldyB0YWIvIHdpbmRvd1xuXHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VzaGVsbC9Db250YWluZXJcIl0sIGFzeW5jIChDb250YWluZXI6IENvbnRhaW5lcikgPT4ge1xuXHRcdFx0XHRjb25zdCBzaGVsbFNlcnZpY2VIZWxwZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRjb25zdCBwYXJzZWRVcmwgPSBzaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25TZXJ2aWNlID0gKGF3YWl0IENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpKSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRjb25zdCBocmVmID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2UuZ2V0SHJlZih7XG5cdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogcGFyc2VkVXJsLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBwYXJzZWRVcmwuYWN0aW9uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFVybCA9IGAke3VybC5vcmlnaW59JHt1cmwucGF0aG5hbWV9JHtocmVmfSYvJHtlbmNvZGVVUkkoc1RhcmdldFBhdGgpfWA7XG5cdFx0XHRcdG9wZW5XaW5kb3codGFyZ2V0VXJsKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2xlYXIgdW5ib3VuZCBtZXNzYWdlcyB1cG9uIG5hdmlnYXRpbmcgZnJvbSBMUiB0byBPUFxuXHRcdFx0Ly8gVGhpcyBpcyB0byBlbnN1cmUgc3RhbGUgZXJyb3IgbWVzc2FnZXMgZnJvbSBMUiBhcmUgbm90IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIG5hdmlnYXRpb24gdG8gT1AuXG5cdFx0XHRpZiAoY3VycmVudFRhcmdldEluZm8/Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0Y29uc3Qgb1JvdXRlSW5mbyA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2goc1RhcmdldFBhdGgpO1xuXHRcdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3V0ZSA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24ob1JvdXRlSW5mby5uYW1lKTtcblx0XHRcdFx0XHRpZiAob1JvdXRlICYmIG9Sb3V0ZS50YXJnZXRzICYmIG9Sb3V0ZS50YXJnZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNMYXN0VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdFx0XHRpZiAob1RhcmdldCAmJiBvVGFyZ2V0Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaW4gdGhlIHF1ZXVlXG5cdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0XHRpZiAodGFyZ2V0Um91dGUgJiYgcm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcm91dGVQYXJhbWV0ZXJzUHJvbWlzZS50aGVuKChvUm91dGVQYXJhbWV0ZXJzOiBvYmplY3QpID0+IHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKG9Sb3V0ZVBhcmFtZXRlcnMsIHsgYklzU3RpY2t5TW9kZTogaXNTdGlja3lNb2RlIH0pO1xuXHRcdFx0XHRcdHRoaXMub1JvdXRlci5uYXZUbyh0YXJnZXRSb3V0ZSwgb1JvdXRlUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5uYXZUb0hhc2goc1RhcmdldFBhdGgsIGZhbHNlLCBwYXJhbWV0ZXJzPy5ub1ByZXNlcnZhdGlvbkNhY2hlLCBwYXJhbWV0ZXJzPy5mb3JjZUZvY3VzLCAhaXNTdGlja3lNb2RlKVxuXHRcdFx0XHQudGhlbigoYk5hdmlnYXRlZCkgPT4ge1xuXHRcdFx0XHRcdGlmICghYk5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW4gLS0+IHJlbW92ZSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHF1ZXVlIGFzIHRoZXkgc2hvdWxkbid0IGJlIHVzZWRcblx0XHRcdFx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5wb3AoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGJOYXZpZ2F0ZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICpcblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1JvdXRlUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9Sb3V0ZVBhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHNUYXJnZXRVUkwgPSB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNUYXJnZXRSb3V0ZU5hbWUsIG9Sb3V0ZVBhcmFtZXRlcnMpO1xuXHRcdHJldHVybiB0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2goc1RhcmdldFVSTCEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFvUm91dGVQYXJhbWV0ZXJzPy5iSXNTdGlja3lNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgaW1wYWN0ZWQgb3Igbm90XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIEZpcnN0LCBjaGVjayB3aXRoIHRoZSB0ZWNobmljYWwgcGF0aC4gV2UgaGF2ZSB0byB0cnkgaXQsIGJlY2F1c2UgZm9yIGxldmVsID4gMSwgd2Vcblx0XHQvLyB1c2VzIHRlY2huaWNhbCBrZXlzIGV2ZW4gaWYgU2VtYW50aWMga2V5cyBhcmUgZW5hYmxlZFxuXHRcdGlmICh0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKC9eW14oKV0rXFwoW14oKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KSE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzU2VtYW50aWNQYXRoICE9IHNQYXRoID8gdGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNTZW1hbnRpY1BhdGgpIDogZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0c1BhdGggPSBzUGF0aC5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcblx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXRoKSB8fCBzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgc2VtYW50aWMgcGF0aCBzaGFsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gbmF2aWdhdGUgdG9cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHN1ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGEgbGV2ZWwtMSBvYmplY3QgKHBhdGggPSAvYWFhKGJiYikpXG5cdFx0aWYgKCEvXlxcL1teKF0rXFwoW14pXStcXCkkLy50ZXN0KGNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBpcyBhIGRyYWZ0IHJvb3Rcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpKVxuXHRcdFx0LnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQ7XG5cblx0XHRpZiAoIU1vZGVsSGVscGVyLmlzRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IHNlbWFudGljIHBhdGggZm9yIG5ld2x5IGNyZWF0ZWQgb2JqZWN0c1xuXHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRmluYWxseSwgY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBlbnRpdHlTZXQubmFtZTtcblx0XHRyZXR1cm4gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgZW50aXR5U2V0TmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblxuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0SGVhZGVyQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPT09IC0xKSB7XG5cdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdFx0c1BhdGggPSB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHdlJ3JlIG5hdmlnYXRpbmcgYmFjayB0byBhIHNlbWFudGljIHBhdGggdGhhdCB3YXMgcHJldmlvdXNseSByZXNvbHZlZFxuXHRcdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZz8udGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRzUGF0aCA9IHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcuc2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dCkpIHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgd2UgaGF2ZSB0byB1c2UgYSBzZW1hbnRpYyBwYXRoXG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgoY29udGV4dCwgdHJ1ZSk7XG5cblx0XHRcdFx0aWYgKCFzU2VtYW50aWNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0XHQvLyBjbGVhciB0aGUgcHJldmlvdXMgbWFwcGluZywgb3RoZXJ3aXNlIHRoZSBvbGQgbWFwcGluZyBpcyB1c2VkIGluIEVkaXRGbG93I3VwZGF0ZURvY3VtZW50XG5cdFx0XHRcdFx0Ly8gYW5kIGl0IGxlYWRzIHRvIHVud2FudGVkIHBhZ2UgcmVsb2Fkc1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNTZW1hbnRpY1BhdGggIT09IHNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHRcdHNQYXRoID0gc1NlbWFudGljUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChoYXNoOiBzdHJpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0Ly8gT3BlbiBpbiBmdWxsIHNjcmVlbiBtb2RlIHdoZW4gb3BlbmluZyBpbiBuZXcgdGFiLyB3aW5kb3dcblx0XHRpZiAocGFyYW1ldGVycy5uYXZNb2RlID09PSBcIm9wZW5Jbk5ld1RhYlwiICYmIHBhcmFtZXRlcnMuRkNMTGV2ZWwgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm4gcGFyYW1ldGVycy5GQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdFx0fVxuXHRcdGxldCBGQ0xMZXZlbCA9IHBhcmFtZXRlcnMuRkNMTGV2ZWwgPz8gMDtcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCkge1xuXHRcdFx0RkNMTGV2ZWwgKz0gcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrLCB0cnkgdG8gZmluZCB0aGUgbGF5b3V0IGluIHRoZSBuYXZpZ2F0aW9uIGhpc3RvcnkgaWYgaXQncyBub3QgcHJvdmlkZWQgYXMgcGFyYW1ldGVyXG5cdFx0Ly8gKGxheW91dCBjYWxjdWxhdGlvbiBpcyBub3QgaGFuZGxlZCBwcm9wZXJseSBieSB0aGUgRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciBpbiB0aGlzIGNhc2UpXG5cdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsIDwgMCAmJiAhcGFyYW1ldGVycy5sYXlvdXQpIHtcblx0XHRcdHBhcmFtZXRlcnMubGF5b3V0ID0gdGhpcy5vUm91dGVyUHJveHkuZmluZExheW91dEZvckhhc2goaGFzaCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5jYWxjdWxhdGVMYXlvdXQoRkNMTGV2ZWwsIGhhc2gsIHBhcmFtZXRlcnMubGF5b3V0LCBwYXJhbWV0ZXJzLmtlZXBDdXJyZW50TGF5b3V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGJlZm9yZSBhIHJvdXRlIGlzIG1hdGNoZWQuXG5cdCAqIERpc3BsYXlzIGEgYnVzeSBpbmRpY2F0b3IuXG5cdCAqXG5cdCAqL1xuXHRfYmVmb3JlUm91dGVNYXRjaGVkKC8qb0V2ZW50OiBFdmVudCovKTogdm9pZCB7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKCFiUGxhY2Vob2xkZXJFbmFibGVkKSB7XG5cdFx0XHRjb25zdCBvUm9vdFZpZXcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRcdEJ1c3lMb2NrZXIubG9jayhvUm9vdFZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGJ5IHRoZSBSb3V0ZXJQcm94eS5cblx0ICovXG5cdF9pc05hdmlnYXRpb25UcmlnZ2VyZWRCeVJvdXRlclByb3h5KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFRoZSBSb3V0ZXJQcm94eSBzZXRzIGEgJ2ZlTGV2ZWwnIHByb3BlcnR5IG9uIHRoZSBoaXN0b3J5LnN0YXRlIG9iamVjdFxuXHRcdHJldHVybiBoaXN0b3J5LnN0YXRlPy5mZUxldmVsICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogSGlkZXMgdGhlIGJ1c3kgaW5kaWNhdG9yIGFuZCBmaXJlcyBpdHMgb3duICdyb3V0ZW1hdGNoZWQnIGV2ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0V2ZW50IFRoZSBldmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0FwcFN0YXRlSGFuZGxlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRBcHBTdGF0ZUhhbmRsZXIoKSxcblx0XHRcdG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9Sb290VmlldykgJiYgIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzO1xuXHRcdGlmICh0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUubGVuZ3RoKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZVswXTtcblx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5zbGljZSgxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bVBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSB7fTtcblx0XHR9XG5cdFx0aWYgKG9BcHBTdGF0ZUhhbmRsZXIuY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLkFwcFN0YXRlQ2hhbmdlZDtcblx0XHRcdG9BcHBTdGF0ZUhhbmRsZXIucmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMub1JvdXRlclByb3h5LmNoZWNrUmVzdG9yZUhpc3RvcnlXYXNUcmlnZ2VyZWQoKSkge1xuXHRcdFx0bVBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8ucmVhc29uID0gTmF2aWdhdGlvblJlYXNvbi5SZXN0b3JlSGlzdG9yeTtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc2V0UmVzdG9yZUhpc3RvcnlGbGFnKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm4gPSBtUGFyYW1ldGVycy5jb25maWcucGF0dGVybjtcblx0XHR0aGlzLmFDdXJyZW50Vmlld3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cblx0XHRtUGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRtUGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXG5cdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBoYXNoIGhhcyBiZWVuIHNldCBieSB0aGUgcm91dGVyUHJveHkubmF2VG9IYXNoIGZ1bmN0aW9uXG5cdFx0Ly8gSWYgbm90LCByZWJ1aWxkIGhpc3RvcnkgcHJvcGVybHkgKGJvdGggaW4gdGhlIGJyb3dzZXIgYW5kIHRoZSBSb3V0ZXJQcm94eSlcblx0XHRpZiAoIXRoaXMuX2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKSkge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHlcblx0XHRcdFx0LnJlc3RvcmVIaXN0b3J5KClcblx0XHRcdFx0LnRoZW4oKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc29sdmVSb3V0ZU1hdGNoKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlc3RvcmluZyBoaXN0b3J5XCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHR9XG5cdH1cblxuXHRhdHRhY2hSb3V0ZU1hdGNoZWQob0RhdGE6IG9iamVjdCwgZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaFJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJSb3V0ZU1hdGNoZWRcIiwgb0RhdGEsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyOiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0YXN5bmMgaW5pdGlhbGl6ZVJvdXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5Db2xsYWJvcmF0aW9uKSB7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IENvbGxhYm9yYXRpb25IZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkhlbHBlclwiKTtcblx0XHRcdGF3YWl0IENvbGxhYm9yYXRpb25IZWxwZXIucHJvY2Vzc0FuZEV4cGFuZEhhc2goKTtcblx0XHR9XG5cdFx0Ly8gQXR0YWNoIHJvdXRlciBoYW5kbGVyc1xuXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fYmVmb3JlUm91dGVNYXRjaGVkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJzYXAtaWFwcC1zdGF0ZVwiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy5vQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdGNvbnN0IHNIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdFx0Ly8gTWFuYWdlIHN0YXJ0dXAgcGFyYW1ldGVycyAoaW4gY2FzZSBvZiBubyBpYXBwLXN0YXRlKVxuXHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURVwiKSkge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSBtb2RlXG5cdFx0XHRcdFx0Ly8gVGhpcyBjaGVjayB3aWxsIGNhdGNoIG11bHRpcGxlIG1vZGVzIGxpa2UgY3JlYXRlLCBjcmVhdGVXaXRoIGFuZCBhdXRvQ3JlYXRlV2l0aCB3aGljaCBhbGwgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIGJlIGhhbmRsZWQgbGlrZSBjcmVhdGUgc3RhcnR1cCFcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRGVlcCBsaW5rXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIpO1xuXHR9XG5cblx0YXN5bmMgX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc05ld0hhc2gpO1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnM/LnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkFVVE9DUkVBVEVcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWx3YXlzQ2hlY2tUYXJnZXRFeGlzdGVuY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5fY2hlY2tFeGlzdGVuY2VPbkRlZXBMaW5rID09PSB0cnVlO1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZXBMaW5rU3RhcnR1cEhhc2goXG5cdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZyxcblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycyxcblx0XHRcdHRoaXMub01vZGVsLFxuXHRcdFx0YWx3YXlzQ2hlY2tUYXJnZXRFeGlzdGVuY2Vcblx0XHQpLnRoZW4oKG9EZWVwTGluaykgPT4ge1xuXHRcdFx0bGV0IHNIYXNoO1xuXHRcdFx0aWYgKG9EZWVwTGluay5jb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHNUZWNobmljYWxQYXRoID0gb0RlZXBMaW5rLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNQYXRoID0gdGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dClcblx0XHRcdFx0XHQ/IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dCwgZmFsc2UpIVxuXHRcdFx0XHRcdDogc1RlY2huaWNhbFBhdGg7XG5cblx0XHRcdFx0aWYgKHNTZW1hbnRpY1BhdGggIT09IHNUZWNobmljYWxQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzVGVjaG5pY2FsUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c0hhc2ggPSBzU2VtYW50aWNQYXRoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSBsZWFkaW5nICcvJ1xuXHRcdFx0fSBlbHNlIGlmIChvRGVlcExpbmsuaGFzaCkge1xuXHRcdFx0XHRzSGFzaCA9IG9EZWVwTGluay5oYXNoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0hhc2gpIHtcblx0XHRcdFx0Ly9SZXBsYWNlIHRoZSBoYXNoIHdpdGggbmV3bHkgY3JlYXRlZCBoYXNoXG5cdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc0hhc2gpO1xuXHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVEZWVwbGluaygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZWZlcnJlZCBtb2RlIGVkaXQgYnkgYXBwZW5kaW5nIFwiWyZ8P11pLWFjdGlvbj1lZGl0XCIgdG8gdGhlIGhhc2ggaWY6XG5cdCAqIC0gVGhlcmUgaXMgYSByZXN1bHRpbmcgaGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsb2dpYyxcblx0ICogLSBUaGUgcHJlZmVycmVkIG1vZGUgaXMgZWRpdCwgYW5kXG5cdCAqIC0gVGhlIGVudGl0eSBpcyBlZGl0YWJsZVxuXHQgKiBUaGlzIHdvcmtzIGZvciBib3RoIGRlZXAtbGluayBzdGFydHVwICgjQXBwP0lEPW15SWQmcHJlZmVycmVkTW9kZT1lZGl0KSBhbmQgb2JqZWN0IHBhZ2Ugcm91dGluZyAoI0FwcD9wcmVmZXJyZWRNb2RlPWVkaXQmL0VudGl0eShJRCkpLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVcblx0ICovXG5cdGFzeW5jIF9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQoc3RhcnR1cFBhcmFtZXRlcnM6IHsgcHJlZmVycmVkTW9kZT86IHN0cmluZ1tdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByZXN1bHRpbmdIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IHNob3VsZEVkaXQgPSAhIXN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGU/LlswXT8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoXCJFRElUXCIpO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gYXdhaXQgQXBwU3RhcnR1cEhlbHBlci52ZXJpZnlFZGl0QW5ub3RhdGlvbnModGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9NZXRhTW9kZWwpO1xuXHRcdGlmIChyZXN1bHRpbmdIYXNoICYmIHNob3VsZEVkaXQgJiYgZWRpdGFibGUpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IChyZXN1bHRpbmdIYXNoLmluY2x1ZGVzKFwiP1wiKSA/IFwiJlwiIDogXCI/XCIpICsgXCJpLWFjdGlvbj1lZGl0XCI7XG5cdFx0XHQodGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgKGhhc2g6IHN0cmluZykgPT4gdm9pZCkocmVzdWx0aW5nSGFzaCArIHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCk6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4ge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBEcmFmdCByb290IGVudGl0eSBzZXQgb3IgdGhlIHN0aWNreS1lbmFibGVkIGVudGl0eSBzZXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSByb290IEVudGl0eVNldFxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zQ29udGV4dFBhdGg7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogdGhpcyB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuY2xhc3MgUm91dGluZ1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+KTogUHJvbWlzZTxSb3V0aW5nU2VydmljZT4ge1xuXHRcdGNvbnN0IG9Sb3V0aW5nU2VydmljZSA9IG5ldyBSb3V0aW5nU2VydmljZShvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBvUm91dGluZ1NlcnZpY2UuaW5pdFByb21pc2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGluZ1NlcnZpY2VGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTBDTUEsc0JBQXNCLFdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsVUFFNURDLEtBQUssRUFBRSxVQUdQQSxLQUFLLEVBQUU7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtJQUFBO0lBQUE7RUFBQSxFQUo0QkMsYUFBYTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUEsSUEyRXJDQyxjQUFjO0lBQUE7SUFBQTtNQUFBO01BQUE7UUFBQTtNQUFBO01BQUE7TUFBQSxPQStCMUJDLG1CQUFtQixHQUE0QixFQUFFO01BQUEsT0FNakRDLE9BQU8sR0FBRyxLQUFLO01BQUE7SUFBQTtJQUFBO0lBQUE7SUFBQSxPQUVmQyxJQUFJLEdBQUosZ0JBQWE7TUFDWixNQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDQyxVQUFVLEVBQUU7TUFDbEMsSUFBSUQsUUFBUSxDQUFDRSxTQUFTLEtBQUssV0FBVyxFQUFFO1FBQUE7UUFDdkMsSUFBSSxDQUFDQyxhQUFhLEdBQUdILFFBQVEsQ0FBQ0ksV0FBVztRQUN6QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJLENBQUNGLGFBQWEsQ0FBQ0csUUFBUSxFQUFFO1FBQzNDLElBQUksQ0FBQ0MsVUFBVSxtQkFBRyxJQUFJLENBQUNGLE1BQU0saURBQVgsYUFBYUcsWUFBWSxFQUFFO1FBQzdDLElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUksQ0FBQ04sYUFBYSxDQUFDTyxTQUFTLEVBQUU7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
951
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiZGVmaW5lVUk1Q2xhc3MiLCJldmVudCIsIkV2ZW50UHJvdmlkZXIiLCJSb3V0aW5nU2VydmljZSIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJlbmFibGVkIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsInNjb3BlVHlwZSIsIm9BcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsImV2ZW50UHJvdmlkZXIiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0RW50cnkiLCJyb3V0aW5nIiwiX3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24iLCJvQXBwQ29uZmlnIiwib3V0Ym91bmRzIiwiY3Jvc3NOYXZpZ2F0aW9uIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImJlZm9yZUV4aXQiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfZm5PblJvdXRlTWF0Y2hlZCIsImZpcmVFdmVudCIsImV4aXQiLCJkZXN0cm95IiwiaXNGQ0wiLCJjb25maWciLCJyb3V0ZXJDbGFzcyIsIl9tVGFyZ2V0cyIsInRhcmdldHMiLCJzVGFyZ2V0TmFtZSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJ0YXJnZXROYW1lIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJ2aWV3TGV2ZWwiLCJfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4iLCJfbVJvdXRlcyIsInJvdXRlcyIsIm9Sb3V0ZU1hbmlmZXN0SW5mbyIsImFSb3V0ZVRhcmdldHMiLCJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0Iiwic1JvdXRlTmFtZSIsIm5hbWUiLCJzUm91dGVQYXR0ZXJuIiwicGF0dGVybiIsImxlbmd0aCIsImluZGV4T2YiLCJMb2ciLCJ3YXJuaW5nIiwiaVJvdXRlTGV2ZWwiLCJyb3V0ZUxldmVsIiwiaXRlbSIsInNQYXJlbnRUYXJnZXROYW1lIiwicGFyZW50IiwicHVzaCIsIkZDTExldmVsIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiZm9yRWFjaCIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvU2V0dGluZ3MiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJ0YXJnZXRSb3V0ZSIsImRldGFpbCIsInJvdXRlIiwic3RhcnRzV2l0aCIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyaW5nIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJzVGFyZ2V0Q29tcG9uZW50SWQiLCJfc093bmVySWQiLCJnZXRJZCIsInNDb3JyZWN0VGFyZ2V0TmFtZSIsImlkIiwidmlld0lkIiwiZ2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9MYXN0U2VtYW50aWNNYXBwaW5nIiwic2V0TGFzdFNlbWFudGljTWFwcGluZyIsIm9NYXBwaW5nIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsImRlbGF5ZWRVc2FnZSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJtUGFyYW1ldGVycyIsImdldFVSTCIsInRhcmdldFVybCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJsb2NhbENvbnRleHRQYXRoIiwiam9pbiIsImxvY2FsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJvVmFsdWUiLCJvUHJvcGVydHlJbmZvIiwiZ2V0T2JqZWN0Iiwic0VkbVR5cGUiLCIkVHlwZSIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwiYWxsIiwiYVJlc29sdmVkUGFyYW1ldGVycyIsInZhbHVlIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJrZXkiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlcnMiLCJvUmVzb2x2ZWRQYXJhbWV0ZXIiLCJvRXJyb3IiLCJlcnJvciIsIl9maXJlUm91dGVNYXRjaEV2ZW50cyIsIkVkaXRTdGF0ZSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIiwibmF2aWdhdGVUb0NvbnRleHQiLCJjb250ZXh0IiwicGFyYW1ldGVycyIsInZpZXdEYXRhIiwiY3VycmVudFRhcmdldEluZm8iLCJyb3V0ZVBhcmFtZXRlcnNQcm9taXNlIiwiaXNTdGlja3lNb2RlIiwidGFyZ2V0UGF0aCIsIm5hdmlnYXRpb25JbmZvIiwib1JvdXRlRGV0YWlsIiwiaXNBIiwic1RhcmdldFBhdGgiLCJfZ2V0UGF0aEZyb21Db250ZXh0IiwiYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCIsImV4aXRGcm9tQXBwIiwiY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMiLCJzTGF5b3V0IiwiX2NhbGN1bGF0ZUxheW91dCIsIm9OYXZpZ2F0aW9uSW5mbyIsImJUYXJnZXRFZGl0YWJsZSIsImVkaXRhYmxlIiwiYlBlcnNpc3RPUFNjcm9sbCIsInBlcnNpc3RPUFNjcm9sbCIsImJTaG93UGxhY2Vob2xkZXIiLCJzaG93UGxhY2Vob2xkZXIiLCJyZWFzb24iLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsInVwZGF0ZUZDTExldmVsIiwicmVjcmVhdGVDb250ZXh0IiwidXNlQ29udGV4dCIsImNoZWNrTm9IYXNoQ2hhbmdlIiwic0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSIsImdldEhhc2giLCJyb3V0ZUluZm9CeUhhc2giLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJtRXZlbnRQYXJhbWV0ZXJzIiwicm91dGVJbmZvcm1hdGlvbiIsInNDdXJyZW50Um91dGVOYW1lIiwicm91dGVQYXR0ZXJuIiwic0N1cnJlbnRSb3V0ZVBhdHRlcm4iLCJ2aWV3cyIsImFDdXJyZW50Vmlld3MiLCJzZXRGb2N1c0ZvcmNlZCIsImZvcmNlRm9jdXMiLCJ0cmFuc2llbnQiLCJpbmNsdWRlcyIsIm5hdk1vZGUiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJDb250YWluZXIiLCJzaGVsbFNlcnZpY2VIZWxwZXIiLCJnZXRTaGVsbFNlcnZpY2VzIiwicGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2VydmljZUFzeW5jIiwiaHJlZiIsImdldEhyZWYiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInVybCIsIlVSTCIsIndpbmRvdyIsIm9yaWdpbiIsInBhdGhuYW1lIiwiZW5jb2RlVVJJIiwib3BlbldpbmRvdyIsIm9Sb3V0ZUluZm8iLCJvUm91dGUiLCJzTGFzdFRhcmdldE5hbWUiLCJvVGFyZ2V0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsIm9Sb3V0ZVBhcmFtZXRlcnMiLCJuYXZUbyIsInByZXNlcnZlSGlzdG9yeSIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJiTmF2aWdhdGVkIiwicG9wIiwibmF2aWdhdGVUb1JvdXRlIiwic1RhcmdldFJvdXRlTmFtZSIsInNUYXJnZXRVUkwiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJzUGF0aCIsInRlc3QiLCJzU2VtYW50aWNQYXRoIiwidGVjaG5pY2FsUGF0aCIsInNlbWFudGljUGF0aCIsIl9maW5kUGF0aFRvTmF2aWdhdGUiLCJfY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aCIsIm1ldGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImlzRHJhZnRSb290IiwiZ2V0UHJvcGVydHkiLCJlbnRpdHlTZXROYW1lIiwiZ2V0U2VtYW50aWNLZXlzIiwiZ2V0SGVhZGVyQ29udGV4dCIsImxheW91dCIsImZpbmRMYXlvdXRGb3JIYXNoIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY2FsY3VsYXRlTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJfYmVmb3JlUm91dGVNYXRjaGVkIiwiYlBsYWNlaG9sZGVyRW5hYmxlZCIsIlBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiX2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkiLCJoaXN0b3J5Iiwic3RhdGUiLCJmZUxldmVsIiwiX29uUm91dGVNYXRjaGVkIiwib0V2ZW50Iiwib0FwcFN0YXRlSGFuZGxlciIsImdldEFwcFN0YXRlSGFuZGxlciIsImlzTG9ja2VkIiwidW5sb2NrIiwiZ2V0UGFyYW1ldGVycyIsImNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAiLCJOYXZpZ2F0aW9uUmVhc29uIiwiQXBwU3RhdGVDaGFuZ2VkIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJjaGVja1Jlc3RvcmVIaXN0b3J5V2FzVHJpZ2dlcmVkIiwiUmVzdG9yZUhpc3RvcnkiLCJyZXNldFJlc3RvcmVIaXN0b3J5RmxhZyIsImdldFBhcmFtZXRlciIsInJlc3RvcmVIaXN0b3J5IiwicmVzb2x2ZVJvdXRlTWF0Y2giLCJjYXRjaCIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIm9EYXRhIiwiZm5GdW5jdGlvbiIsIm9MaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiZGV0YWNoRXZlbnQiLCJhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImRldGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkNvbGxhYm9yYXRpb24iLCJkZWZhdWx0IiwiQ29sbGFib3JhdGlvbkhlbHBlciIsInByb2Nlc3NBbmRFeHBhbmRIYXNoIiwiYmluZCIsImF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsInJlc2V0RWRpdFN0YXRlIiwiYklzSWFwcFN0YXRlIiwiZ2V0SGFzaENoYW5nZXIiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsImJIYXNTdGFydFVwUGFyYW1ldGVycyIsInNIYXNoIiwicHJlZmVycmVkTW9kZSIsInRvVXBwZXJDYXNlIiwiX21hbmFnZUNyZWF0ZVN0YXJ0dXAiLCJfbWFuYWdlRGVlcExpbmtTdGFydHVwIiwiX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdCIsImdldERlZmF1bHRDcmVhdGVIYXNoIiwiQXBwU3RhcnR1cEhlbHBlciIsImdldENvbnRleHRQYXRoIiwiZ2V0Q3JlYXRlU3RhcnR1cEhhc2giLCJzTmV3SGFzaCIsInJlcGxhY2VIYXNoIiwic2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJhbHdheXNDaGVja1RhcmdldEV4aXN0ZW5jZSIsImFwcCIsIl9jaGVja0V4aXN0ZW5jZU9uRGVlcExpbmsiLCJnZXREZWVwTGlua1N0YXJ0dXBIYXNoIiwib0RlZXBMaW5rIiwic1RlY2huaWNhbFBhdGgiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJyZXN1bHRpbmdIYXNoIiwic2hvdWxkRWRpdCIsInZlcmlmeUVkaXRBbm5vdGF0aW9ucyIsInBhcmFtZXRlciIsImdldE91dGJvdW5kcyIsImdldEludGVyZmFjZSIsIlNlcnZpY2UiLCJSb3V0aW5nU2VydmljZUZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIm9Sb3V0aW5nU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nU2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcblxuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEFwcFN0YXJ0dXBIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQXBwU3RhcnR1cEhlbHBlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSwgUm91dGluZ0NvbmZpZ3VyYXRpb24sIFJvdXRpbmdUYXJnZXQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhVXRpbHMgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVV0aWxzXCI7XG5pbXBvcnQgb3BlbldpbmRvdyBmcm9tIFwic2FwL3VpL3V0aWwvb3BlbldpbmRvd1wiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuXG50eXBlIFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlRXZlbnRpbmdcIilcbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgZXh0ZW5kcyBFdmVudFByb3ZpZGVyIHtcblx0QGV2ZW50KClcblx0cm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cblx0QGV2ZW50KClcblx0YWZ0ZXJSb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgUm91dGluZ0V2ZW50UGFyYW1ldGVycyA9IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgJiB7XG5cdG5hdmlnYXRpb25JbmZvPzogeyByZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uIH07XG5cdHJvdXRlSW5mb3JtYXRpb24/OiB1bmtub3duO1xuXHRyb3V0ZVBhdHRlcm4/OiBzdHJpbmc7XG5cdGNvbmZpZzogeyBwYXR0ZXJuPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyA9XG5cdHwgeyBtb2RlOiBcIkFzeW5jXCI7IGNyZWF0ZUNvbnRleHRQcm9taXNlOiBQcm9taXNlPENvbnRleHQ+IH1cblx0fCB7IG1vZGU6IFwiRGVmZXJyZWRcIjsgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmc7IHBhcmVudENvbnRleHQ/OiBDb250ZXh0OyBkYXRhPzogb2JqZWN0IH07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyA9IHtcblx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/OiBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycztcblx0YlRhcmdldEVkaXRhYmxlPzogYm9vbGVhbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGJTaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHR1c2VDb250ZXh0PzogQ29udGV4dDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG5cdGJBY3Rpb25DcmVhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRjaGVja05vSGFzaENoYW5nZT86IGJvb2xlYW47XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGVkaXRhYmxlPzogYm9vbGVhbjtcblx0dHJhbnNpZW50PzogYm9vbGVhbjtcblx0cGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0RkNMTGV2ZWw/OiBudW1iZXI7XG5cdHVwZGF0ZUZDTExldmVsPzogbnVtYmVyO1xuXHRwcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuO1xuXHRub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjtcblx0cmVjcmVhdGVDb250ZXh0PzogYm9vbGVhbjtcblx0Zm9yY2VGb2N1cz86IGJvb2xlYW47XG5cdHRhcmdldFBhdGg/OiBzdHJpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGNhbGxFeHRlbnNpb24/OiBib29sZWFuO1xuXHRsYXlvdXQ/OiBzdHJpbmc7XG5cdGtlZXBDdXJyZW50TGF5b3V0PzogYm9vbGVhbjtcblx0bmF2TW9kZT86IHN0cmluZztcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nUGFyYW1ldGVyTWFwID0ge1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG50eXBlIE1pbmltYWxQYWdlU2V0dGluZyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0ZnVsbENvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uPzogUmVjb3JkPHN0cmluZywgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24+O1xufTtcblxudHlwZSBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHRhcmdldHM6IHN0cmluZ1tdO1xuXHRyb3V0ZUxldmVsOiBudW1iZXI7XG59O1xuXG50eXBlIFJlc29sdmVkUGFyYW1ldGVycyA9IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH07XG5cbmV4cG9ydCBjbGFzcyBSb3V0aW5nU2VydmljZSBleHRlbmRzIFNlcnZpY2U8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRvQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG9Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0b1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPjtcblxuXHRvdXRib3VuZHMhOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+O1xuXG5cdF9tVGFyZ2V0cyE6IFJlY29yZDxzdHJpbmcsIFJvdXRpbmdUYXJnZXQ+O1xuXG5cdF9tUm91dGVzITogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24+O1xuXG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nO1xuXG5cdGJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3Q/OiBib29sZWFuO1xuXG5cdHNDdXJyZW50Um91dGVOYW1lPzogc3RyaW5nO1xuXG5cdHNDdXJyZW50Um91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXG5cdGFDdXJyZW50Vmlld3M/OiAoVmlldyB8IENvbXBvbmVudENvbnRhaW5lcilbXTtcblxuXHRuYXZpZ2F0aW9uSW5mb1F1ZXVlOiBSb3V0aW5nTmF2aWdhdGlvbkluZm9bXSA9IFtdO1xuXG5cdHNDb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRfZm5PblJvdXRlTWF0Y2hlZCE6IChldjogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KSA9PiB2b2lkO1xuXG5cdGVuYWJsZWQgPSBmYWxzZTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0LnNjb3BlVHlwZSA9PT0gXCJjb21wb25lbnRcIikge1xuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0XHR0aGlzLm9Nb2RlbCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblx0XHRcdHRoaXMuZXZlbnRQcm92aWRlciA9IG5ldyBSb3V0aW5nU2VydmljZUV2ZW50aW5nKCk7XG5cblx0XHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc7XG5cdFx0XHR0aGlzLl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnISk7XG5cblx0XHRcdGNvbnN0IG9BcHBDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHMgPz8ge307XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXG5cdGJlZm9yZUV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIHt9KTtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogUm91dGluZ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0XHRjb25zdCBpc0ZDTCA9IG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCI7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiB0YXJnZXRzXG5cdFx0dGhpcy5fbVRhcmdldHMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnRhcmdldHMpIHtcblx0XHRcdGZvciAoY29uc3Qgc1RhcmdldE5hbWUgb2YgT2JqZWN0LmtleXMob1JvdXRpbmdDb25maWcudGFyZ2V0cykpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdID0gT2JqZWN0LmFzc2lnbih7IHRhcmdldE5hbWU6IHNUYXJnZXROYW1lIH0sIG9Sb3V0aW5nQ29uZmlnLnRhcmdldHNbc1RhcmdldE5hbWVdKTtcblxuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBGQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB0YXJnZXQgcGF0dGVyblxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0dGVybiA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oY29udGV4dFBhdHRlcm4sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2Ygcm91dGVzXG5cdFx0dGhpcy5fbVJvdXRlcyA9IHt9O1xuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8ucm91dGVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9Sb3V0ZU1hbmlmZXN0SW5mbyBvZiBvUm91dGluZ0NvbmZpZy5yb3V0ZXMpIHtcblx0XHRcdFx0Y29uc3QgYVJvdXRlVGFyZ2V0cyA9IGdldFJvdXRlVGFyZ2V0TmFtZXMob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCksXG5cdFx0XHRcdFx0c1JvdXRlTmFtZSA9IG9Sb3V0ZU1hbmlmZXN0SW5mby5uYW1lLFxuXHRcdFx0XHRcdHNSb3V0ZVBhdHRlcm4gPSBvUm91dGVNYW5pZmVzdEluZm8ucGF0dGVybjtcblx0XHRcdFx0aWYgKCFzUm91dGVQYXR0ZXJuKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgcm91dGUgcGF0dGVybjogYWxsIHBhdHRlcm5zIG5lZWQgdG8gZW5kIHdpdGggJzo/cXVlcnk6JywgdGhhdCB3ZSB1c2UgZm9yIHBhcmFtZXRlcnNcblx0XHRcdFx0aWYgKHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIDwgOCB8fCBzUm91dGVQYXR0ZXJuLmluZGV4T2YoXCI6P3F1ZXJ5OlwiKSAhPT0gc1JvdXRlUGF0dGVybi5sZW5ndGggLSA4KSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoYFBhdHRlcm4gZm9yIHJvdXRlICR7c1JvdXRlTmFtZX0gZG9lc24ndCBlbmQgd2l0aCAnOj9xdWVyeTonIDogJHtzUm91dGVQYXR0ZXJufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlSb3V0ZUxldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1JvdXRlUGF0dGVybiwgMCk7XG5cdFx0XHRcdHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc1JvdXRlTmFtZSxcblx0XHRcdFx0XHRwYXR0ZXJuOiBzUm91dGVQYXR0ZXJuLFxuXHRcdFx0XHRcdHRhcmdldHM6IGFSb3V0ZVRhcmdldHMsXG5cdFx0XHRcdFx0cm91dGVMZXZlbDogaVJvdXRlTGV2ZWxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBZGQgdGhlIHBhcmVudCB0YXJnZXRzIGluIHRoZSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSByb3V0ZVxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJvdXRlVGFyZ2V0cykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbaXRlbV0ucGFyZW50O1xuXHRcdFx0XHRcdGlmIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5wdXNoKHNQYXJlbnRUYXJnZXROYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWlzRkNMKSB7XG5cdFx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHJvdXRlIHBhdHRlcm5cblx0XHRcdFx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWw7XG5cdFx0XHRcdFx0aWYgKHZpZXdMZXZlbCA9PT0gdW5kZWZpbmVkIHx8IHZpZXdMZXZlbCA8IGlSb3V0ZUxldmVsKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgY2FzZXMgd2hlbiBkaWZmZXJlbnQgcm91dGVzIHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gV2UgdGFrZSB0aGVcblx0XHRcdFx0XHRcdC8vIGxhcmdlc3Qgdmlld0xldmVsIGluIHRoYXQgY2FzZS5cblx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA9IGlSb3V0ZUxldmVsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZDTCBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBlcXVhbCB0byAtMVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVJvdXRlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uY29udHJvbEFnZ3JlZ2F0aW9uICE9PSBcImJlZ2luQ29sdW1uUGFnZXNcIikge1xuXHRcdFx0XHRcdC8vIFdlJ3JlIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgb25seSAxIHRhcmdldCBmb3IgdGhlIHJvdXRlLCBhbmQgaXQncyBub3QgaW4gdGhlIGZpcnN0IGNvbHVtblxuXHRcdFx0XHRcdC8vIC0tPiB0aGlzIGlzIGEgZnVsbHNjcmVlbiBjb2x1bW4gYWZ0ZXIgYWxsIGNvbHVtbnMgaW4gdGhlIEZDTCBoYXZlIGJlZW4gdXNlZFxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gMztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlciBGQ0wgY2FzZXNcblx0XHRcdFx0XHRhUm91dGVUYXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGFnYXRlIHZpZXdMZXZlbCwgY29udGV4dFBhdHRlcm4sIEZDTExldmVsIGFuZCBjb250cm9sQWdncmVnYXRpb24gdG8gcGFyZW50IHRhcmdldHNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdHdoaWxlIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb247XG5cdFx0XHRcdHNUYXJnZXROYW1lID0gc1BhcmVudFRhcmdldE5hbWU7XG5cdFx0XHRcdHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIERldGVybWluZSB0aGUgcm9vdCBlbnRpdHkgZm9yIHRoZSBhcHBcblx0XHRjb25zdCBhTGV2ZWwwUm91dGVOYW1lcyA9IFtdO1xuXHRcdGNvbnN0IGFMZXZlbDFSb3V0ZU5hbWVzID0gW107XG5cdFx0bGV0IHNEZWZhdWx0Um91dGVOYW1lO1xuXG5cdFx0Zm9yIChjb25zdCBzTmFtZSBpbiB0aGlzLl9tUm91dGVzKSB7XG5cdFx0XHRjb25zdCBpTGV2ZWwgPSB0aGlzLl9tUm91dGVzW3NOYW1lXS5yb3V0ZUxldmVsO1xuXHRcdFx0aWYgKGlMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRhTGV2ZWwwUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoaUxldmVsID09PSAxKSB7XG5cdFx0XHRcdGFMZXZlbDFSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhTGV2ZWwwUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMFJvdXRlTmFtZXNbMF07XG5cdFx0fSBlbHNlIGlmIChhTGV2ZWwxUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMVJvdXRlTmFtZXNbMF07XG5cdFx0fVxuXG5cdFx0aWYgKHNEZWZhdWx0Um91dGVOYW1lKSB7XG5cdFx0XHRjb25zdCBzRGVmYXVsdFRhcmdldE5hbWUgPSB0aGlzLl9tUm91dGVzW3NEZWZhdWx0Um91dGVOYW1lXS50YXJnZXRzLnNsaWNlKC0xKVswXTtcblx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRcdGNvbnN0IG9TZXR0aW5ncyA9IHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucz8uc2V0dGluZ3MgYXMgTWluaW1hbFBhZ2VTZXR0aW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9TZXR0aW5ncykge1xuXHRcdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCBgLyR7b1NldHRpbmdzLmVudGl0eVNldH1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLnNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRgQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCBvciBlbnRpdHlTZXQgbWlzc2luZyBpbiBkZWZhdWx0IHRhcmdldDogJHtzRGVmYXVsdFRhcmdldE5hbWV9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogbm8gZGVmYXVsdCByb3V0ZSBmb3VuZC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvcnJlY3QgcGF0aCB0byB0aGUgZGlmZmVyZW50IHBhZ2VzLCBpbmNsdWRpbmcgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKVxuXHRcdFx0Lm1hcCgoc1RhcmdldEtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0S2V5XTtcblx0XHRcdH0pXG5cdFx0XHQuc29ydCgoYTogUm91dGluZ1RhcmdldCwgYjogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBiLnZpZXdMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGEudmlld0xldmVsIDwgYi52aWV3TGV2ZWwgPyAtMSA6IDE7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goKHRhcmdldDogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHQvLyBBZnRlciBzb3J0aW5nIHRoZSB0YXJnZXRzIHBlciBsZXZlbCB3ZSBjYW4gdGhlbiBnbyB0aHJvdWdoIHRoZWlyIG5hdmlnYXRpb24gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBhdGhzIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRpZiAodGFyZ2V0Lm9wdGlvbnMpIHtcblx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHRhcmdldC5vcHRpb25zLnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZztcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBzZXR0aW5ncy5jb250ZXh0UGF0aCB8fCAoc2V0dGluZ3MuZW50aXR5U2V0ID8gYC8ke3NldHRpbmdzLmVudGl0eVNldH1gIDogXCJcIik7XG5cdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPSBgJHtzQ29udGV4dFBhdGh9L2A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKHNldHRpbmdzLm5hdmlnYXRpb24gfHwge30pLmZvckVhY2goKHNOYXZOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRSb3V0ZSA9IHRoaXMuX21Sb3V0ZXNbc2V0dGluZ3MubmF2aWdhdGlvbiFbc05hdk5hbWVdLmRldGFpbD8ucm91dGVdO1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHRhcmdldFJvdXRlLnRhcmdldHMpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Um91dGUudGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzPy5mdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICsgc05hdk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fS9gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMgVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gYC8ke3NQYXR0ZXJufWA7XG5cdFx0fVxuXHRcdGlmIChzUGF0dGVybi5sZW5ndGgpIHtcblx0XHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXR0ZXJuKSB8fCBzUGF0dGVybiA9PT0gXCJcIikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sICsrdmlld0xldmVsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgdmlld0xldmVsKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHZpZXdMZXZlbDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Um91dGVJbmZvcm1hdGlvbihzUm91dGVOYW1lPzogc3RyaW5nKTogSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRcdGlmIChzUm91dGVOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lPzogc3RyaW5nKTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNUYXJnZXROYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IHN0cmluZywgc0NvbXBvbmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChzQ29tcG9uZW50SWQuaW5kZXhPZihgJHtzT3duZXJJZH0tLS1gKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHJpbmcoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50SW5zdGFuY2UgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlLl9zT3duZXJJZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlLmdldElkXG5cdCAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFyZ2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50SW5zdGFuY2U6IENvbXBvbmVudCB8IFZpZXcpOiBSb3V0aW5nVGFyZ2V0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVGFyZ2V0Q29tcG9uZW50SWQgPSB0aGlzLl9nZXRDb21wb25lbnRJZChcblx0XHRcdChvQ29tcG9uZW50SW5zdGFuY2UgYXMgdW5rbm93biBhcyB7IF9zT3duZXJJZDogc3RyaW5nIH0pLl9zT3duZXJJZCxcblx0XHRcdG9Db21wb25lbnRJbnN0YW5jZS5nZXRJZCgpXG5cdFx0KTtcblx0XHRsZXQgc0NvcnJlY3RUYXJnZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uaWQgPT09IHNUYXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0lkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQpIHtcblx0XHRcdFx0c0NvcnJlY3RUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNDb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IHRydWVcblx0KTogUHJvbWlzZTwoKSA9PiB2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGxldCBzVGFyZ2V0VVJMUHJvbWlzZSwgYklzU3RpY2t5TW9kZTogYm9vbGVhbjtcblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSB7XG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0XHRpZiAoIW1QYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJNYXBwaW5nIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHNSb3V0ZU5hbWUsIG9Db250ZXh0KS50aGVuKFxuXHRcdFx0XHQobVBhcmFtZXRlcnM6IG9iamVjdCB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUhLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IHRhcmdldFVybCA9IGF3YWl0IHNUYXJnZXRVUkxQcm9taXNlO1xuXHRcdGNvbnN0IG5hdmlnYXRlRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2godGFyZ2V0VXJsISwgYlByZXNlcnZlSGlzdG9yeSwgZmFsc2UsIGZhbHNlLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0fTtcblx0XHRpZiAoZGVsYXllZFVzYWdlID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbjsgLy8gd3JvbmcgYnV0IHNvbWVob3cgdGhlIHR5cGVzIGFyZSBhbm5veWluZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0dXJuIGEgbWFwIG9mIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnMgd2hlcmUgdGhlIGJpbmRpbmcgc3ludGF4IGlzIHJlc29sdmVkIHRvIHRoZSBjdXJyZW50IG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUGFyYW1ldGVycyBtYXAgaW4gdGhlIGZvcm1hdCBbazogc3RyaW5nXSA6IENvbXBsZXhCaW5kaW5nU3ludGF4XG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdGFzeW5jIHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBSb3V0aW5nUGFyYW1ldGVyTWFwLCBzVGFyZ2V0Um91dGU6IHN0cmluZyB8IG51bGwsIG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRsZXQgb1BhcmFtZXRlcnNQcm9taXNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBhQ29udGV4dFBhdGhQYXJ0cyA9IHNDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzKS5tYXAoYXN5bmMgKHNQYXJhbWV0ZXJLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24gPSBtUGFyYW1ldGVyc1tzUGFyYW1ldGVyS2V5XTtcblx0XHRcdFx0Ly8gV2UgYXNzdW1lIHRoZSBkZWZpbmVkIHBhcmFtZXRlcnMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdFx0Y29uc3Qgb1BhcnNlZEV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0Y29uc3QgYVBhcnRzID0gb1BhcnNlZEV4cHJlc3Npb24ucGFydHMgfHwgW29QYXJzZWRFeHByZXNzaW9uXTtcblx0XHRcdFx0Y29uc3QgYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBhUGFydHMubWFwKGFzeW5jIGZ1bmN0aW9uIChvUGF0aFBhcnQ6IFByb3BlcnR5QmluZGluZ0luZm8pIHtcblx0XHRcdFx0XHRjb25zdCBhUmVsYXRpdmVQYXJ0cyA9IG9QYXRoUGFydC5wYXRoLnNwbGl0KFwiLi4vXCIpO1xuXHRcdFx0XHRcdC8vIFdlIGdvIHVwIHRoZSBjdXJyZW50IGNvbnRleHQgcGF0aCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGNvbnN0IGFMb2NhbFBhcnRzID0gYUNvbnRleHRQYXRoUGFydHMuc2xpY2UoMCwgYUNvbnRleHRQYXRoUGFydHMubGVuZ3RoIC0gYVJlbGF0aXZlUGFydHMubGVuZ3RoICsgMSk7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0UGF0aCA9IGFMb2NhbFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQ29udGV4dCA9XG5cdFx0XHRcdFx0XHRsb2NhbENvbnRleHRQYXRoID09PSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHRcdFx0PyBvQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQ6IG9Db250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQobG9jYWxDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cblx0XHRcdFx0XHRjb25zdCBvTWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGxvY2FsQ29udGV4dFBhdGggKyBcIi9cIiArIGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKTtcblx0XHRcdFx0XHRyZXR1cm4gbG9jYWxDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShhUmVsYXRpdmVQYXJ0c1thUmVsYXRpdmVQYXJ0cy5sZW5ndGggLSAxXSkudGhlbihmdW5jdGlvbiAob1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gb01ldGFDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBvUHJvcGVydHlJbmZvLiRUeXBlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChvVmFsdWUsIHNFZG1UeXBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKChhUmVzb2x2ZWRQYXJhbWV0ZXJzOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAoYUFsbFJlc29sdmVkUGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXJzW10pIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc29sdmVkUGFyYW1ldGVyOiBSZXNvbHZlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1tvUmVzb2x2ZWRQYXJhbWV0ZXIua2V5XSA9IG9SZXNvbHZlZFBhcmFtZXRlci52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUGFyYW1ldGVycztcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZCBub3QgcGFyc2UgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHJvdXRlICR7c1RhcmdldFJvdXRlfWApO1xuXHRcdFx0b1BhcmFtZXRlcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0fVxuXG5cdF9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVyczogUm91dGUkTWF0Y2hlZEV2ZW50UGFyYW1ldGVycyk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cblx0XHRFZGl0U3RhdGUuY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGUoKTsgLy8gUmVzZXQgVUkgc3RhdGUgd2hlbiBhbGwgYmluZGluZ3MgaGF2ZSBiZWVuIHJlZnJlc2hlZFxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0bywgb3IgdGhlIGxpc3QgYmluZGluZyBmb3IgY3JlYXRpb24gKGRlZmVycmVkIGNyZWF0aW9uKVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBtYXAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZV0gTmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVVJMXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5hc3luY0NvbnRleHRdIFRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgYXN5bmMsIG5hdmlnYXRlIHRvICguLi4pIGFuZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgUHJvbWlzZSB0byBiZSByZXNvbHZlZCBhbmQgdGhlbiBuYXZpZ2F0ZSBpbnRvIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRGVmZXJyZWRDb250ZXh0XSBUaGUgY29udGV4dCBzaGFsbCBiZSBjcmVhdGVkIGRlZmVycmVkIGF0IHRoZSB0YXJnZXQgcGFnZVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuZWRpdGFibGVdIFRoZSB0YXJnZXQgcGFnZSBzaGFsbCBiZSBpbW1lZGlhdGVseSBpbiB0aGUgZWRpdCBtb2RlIHRvIGF2b2lkIGZsaWNrZXJpbmdcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGxdIFRoZSBiUGVyc2lzdE9QU2Nyb2xsIHdpbGwgYmUgdXNlZCBmb3Igc2Nyb2xsaW5nIHRvIGZpcnN0IHRhYlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWxdIGArMWAgaWYgd2UgYWRkIGEgY29sdW1uIGluIEZDTCwgYC0xYCB0byByZW1vdmUgYSBjb2x1bW4sIDAgdG8gc3RheSBvbiB0aGUgc2FtZSBjb2x1bW5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLm5vUHJlc2VydmF0aW9uQ2FjaGVdIERvIG5hdmlnYXRpb24gd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwcmVzZXJ2ZWQgY2FjaGUgbWVjaGFuaXNtXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iUmVjcmVhdGVDb250ZXh0XSBGb3JjZSByZS1jcmVhdGlvbiBvZiB0aGUgY29udGV4dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmUgcGFzc2VkIGFzIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYkZvcmNlRm9jdXNdIEZvcmNlcyBmb2N1cyBzZWxlY3Rpb24gYWZ0ZXIgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhXSBWaWV3IGRhdGFcblx0ICogQHBhcmFtIFt2aWV3RGF0YS5uYXZpZ2F0aW9uXVxuXHQgKiBAcGFyYW0gW2N1cnJlbnRUYXJnZXRJbmZvXSBUaGUgdGFyZ2V0IGluZm9ybWF0aW9uIGZyb20gd2hpY2ggdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm8ubmFtZV1cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9LFxuXHRcdHZpZXdEYXRhPzogeyBuYXZpZ2F0aW9uPzogb2JqZWN0IH0sXG5cdFx0Y3VycmVudFRhcmdldEluZm8/OiB7IG5hbWU6IHN0cmluZyB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgdGFyZ2V0Um91dGUgPSBcIlwiO1xuXHRcdGxldCByb3V0ZVBhcmFtZXRlcnNQcm9taXNlOiBQcm9taXNlPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub01ldGFNb2RlbCk7XG5cblx0XHQvLyBNYW5hZ2UgcGFyYW1ldGVyIG1hcHBpbmdcblx0XHRpZiAocGFyYW1ldGVycz8udGFyZ2V0UGF0aCAmJiB2aWV3RGF0YT8ubmF2aWdhdGlvbikge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbkluZm8gPSB2aWV3RGF0YS5uYXZpZ2F0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHsgZGV0YWlsOiB7IHJvdXRlOiBzdHJpbmc7IHBhcmFtZXRlcnM6IG9iamVjdCB9IH0+O1xuXHRcdFx0Y29uc3Qgb1JvdXRlRGV0YWlsID0gbmF2aWdhdGlvbkluZm9bcGFyYW1ldGVycy50YXJnZXRQYXRoXS5kZXRhaWw7XG5cdFx0XHR0YXJnZXRSb3V0ZSA9IG9Sb3V0ZURldGFpbC5yb3V0ZTtcblxuXHRcdFx0aWYgKG9Sb3V0ZURldGFpbC5wYXJhbWV0ZXJzICYmIGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0cm91dGVQYXJhbWV0ZXJzUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0b1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRcdHRhcmdldFJvdXRlLFxuXHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc1RhcmdldFBhdGggPSB0aGlzLl9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0Ly8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlJ3JlIHN1cHBvc2VkIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBcblx0XHQvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGV4aXQgZnJvbSB0aGUgYXBwIGluc3RlYWRcblx0XHRpZiAoc1RhcmdldFBhdGgubGVuZ3RoID09PSAwICYmIHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCkge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkuZXhpdEZyb21BcHAoKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5hdmlnYXRpb24gZ29lcyB3aXRoIGEgY3JlYXRpb24sIHdlIGFkZCAoLi4uKSB0byB0aGUgcGF0aCAoZXhwZWN0aW5nIGNvbnRleHQgaXMgYW4gT0RhdGFMaXN0QmluZGluZylcblx0XHRpZiAocGFyYW1ldGVycz8uY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiKC4uLilcIjtcblx0XHR9XG5cblx0XHQvLyBBZGQgbGF5b3V0IHBhcmFtZXRlciBpZiBuZWVkZWRcblx0XHRjb25zdCBzTGF5b3V0ID0gdGhpcy5fY2FsY3VsYXRlTGF5b3V0KHNUYXJnZXRQYXRoLCBwYXJhbWV0ZXJzKTtcblx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gYD9sYXlvdXQ9JHtzTGF5b3V0fWA7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2FnZVxuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uSW5mbzogUm91dGluZ05hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM6IHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMsXG5cdFx0XHRiVGFyZ2V0RWRpdGFibGU6IHBhcmFtZXRlcnM/LmVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycz8ucGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0YlNob3dQbGFjZWhvbGRlcjogcGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgOiB0cnVlLFxuXHRcdFx0cmVhc29uOiBwYXJhbWV0ZXJzPy5yZWFzb24sXG5cdFx0XHRyZWRpcmVjdGVkVG9Ob25EcmFmdDogcGFyYW1ldGVycy5yZWRpcmVjdGVkVG9Ob25EcmFmdFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVycz8udXBkYXRlRkNMTGV2ZWwgIT09IC0xICYmIHBhcmFtZXRlcnM/LnJlY3JlYXRlQ29udGV4dCAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0b05hdmlnYXRpb25JbmZvLnVzZUNvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jaGVja05vSGFzaENoYW5nZSkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIG5ldyBoYXNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSA9IHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKS5yZXBsYWNlKC9bJj9dezF9c2FwLWlhcHAtc3RhdGU9W0EtWjAtOV0rLywgXCJcIik7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGggPT09IHNDdXJyZW50SGFzaE5vQXBwU3RhdGUpIHtcblx0XHRcdFx0Ly8gVGhlIGhhc2ggZG9lc24ndCBjaGFuZ2UsIGJ1dCB3ZSBmaXJlIHRoZSByb3V0ZU1hdGNoIGV2ZW50IHRvIHRyaWdnZXIgcGFnZSByZWZyZXNoIC8gYmluZGluZ1xuXHRcdFx0XHRjb25zdCByb3V0ZUluZm9CeUhhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKSk7XG5cdFx0XHRcdGxldCBtRXZlbnRQYXJhbWV0ZXJzOiBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0geyBjb25maWc6IHt9IH07XG5cdFx0XHRcdGlmIChyb3V0ZUluZm9CeUhhc2gpIHtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzID0geyAuLi5yb3V0ZUluZm9CeUhhc2gsIGNvbmZpZzoge30gfTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gb05hdmlnYXRpb25JbmZvO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMudmlld3MgPSB0aGlzLmFDdXJyZW50Vmlld3M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5zZXRGb2N1c0ZvcmNlZCghIXBhcmFtZXRlcnMuZm9yY2VGb2N1cyk7XG5cblx0XHRcdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobUV2ZW50UGFyYW1ldGVycyk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycz8udHJhbnNpZW50ICYmICEhcGFyYW1ldGVycy5lZGl0YWJsZSAmJiAhc1RhcmdldFBhdGguaW5jbHVkZXMoXCIoLi4uKVwiKSkge1xuXHRcdFx0aWYgKHNUYXJnZXRQYXRoLmluY2x1ZGVzKFwiP1wiKSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIpIHtcblx0XHRcdC8vIE5hdmlnYXRlIHRvIG5ldyB0YWIvIHdpbmRvd1xuXHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VzaGVsbC9Db250YWluZXJcIl0sIGFzeW5jIChDb250YWluZXI6IENvbnRhaW5lcikgPT4ge1xuXHRcdFx0XHRjb25zdCBzaGVsbFNlcnZpY2VIZWxwZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRjb25zdCBwYXJzZWRVcmwgPSBzaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25TZXJ2aWNlID0gKGF3YWl0IENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpKSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRjb25zdCBocmVmID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2UuZ2V0SHJlZih7XG5cdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogcGFyc2VkVXJsLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBwYXJzZWRVcmwuYWN0aW9uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFVybCA9IGAke3VybC5vcmlnaW59JHt1cmwucGF0aG5hbWV9JHtocmVmfSYvJHtlbmNvZGVVUkkoc1RhcmdldFBhdGgpfWA7XG5cdFx0XHRcdG9wZW5XaW5kb3codGFyZ2V0VXJsKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2xlYXIgdW5ib3VuZCBtZXNzYWdlcyB1cG9uIG5hdmlnYXRpbmcgZnJvbSBMUiB0byBPUFxuXHRcdFx0Ly8gVGhpcyBpcyB0byBlbnN1cmUgc3RhbGUgZXJyb3IgbWVzc2FnZXMgZnJvbSBMUiBhcmUgbm90IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIG5hdmlnYXRpb24gdG8gT1AuXG5cdFx0XHRpZiAoY3VycmVudFRhcmdldEluZm8/Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0Y29uc3Qgb1JvdXRlSW5mbyA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2goc1RhcmdldFBhdGgpO1xuXHRcdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3V0ZSA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24ob1JvdXRlSW5mby5uYW1lKTtcblx0XHRcdFx0XHRpZiAob1JvdXRlICYmIG9Sb3V0ZS50YXJnZXRzICYmIG9Sb3V0ZS50YXJnZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNMYXN0VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdFx0XHRpZiAob1RhcmdldCAmJiBvVGFyZ2V0Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaW4gdGhlIHF1ZXVlXG5cdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0XHRpZiAodGFyZ2V0Um91dGUgJiYgcm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcm91dGVQYXJhbWV0ZXJzUHJvbWlzZS50aGVuKChvUm91dGVQYXJhbWV0ZXJzOiBvYmplY3QpID0+IHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKG9Sb3V0ZVBhcmFtZXRlcnMsIHsgYklzU3RpY2t5TW9kZTogaXNTdGlja3lNb2RlIH0pO1xuXHRcdFx0XHRcdHRoaXMub1JvdXRlci5uYXZUbyh0YXJnZXRSb3V0ZSwgb1JvdXRlUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5uYXZUb0hhc2goXG5cdFx0XHRcdFx0c1RhcmdldFBhdGgsXG5cdFx0XHRcdFx0ISFwYXJhbWV0ZXJzLnByZXNlcnZlSGlzdG9yeSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5ub1ByZXNlcnZhdGlvbkNhY2hlLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM/LmZvcmNlRm9jdXMsXG5cdFx0XHRcdFx0IWlzU3RpY2t5TW9kZVxuXHRcdFx0XHQpXG5cdFx0XHRcdC50aGVuKChiTmF2aWdhdGVkKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFiTmF2aWdhdGVkKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgbmF2aWdhdGlvbiBkaWQgbm90IGhhcHBlbiAtLT4gcmVtb3ZlIHRoZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgZnJvbSB0aGUgcXVldWUgYXMgdGhleSBzaG91bGRuJ3QgYmUgdXNlZFxuXHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYk5hdmlnYXRlZDtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHJvdXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1RhcmdldFJvdXRlTmFtZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIFtvUm91dGVQYXJhbWV0ZXJzXSBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEBwYXJhbSBvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGVcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZywgb1JvdXRlUGFyYW1ldGVycz86IHsgYklzU3RpY2t5TW9kZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0Y29uc3Qgc1RhcmdldFVSTCA9IHRoaXMub1JvdXRlci5nZXRVUkwoc1RhcmdldFJvdXRlTmFtZSwgb1JvdXRlUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5Lm5hdlRvSGFzaChzVGFyZ2V0VVJMISwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgIW9Sb3V0ZVBhcmFtZXRlcnM/LmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBpbXBhY3RlZCBvciBub3Rcblx0ICovXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly8gRmlyc3QsIGNoZWNrIHdpdGggdGhlIHRlY2huaWNhbCBwYXRoLiBXZSBoYXZlIHRvIHRyeSBpdCwgYmVjYXVzZSBmb3IgbGV2ZWwgPiAxLCB3ZVxuXHRcdC8vIHVzZXMgdGVjaG5pY2FsIGtleXMgZXZlbiBpZiBTZW1hbnRpYyBrZXlzIGFyZSBlbmFibGVkXG5cdFx0aWYgKHRoaXMub1JvdXRlclByb3h5LmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShzUGF0aCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoL15bXigpXStcXChbXigpXStcXCkkLy50ZXN0KHNQYXRoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGN1cnJlbnQgcGF0aCBjYW4gYmUgc2VtYW50aWMgKGkuZS4gaXMgbGlrZSB4eHgoeXl5KSlcblx0XHRcdC8vIGNoZWNrIHdpdGggdGhlIHNlbWFudGljIHBhdGggaWYgd2UgY2FuIGZpbmQgaXRcblx0XHRcdGxldCBzU2VtYW50aWNQYXRoO1xuXHRcdFx0aWYgKHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcgJiYgdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHQvLyBXZSBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBzZW1hbnRpYyBwYXRoXG5cdFx0XHRcdHNTZW1hbnRpY1BhdGggPSB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnNlbWFudGljUGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpITtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNTZW1hbnRpY1BhdGggIT0gc1BhdGggPyB0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1NlbWFudGljUGF0aCkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHVzZWQgdG8gbmF2aWdhdGUgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBuYXZpZ2F0ZSB0b1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHNlbWFudGljIHBhdGggc2hhbGwgYmUgc3VlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Ly8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYSBsZXZlbC0xIG9iamVjdCAocGF0aCA9IC9hYWEoYmJiKSlcblx0XHRpZiAoIS9eXFwvW14oXStcXChbXildK1xcKSQvLnRlc3QoY29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGVjayBpZiB0aGUgZW50aXR5IGlzIGEgZHJhZnQgcm9vdFxuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBlbnRpdHlTZXQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldFBhdGgoKSkpXG5cdFx0XHQudGFyZ2V0T2JqZWN0IGFzIEVudGl0eVNldDtcblxuXHRcdGlmICghTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFdlIGRvbid0IHN1cHBvcnQgc2VtYW50aWMgcGF0aCBmb3IgbmV3bHkgY3JlYXRlZCBvYmplY3RzXG5cdFx0aWYgKGNvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBGaW5hbGx5LCBjaGVjayBpZiB0aGUgZW50aXR5IGhhcyBzZW1hbnRpYyBrZXlzXG5cdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGVudGl0eVNldC5uYW1lO1xuXHRcdHJldHVybiBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMobWV0YU1vZGVsLCBlbnRpdHlTZXROYW1lKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFBhdGhGcm9tQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgT0RhdGFMaXN0QmluZGluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXG5cdFx0aWYgKGNvbnRleHQuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdHNQYXRoID0gY29udGV4dC5nZXRIZWFkZXJDb250ZXh0KCk/LmdldFBhdGgoKSA/PyBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBhIGNvbnRleHQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aFxuXHRcdFx0XHRzUGF0aCA9IHRoaXMuX2ZpbmRQYXRoVG9OYXZpZ2F0ZShzUGF0aCk7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0KSkge1xuXHRcdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChjb250ZXh0LCB0cnVlKTtcblxuXHRcdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0XHQvLyBXZSB3ZXJlIG5vdCBhYmxlIHRvIGJ1aWxkIHRoZSBzZW1hbnRpYyBwYXRoIC0tPiBVc2UgdGhlIHRlY2huaWNhbCBwYXRoIGFuZFxuXHRcdFx0XHRcdC8vIGNsZWFyIHRoZSBwcmV2aW91cyBtYXBwaW5nLCBvdGhlcndpc2UgdGhlIG9sZCBtYXBwaW5nIGlzIHVzZWQgaW4gRWRpdEZsb3cjdXBkYXRlRG9jdW1lbnRcblx0XHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1NlbWFudGljUGF0aCAhPT0gc1BhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIGV4dHJhICcvJyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhdGhcblx0XHRpZiAoc1BhdGhbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH1cblxuXHRfY2FsY3VsYXRlTGF5b3V0KGhhc2g6IHN0cmluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHQvLyBPcGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUgd2hlbiBvcGVuaW5nIGluIG5ldyB0YWIvIHdpbmRvd1xuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIgJiYgcGFyYW1ldGVycy5GQ0xMZXZlbCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBwYXJhbWV0ZXJzLkZDTExldmVsID09PSAwID8gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgOiBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHR9XG5cdFx0bGV0IEZDTExldmVsID0gcGFyYW1ldGVycy5GQ0xMZXZlbCA/PyAwO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsO1xuXHRcdFx0aWYgKEZDTExldmVsIDwgMCkge1xuXHRcdFx0XHRGQ0xMZXZlbCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2ssIHRyeSB0byBmaW5kIHRoZSBsYXlvdXQgaW4gdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBpZiBpdCdzIG5vdCBwcm92aWRlZCBhcyBwYXJhbWV0ZXJcblx0XHQvLyAobGF5b3V0IGNhbGN1bGF0aW9uIGlzIG5vdCBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIGluIHRoaXMgY2FzZSlcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPCAwICYmICFwYXJhbWV0ZXJzLmxheW91dCkge1xuXHRcdFx0cGFyYW1ldGVycy5sYXlvdXQgPSB0aGlzLm9Sb3V0ZXJQcm94eS5maW5kTGF5b3V0Rm9ySGFzaChoYXNoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmNhbGN1bGF0ZUxheW91dChGQ0xMZXZlbCwgaGFzaCwgcGFyYW1ldGVycy5sYXlvdXQsIHBhcmFtZXRlcnMua2VlcEN1cnJlbnRMYXlvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgYmVmb3JlIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogRGlzcGxheXMgYSBidXN5IGluZGljYXRvci5cblx0ICpcblx0ICovXG5cdF9iZWZvcmVSb3V0ZU1hdGNoZWQoLypvRXZlbnQ6IEV2ZW50Ki8pOiB2b2lkIHtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgUm91dGVyUHJveHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKi9cblx0X2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKTogYm9vbGVhbiB7XG5cdFx0Ly8gVGhlIFJvdXRlclByb3h5IHNldHMgYSAnZmVMZXZlbCcgcHJvcGVydHkgb24gdGhlIGhpc3Rvcnkuc3RhdGUgb2JqZWN0XG5cdFx0cmV0dXJuIGhpc3Rvcnkuc3RhdGU/LmZlTGV2ZWwgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBIaWRlcyB0aGUgYnVzeSBpbmRpY2F0b3IgYW5kIGZpcmVzIGl0cyBvd24gJ3JvdXRlbWF0Y2hlZCcgZXZlbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50XG5cdCAqL1xuXHRfb25Sb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIFJvdXRpbmdFdmVudFBhcmFtZXRlcnM7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLnJlYXNvbiA9IE5hdmlnYXRpb25SZWFzb24uQXBwU3RhdGVDaGFuZ2VkO1xuXHRcdFx0b0FwcFN0YXRlSGFuZGxlci5yZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vUm91dGVyUHJveHkuY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLlJlc3RvcmVIaXN0b3J5O1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzZXRSZXN0b3JlSGlzdG9yeUZsYWcoKTtcblx0XHR9XG5cblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIik7XG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlUGF0dGVybiA9IG1QYXJhbWV0ZXJzLmNvbmZpZy5wYXR0ZXJuO1xuXHRcdHRoaXMuYUN1cnJlbnRWaWV3cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblxuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlSW5mb3JtYXRpb24gPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUpO1xuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cblx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVycyk7XG5cblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IGhhc2ggaGFzIGJlZW4gc2V0IGJ5IHRoZSByb3V0ZXJQcm94eS5uYXZUb0hhc2ggZnVuY3Rpb25cblx0XHQvLyBJZiBub3QsIHJlYnVpbGQgaGlzdG9yeSBwcm9wZXJseSAoYm90aCBpbiB0aGUgYnJvd3NlciBhbmQgdGhlIFJvdXRlclByb3h5KVxuXHRcdGlmICghdGhpcy5faXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSgpKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQucmVzdG9yZUhpc3RvcnkoKVxuXHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0ZGV0YWNoUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKG9EYXRhOiBvYmplY3QsIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhc3luYyBpbml0aWFsaXplUm91dGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkNvbGxhYm9yYXRpb24pIHtcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQ29sbGFib3JhdGlvbkhlbHBlciB9ID0gYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL2NvbW1vbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uSGVscGVyXCIpO1xuXHRcdFx0YXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5wcm9jZXNzQW5kRXhwYW5kSGFzaCgpO1xuXHRcdH1cblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cblx0XHR0aGlzLl9mbk9uUm91dGVNYXRjaGVkID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0dGhpcy5vUm91dGVyLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl9iZWZvcmVSb3V0ZU1hdGNoZWQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdC8vIFJlc2V0IGludGVybmFsIHN0YXRlXG5cdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gW107XG5cdFx0RWRpdFN0YXRlLnJlc2V0RWRpdFN0YXRlKCk7XG5cdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gIXRoaXMub1JvdXRlci5tYXRjaChcIlwiKTtcblxuXHRcdGNvbnN0IGJJc0lhcHBTdGF0ZSA9IHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmdldEhhc2goKS5pbmNsdWRlcyhcInNhcC1pYXBwLXN0YXRlXCIpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvU3RhcnR1cFBhcmFtZXRlcnMgPSBhd2FpdCB0aGlzLm9BcHBDb21wb25lbnQuZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKTtcblx0XHRcdGNvbnN0IGJIYXNTdGFydFVwUGFyYW1ldGVycyA9IG9TdGFydHVwUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKG9TdGFydHVwUGFyYW1ldGVycykubGVuZ3RoICE9PSAwO1xuXHRcdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0XHQvLyBNYW5hZ2Ugc3RhcnR1cCBwYXJhbWV0ZXJzIChpbiBjYXNlIG9mIG5vIGlhcHAtc3RhdGUpXG5cdFx0XHRpZiAoIWJJc0lhcHBTdGF0ZSAmJiBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgJiYgIXNIYXNoKSB7XG5cdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiQ1JFQVRFXCIpKSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIG1vZGVcblx0XHRcdFx0XHQvLyBUaGlzIGNoZWNrIHdpbGwgY2F0Y2ggbXVsdGlwbGUgbW9kZXMgbGlrZSBjcmVhdGUsIGNyZWF0ZVdpdGggYW5kIGF1dG9DcmVhdGVXaXRoIHdoaWNoIGFsbCBuZWVkXG5cdFx0XHRcdFx0Ly8gdG8gYmUgaGFuZGxlZCBsaWtlIGNyZWF0ZSBzdGFydHVwIVxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBEZWVwIGxpbmtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlZFByZWZlcnJlZE1vZGVFZGl0KG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBkdXJpbmcgcm91dGluZyBpbml0aWFsaXphdGlvblwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZhdWx0Q3JlYXRlSGFzaChvU3RhcnR1cFBhcmFtZXRlcnM/OiBTdGFydHVwUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlcik7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0Q3JlYXRlU3RhcnR1cEhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlciwgdGhpcy5vTWV0YU1vZGVsKS50aGVuKFxuXHRcdFx0KHNOZXdIYXNoOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHNOZXdIYXNoKSB7XG5cdFx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIEZ1bmN0aW9uKShzTmV3SGFzaCk7XG5cdFx0XHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycz8ucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiQVVUT0NSRUFURVwiKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVDcmVhdGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhbHdheXNDaGVja1RhcmdldEV4aXN0ZW5jZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5hcHA/Ll9jaGVja0V4aXN0ZW5jZU9uRGVlcExpbmsgPT09IHRydWU7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVlcExpbmtTdGFydHVwSGFzaChcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdFx0dGhpcy5vTW9kZWwsXG5cdFx0XHRhbHdheXNDaGVja1RhcmdldEV4aXN0ZW5jZVxuXHRcdCkudGhlbigob0RlZXBMaW5rKSA9PiB7XG5cdFx0XHRsZXQgc0hhc2g7XG5cdFx0XHRpZiAob0RlZXBMaW5rLmNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgc1RlY2huaWNhbFBhdGggPSBvRGVlcExpbmsuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSB0aGlzLl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KVxuXHRcdFx0XHRcdD8gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0LCBmYWxzZSkhXG5cdFx0XHRcdFx0OiBzVGVjaG5pY2FsUGF0aDtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIEZ1bmN0aW9uKShzSGFzaCk7XG5cdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZURlZXBsaW5rKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdCBieSBhcHBlbmRpbmcgXCJbJnw/XWktYWN0aW9uPWVkaXRcIiB0byB0aGUgaGFzaCBpZjpcblx0ICogLSBUaGVyZSBpcyBhIHJlc3VsdGluZyBoYXNoIGZyb20gdGhlIHByZXZpb3VzIGxvZ2ljLFxuXHQgKiAtIFRoZSBwcmVmZXJyZWQgbW9kZSBpcyBlZGl0LCBhbmRcblx0ICogLSBUaGUgZW50aXR5IGlzIGVkaXRhYmxlXG5cdCAqIFRoaXMgd29ya3MgZm9yIGJvdGggZGVlcC1saW5rIHN0YXJ0dXAgKCNBcHA/SUQ9bXlJZCZwcmVmZXJyZWRNb2RlPWVkaXQpIGFuZCBvYmplY3QgcGFnZSByb3V0aW5nICgjQXBwP3ByZWZlcnJlZE1vZGU9ZWRpdCYvRW50aXR5KElEKSkuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdGFydHVwUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVxuXHQgKi9cblx0YXN5bmMgX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChzdGFydHVwUGFyYW1ldGVyczogeyBwcmVmZXJyZWRNb2RlPzogc3RyaW5nW10gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHJlc3VsdGluZ0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0Y29uc3Qgc2hvdWxkRWRpdCA9ICEhc3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZT8uWzBdPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhcIkVESVRcIik7XG5cdFx0Y29uc3QgZWRpdGFibGUgPSBhd2FpdCBBcHBTdGFydHVwSGVscGVyLnZlcmlmeUVkaXRBbm5vdGF0aW9ucyh0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub01ldGFNb2RlbCk7XG5cdFx0aWYgKHJlc3VsdGluZ0hhc2ggJiYgc2hvdWxkRWRpdCAmJiBlZGl0YWJsZSkge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gKHJlc3VsdGluZ0hhc2guaW5jbHVkZXMoXCI/XCIpID8gXCImXCIgOiBcIj9cIikgKyBcImktYWN0aW9uPWVkaXRcIjtcblx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyAoaGFzaDogc3RyaW5nKSA9PiB2b2lkKShyZXN1bHRpbmdIYXNoICsgcGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHRnZXRPdXRib3VuZHMoKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMub3V0Ym91bmRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIERyYWZ0IHJvb3QgZW50aXR5IHNldCBvciB0aGUgc3RpY2t5LWVuYWJsZWQgZW50aXR5IHNldC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHJvb3QgRW50aXR5U2V0XG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPiB7XG5cdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gbmV3IFJvdXRpbmdTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9Sb3V0aW5nU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMENNQSxzQkFBc0IsV0FEM0JDLGNBQWMsQ0FBQyw2Q0FBNkMsQ0FBQyxVQUU1REMsS0FBSyxFQUFFLFVBR1BBLEtBQUssRUFBRTtJQUFBO0lBQUE7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BQUE7TUFBQTtNQUFBO0lBQUE7SUFBQTtFQUFBLEVBSjRCQyxhQUFhO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQSxJQTRFckNDLGNBQWM7SUFBQTtJQUFBO01BQUE7TUFBQTtRQUFBO01BQUE7TUFBQTtNQUFBLE9BK0IxQkMsbUJBQW1CLEdBQTRCLEVBQUU7TUFBQSxPQU1qREMsT0FBTyxHQUFHLEtBQUs7TUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBLE9BRWZDLElBQUksR0FBSixnQkFBYTtNQUNaLE1BQU1DLFFBQVEsR0FBRyxJQUFJLENBQUNDLFVBQVUsRUFBRTtNQUNsQyxJQUFJRCxRQUFRLENBQUNFLFNBQVMsS0FBSyxXQUFXLEVBQUU7UUFBQTtRQUN2QyxJQUFJLENBQUNDLGFBQWEsR0FBR0gsUUFBUSxDQUFDSSxXQUFXO1FBQ3pDLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUksQ0FBQ0YsYUFBYSxDQUFD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
@@ -78,6 +78,7 @@ export type RoutingNavigationParameters = {
78
78
  persistOPScroll?: boolean;
79
79
  FCLLevel?: number;
80
80
  updateFCLLevel?: number;
81
+ preserveHistory?: boolean;
81
82
  noPreservationCache?: boolean;
82
83
  recreateContext?: boolean;
83
84
  forceFocus?: boolean;
@@ -729,7 +730,13 @@ export class RoutingService extends Service<RoutingServiceSettings> {
729
730
  });
730
731
  }
731
732
  return this.oRouterProxy
732
- .navToHash(sTargetPath, false, parameters?.noPreservationCache, parameters?.forceFocus, !isStickyMode)
733
+ .navToHash(
734
+ sTargetPath,
735
+ !!parameters.preserveHistory,
736
+ parameters?.noPreservationCache,
737
+ parameters?.forceFocus,
738
+ !isStickyMode
739
+ )
733
740
  .then((bNavigated) => {
734
741
  if (!bNavigated) {
735
742
  // The navigation did not happen --> remove the navigation parameters from the queue as they shouldn't be used