@sapui5/sap.fe.templates 1.145.0 → 1.145.2

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.
@@ -327,12 +327,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
327
327
  }
328
328
 
329
329
  /**
330
- * Find the last visible subsection and add the sapUxAPObjectPageSubSectionFitContainer CSS class if it contains only a GridTable or a TreeTable.
330
+ * Add the sapUxAPObjectPageSubSectionFitContainer CSS class to every visible subsection that contains only a single GridTable or TreeTable.
331
+ * This makes the table fill the full height of its container so that the scrollbar appears on the table itself rather than on the page.
331
332
  * @param subSections The sub sections to look for
332
333
  */;
333
334
  _proto.checkSectionsForNonResponsiveTable = function checkSectionsForNonResponsiveTable(subSections) {
334
- const changeClassForTables = (event, lastVisibleSubSection) => {
335
- const blocks = [...lastVisibleSubSection.getBlocks(), ...lastVisibleSubSection.getMoreBlocks()];
335
+ const changeClassForTables = (event, visibleSubSection) => {
336
+ const blocks = [...visibleSubSection.getBlocks(), ...visibleSubSection.getMoreBlocks()];
336
337
  if (blocks.length === 1) {
337
338
  const table = this.searchTableInBlock(blocks[0]);
338
339
  if (!table) {
@@ -342,17 +343,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
342
343
  const tableAPI = table.getParent()?.isA("sap.fe.macros.Table") ? table.getParent() : undefined;
343
344
  if (tableType && (tableType?.isA("sap.ui.mdc.table.GridTableType") || tableType?.isA("sap.ui.mdc.table.TreeTableType")) && tableAPI?.getTableDefinition().control.rowCountMode === "Auto") {
344
345
  //In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
345
- lastVisibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
346
- lastVisibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
346
+ visibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
347
+ visibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
347
348
  }
348
349
  }
349
350
  };
350
- for (let subSectionIndex = subSections.length - 1; subSectionIndex >= 0; subSectionIndex--) {
351
- if (subSections[subSectionIndex].getVisible()) {
352
- const lastVisibleSubSection = subSections[subSectionIndex];
351
+ for (const subSection of subSections) {
352
+ if (subSection.getVisible()) {
353
353
  // We need to attach this event in order to manage the Object Page Lazy Loading mechanism
354
- lastVisibleSubSection.attachEvent("modelContextChange", lastVisibleSubSection, changeClassForTables, this);
355
- break;
354
+ subSection.attachEvent("modelContextChange", subSection, changeClassForTables, this);
356
355
  }
357
356
  }
358
357
  }
@@ -572,7 +571,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
572
571
  oSubSection.setBindingContext(undefined);
573
572
  const blocks = oSubSection.getBlocks();
574
573
  // SubSection's contents binding is disabled.
575
- blocks.forEach(block => block.setBindingContext(null));
574
+ blocks.forEach(block => {
575
+ if (block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
576
+ block.content.setBindingContext(null);
577
+ } else {
578
+ block.setBindingContext(null);
579
+ }
580
+ });
576
581
  oSubSection.getMoreBlocks().forEach(subBlock => subBlock.setBindingContext(null));
577
582
  oSubSection.getActions().forEach(actions => actions.setBindingContext(null));
578
583
  }
@@ -639,6 +644,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
639
644
  /**
640
645
  * Set the initial focus in edit mode.
641
646
  * @param aSubSections Object page sub sections
647
+ * @param fromTabNavigation Indicates if the focus is set after a tab navigation
642
648
  */;
643
649
  _proto._updateFocusInEditMode = function _updateFocusInEditMode(aSubSections) {
644
650
  let fromTabNavigation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@@ -664,7 +670,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
664
670
  if (oFieldToFocus.isA("sap.ui.mdc.field.FieldInput")) {
665
671
  oFieldToFocus = oFieldToFocus.getParent();
666
672
  }
667
- oFieldToFocus.focus(focusInfo);
673
+ if (oFieldToFocus?.isA("sap.m.SearchField") && oFieldToFocus.getEnableSuggestions() && !oFieldToFocus.isBound("enableSuggestions")) {
674
+ // In case the focus is set on a search field with suggestions, we temporarily disable the suggestions to avoid triggering them on focus
675
+ // unless this property is bound (to avoid modifying something in a model)
676
+ oFieldToFocus.setEnableSuggestions(false);
677
+ oFieldToFocus.focus(focusInfo);
678
+ oFieldToFocus.setEnableSuggestions(true);
679
+ } else {
680
+ oFieldToFocus?.focus(focusInfo);
681
+ }
668
682
  }
669
683
  }.bind(this), fromTabNavigation ? 300 : 0);
670
684
  }
@@ -697,7 +711,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
697
711
  oSubSection.handleSubSectionCreated(this.getView());
698
712
  }
699
713
  const blocks = oSubSection.getBlocks();
700
- blocks.forEach(block => block.setBindingContext(undefined));
714
+ blocks.forEach(block => {
715
+ if (block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
716
+ block.content.setBindingContext(undefined);
717
+ } else {
718
+ block.setBindingContext(undefined);
719
+ }
720
+ });
701
721
  oSubSection.getMoreBlocks().forEach(subBlock => subBlock.setBindingContext(undefined));
702
722
  oSubSection.getActions().forEach(actions => actions.setBindingContext(undefined));
703
723
  };
@@ -1782,4 +1802,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
1782
1802
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _class2)) || _class);
1783
1803
  return ObjectPageController;
1784
1804
  }, false);
1785
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwib25UYWJsZUJpbmRpbmdVcGRhdGVkIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwicmVzIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImNhdGNoIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvU291cmNlIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0IiwiY3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzIiwiZ2V0VmFsdWUiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRQcm9wZXJ0eSIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsInRhcmdldElkIiwic3ViU2VjdGlvbklkIiwic2VjdGlvbklkIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0T3duZXJDb21wb25lbnQiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbiIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJiaW5kIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiZm9yRWFjaCIsInN1YlNlY3Rpb24iLCJieUlkIiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbiIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZGlzY29ubmVjdCIsImRldGFjaENoYW5nZSIsImdldEFwcENvbXBvbmVudCIsImlzU3VzcGVuZGVkIiwibWVzc2FnZXMiLCJfc2hvd01lc3NhZ2VzIiwib1RhYmxlIiwiZ2V0Um93QmluZGluZyIsImNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUiLCJzdWJTZWN0aW9ucyIsImNoYW5nZUNsYXNzRm9yVGFibGVzIiwibGFzdFZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsInRhYmxlVHlwZSIsImlzQSIsImdldFR5cGUiLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJjb250cm9sIiwicm93Q291bnRNb2RlIiwiYWRkU3R5bGVDbGFzcyIsImRldGFjaEV2ZW50Iiwic3ViU2VjdGlvbkluZGV4IiwiZ2V0VmlzaWJsZSIsImJsb2NrIiwiZ2V0VGFibGVBUEkiLCJtYWluQ29udGVudCIsImdldE1haW5Db250ZW50IiwibWFpbkNvbnRlbnRUYWJsZUFQSSIsInNpZGVDb250ZW50IiwiZ2V0U2lkZUNvbnRlbnQiLCJzaWRlQ29udGVudFRhYmxlQVBJIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb24iLCJnZXRTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyIsImRpc2Nvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyIsIndhaXRGb3JWaXNpYmlsaXR5QmluZGluZ3MiLCJ3YWl0Rm9yQWxsU3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nc1Jlc29sdmVkIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwib2JqZWN0UGFnZUxheW91dCIsInNldFZpc2libGUiLCJzdWJTZWN0aW9uc0luZm8iLCJmZSIsIm90aGVycyIsImRpc2Nvbm5lY3RWaXNpYmlsaXR5T2JzZXJ2ZXIiLCJnZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJkb21FZGl0YWJsZUVsZW1lbnQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiVUk1RWxlbWVudCIsImNsb3Nlc3RUbyIsImdldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9iamVjdFBhZ2UiLCJmaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwiZ2V0Q29udGVudCIsImdldEVuYWJsZWQiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYkVkaXRhYmxlSGVhZGVyIiwiZmlyc3RWaXNpYmlsaXR5QmluZGluZyIsIl9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZyIsImlTZWN0aW9uIiwib1NlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiIsInN1YkJsb2NrIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImJsb2NrQ29udHJvbCIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJlbXB0eUZpZWxkIiwiZ2V0Rmlyc3RFbXB0eVJlcXVpcmVkRmllbGQiLCJmaWVsZHMiLCJnZXRSZXF1aXJlZCIsImlzRW1wdHkiLCJnZXRNdWx0aVZhbHVlRmllbGQiLCJnZXRJdGVtcyIsInZhbHVlIiwiZGVidWciLCJmcm9tVGFiTmF2aWdhdGlvbiIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJnZXRDb250ZW50RWRpdCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsImFsbHN1YlNlY3Rpb25zIiwiY3VycmVudE1vZGVsIiwiZ2V0QmluZGluZ3MiLCJiaW5kaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYW5kbGVTdWJTZWN0aW9uQ3JlYXRlZCIsIl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdCIsIm1lc3NhZ2VIYW5kbGVyIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwibmF2QmFjayIsImN1cnJlbnRVUkwiLCJkb2N1bWVudCIsIlVSTCIsImhpc3RvcnkiLCJiYWNrIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsImdldFJvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsIndhcm5pbmciLCJoaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYmluZGluZ0NvbnRleHQiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJ0YWJsZURlZmluaXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvTW9kZWwiLCJvRmluYWxVSVN0YXRlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwib0JpbmRpbmciLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsImdldENvbnRleHQiLCJmbkhhbmRsZUNoYW5nZSIsImludGVybmFsTW9kZWxDb250ZXh0IiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJyZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyIsInN1YlNlY3Rpb25JbmZvIiwid2FpdEZvckFwcGx5QXBwc3RhdGUiLCJhbGwiLCJvYnNlcnZlQ3VycmVudFNlY3Rpb24iLCJzdWJzZWN0aW9uIiwiZmlyZUV2ZW50IiwiY2FyZHMiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJoYXNDb2xsYWJvcmF0aW9uTWFuYWdlckNvbm5lY3RlZCIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsIm1lc3NhZ2VTdHJpcCIsImVudGl0eU5hbWUiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbGxhYm9yYXRpb25NZXNzYWdlIiwiTWVzc2FnZSIsImdldFRleHQiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJjdHh0Iiwib0JpbmRpbmdDb250ZXh0IiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJpc0VkaXRhYmxlIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyIsImNvbnRleHQiLCJmb3JjZUZvY3VzIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJEZXZpY2UiLCJzdXBwb3J0IiwidG91Y2giLCJzYXZlQnV0dG9uIiwiYXV0b1F1ZXVlVW5sb2NrIiwiYXV0b1F1ZXVlTG9jayIsImlzTG9ja2VkIiwidW5sb2NrIiwiZGV0YWNoQnJvd3NlckV2ZW50IiwiYXR0YWNoQnJvd3NlckV2ZW50IiwibG9jayIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsIm9PYmplY3RQYWdlRGVzY3JpcHRpb24iLCJleHRyYWN0UGF0aHMiLCJiaW5kaW5nSW5mbyIsImZyb20iLCJTZXQiLCJwYXJ0cyIsInBhcnQiLCJtb2RlbCIsInBhdGgiLCJCb29sZWFuIiwic3VidGl0bGVQYXRocyIsImdldEJpbmRpbmdJbmZvIiwiZGVzY3JpcHRpb25QYXRocyIsInBhdGhzVG9SZXNvbHZlIiwiYXBwQ29tcG9uZW50Iiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZm5DbGVhckNhY2hlVGl0bGUiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9PYmplY3RQYWdlQ29udGV4dCIsImJ1aWxkIiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJkZXNjcmlwdGlvbiIsInAiLCJyZXF1ZXN0T2JqZWN0IiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJvTWVzc2FnZSIsImlzRXJyb3JNZXNzYWdlIiwidmFsaWRhdGlvbiIsIm1lc3NhZ2VWYWxpZGF0aW9uIiwiaW5jbHVkZXMiLCJpc0VkaXRNb2RlIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwib0l0ZW1CaW5kaW5nIiwiZ2V0TGVuZ3RoIiwib3BlbkJ5IiwiQnVzeUxvY2tlciIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJwcm9wZXJ0eVBhdGgiLCJMb2NhbFByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJfdmFsaWRhdGVEb2N1bWVudCIsImdldEFjdGl2ZUVsZW1lbnQiLCJieVBhc3NTaWRlRWZmZWN0cyIsImlzVHJhbnNpZW50IiwiY3JlYXRlZCIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJyZXQiLCJleGVjdXRlR2xvYmFsVmFsaWRhdGlvbiIsInNob3dNZXNzYWdlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMiLCJzaWRlRWZmZWN0cyIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImRyYWZ0Um9vdENvbnRleHQiLCJjcmVhdGVSb290Q29udGV4dCIsIkRyYWZ0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImlzQ29ubmVjdGVkIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJ1c2VTYXZlQW5kTGVhdmUiLCJhd2FpdENyZWF0ZURvY3VtZW50cyIsImV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJtZXNzYWdlUG9wb3ZlckVyciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJlcnIiLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlQXRFbmQiLCJnZXRBZ2dyZWdhdGlvbiIsInNraXBTaWRlRWZmZWN0cyIsImlzU2tpcEJpbmRpbmdUb1ZpZXciLCJpc1N0YW5kYXJkU2F2ZSIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJvRWxlbWVudCIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJyZXBsYWNlIiwib1NpbmdsZUNvbnRleHQiLCJvU3ViQ2hhcnRDb250ZXh0RGF0YSIsImNvbnRleHREYXRhIiwiZW50aXR5U2V0IiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9QYWdlTGV2ZWxTViIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJhdHRyaWJ1dGVzIiwib1ZpZXdEYXRhIiwib0NvbmZpZ3VyYXRpb25zIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJhQ29uZmlndXJhdGlvbnMiLCJzS2V5Iiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsInBhZ2luYXRvckN1cnJlbnRDb250ZXh0IiwiYmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsIm9EYXRhUG9pbnRzIiwiZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvU2hlbGxTZXJ2aWNlcyIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmsiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIiwiX2ZpbmRTdW1tYXJpemVCdXR0b24iLCJvYmplY3RQYWdlVGl0bGUiLCJzdW1tYXJpemVCdXR0b24iLCJidXR0b24iLCJlbmRzV2l0aCIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtcyIsInByZWZlcnJlZEFjdGlvbiIsInByZWZlcnJlZEFjdGlvbkxldmVsIiwicGFyc2VJbnQiLCJzcGxpdCIsImlzTmFOIiwiZ2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiQ2FuUGVyZm9ybSIsInNldFByZWZlcnJlZEFjdGlvblN0YXR1cyIsIkFscmVhZHlQZXJmb3JtZWQiLCJlbnZpcm9ubWVudFNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsIlNtYXJ0U3VtbWFyaXplIiwiZmlyZVByZXNzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jYXJkcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2VkaXRGbG93Q29uc3RhbnRzXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL1JlY29tbWVuZGF0aW9ucy9Db25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQsIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWxsQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL0Vhc3lGaWxsQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTdW1tYXJpemF0aW9uQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2FpL1N1bW1hcml6YXRpb25CdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvc2VjdGlvbi9TdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBGb3JtQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUFQSVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTaGFyZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaGFyZS9TaGFyZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVDcmVhdGlvbk9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVDcmVhdGlvbk9wdGlvbnNcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkRpc2NhcmQgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EaXNjYXJkRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBJbnB1dEJhc2UgZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIExpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aW9uRHJhZnQgZnJvbSBcIi4vY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRHJhZnRcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuZXhwb3J0IHR5cGUgQmluZGluZ1BhcmFtcyA9IHtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5jb25zdCBQcmVmZXJyZWRBY3Rpb25TdGF0dXMgPSBGRUxpYnJhcnkuUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZTtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogRkVWaWV3O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihDb2xsYWJvcmF0aW9uTWFuYWdlci5vdmVycmlkZShDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlKSlcblx0Y29sbGFib3JhdGlvbk1hbmFnZXIhOiBDb2xsYWJvcmF0aW9uTWFuYWdlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0TmF2aWdhdGlvbk1vZGU6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSgpO1xuXHRcdFx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGUgPyBcImV4cGxhY2VcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbiE6IE1lc3NhZ2VCdXR0b247XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgd2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyE6IFByb21pc2U8dW5rbm93bj5bXTtcblxuXHRwcml2YXRlIHN1YlNlY3Rpb25zPzogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfTtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9LCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXG5cdFx0XHRcInJlbGF0ZWRBcHBzXCIsXG5cdFx0XHR7XG5cdFx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0XHRpdGVtczogbnVsbFxuXHRcdFx0fSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdHN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKSBhcyBNZXNzYWdlQnV0dG9uO1xuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdEVuYWJsZWRcIiwgdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cblx0XHR0aGlzLl9oYW5kbGVTbWFydFN1bW1hcnlTdGFydHVwQWN0aW9uKCk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uZGV0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgYXBwIGlzIHN1c3BlbmRlZCwgd2UgZG8gbm90IHNob3cgdGhlIG1lc3NhZ2VzICh0aGUgTWVzc2FnZU1vZGVsIGNvbnRhaW5zIG1lc3NhZ2VzIGZyb20gdGhlIGFjdGl2ZSBhcHApLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nPy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuX3Nob3dNZXNzYWdlcyhtZXNzYWdlcywgXCJCYWNrZW5kXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBUYWJsZSk6IE9EYXRhTGlzdEJpbmRpbmcge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBsYXN0IHZpc2libGUgc3Vic2VjdGlvbiBhbmQgYWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBHcmlkVGFibGUgb3IgYSBUcmVlVGFibGUuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0QmxvY2tzKCksIC4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKGJsb2Nrcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAodGFibGUuZ2V0VHlwZSgpIGFzIFRhYmxlVHlwZUJhc2UpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy5UYWJsZVwiKSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZVR5cGUgJiZcblx0XHRcdFx0XHQodGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikgfHwgdGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLlRyZWVUYWJsZVR5cGVcIikpICYmXG5cdFx0XHRcdFx0dGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wucm93Q291bnRNb2RlID09PSBcIkF1dG9cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbkluZGV4ID0gc3ViU2VjdGlvbnMubGVuZ3RoIC0gMTsgc3ViU2VjdGlvbkluZGV4ID49IDA7IHN1YlNlY3Rpb25JbmRleC0tKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3QgbGFzdFZpc2libGVTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmF0dGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIHRhYmxlIGluIGJsb2NrcyBvZiBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gYmxvY2sgT25lIHN1YiBzZWN0aW9uIGJsb2NrXG5cdCAqIEByZXR1cm5zIFRhYmxlIGlmIGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzZWFyY2hUYWJsZUluQmxvY2soYmxvY2s6IFN1YlNlY3Rpb25CbG9jayk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGdldFRhYmxlQVBJID0gKGNvbnRyb2w6IENvbnRyb2wpOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC5tLlBhbmVsXCIpICYmIGNvbnRyb2wuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0Y29uc3QgbWFpbkNvbnRlbnQgPSAoY29udHJvbCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldE1haW5Db250ZW50KClbMF07XG5cdFx0XHRcdGNvbnN0IG1haW5Db250ZW50VGFibGVBUEkgPSBnZXRUYWJsZUFQSShtYWluQ29udGVudCk7XG5cdFx0XHRcdGlmIChtYWluQ29udGVudFRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0dGFibGVBUEkgPSBtYWluQ29udGVudFRhYmxlQVBJO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVDb250ZW50ID0gKGNvbnRyb2wgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRTaWRlQ29udGVudCgpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVDb250ZW50VGFibGVBUEkgPSBnZXRUYWJsZUFQSShzaWRlQ29udGVudCk7XG5cdFx0XHRcdFx0aWYgKHNpZGVDb250ZW50VGFibGVBUEkpIHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJID0gc2lkZUNvbnRlbnRUYWJsZUFQSTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gZ2V0VGFibGVBUEkoY29udHJvbCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3LmdldFZpZXdEYXRhKCk/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKTtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBpdGVtLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIHsgaXNGaXJzdFJlbmRlcmluZz86ICgpID0+IGJvb2xlYW4gfSkuaXNGaXJzdFJlbmRlcmluZz8uKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHRjb25zdCBmbk9QUmVuZGVyaW5nTGF5b3V0ID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uZWRpdGFibGVIZWFkZXJDb250ZW50KSB7XG5cdFx0XHRcdFx0Zm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdHRoaXMuX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyhvT2JqZWN0UGFnZSk7XG5cblx0XHR0aGlzLnN1YlNlY3Rpb25zID0gdGhpcy5kaXNjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMob09iamVjdFBhZ2UpO1xuXHRcdHRoaXMud2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyA9IHRoaXMud2FpdEZvckFsbFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZ3NSZXNvbHZlZCgpO1xuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgeyBvQ29udGFpbmVyOiBDb250cm9sIH0pLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHR0aGlzLnBsYWNlaG9sZGVyLmVuYWJsZUFuaW1hdGlvbigpO1xuXHRcdFx0XHQob05hdkNvbnRhaW5lciBhcyB1bmtub3duIGFzIHsgc2hvd1BsYWNlaG9sZGVyOiBGdW5jdGlvbiB9KS5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNjb25uZWN0IHRoZSB2aXNpYmlsaXR5IG9ic2VydmVycyBvZiBhbGwgRkUgc3Vic2VjdGlvbnMuXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlTGF5b3V0XG5cdCAqIEByZXR1cm5zIFRoZSBzdWJzZWN0aW9ucyBpbmZvcm1hdGlvbiBvciB1bmRlZmluZWQgaWYgb3B0aW1pemF0aW9uIGlzIGRpc2FibGVkXG5cdCAqL1xuXHRkaXNjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMoXG5cdFx0b2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dFxuXHQpOiB7IGZlOiBTdWJTZWN0aW9uW107IG90aGVyczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuZ2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uKCkpIHtcblx0XHRcdG9iamVjdFBhZ2VMYXlvdXQuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRjb25zdCBzdWJTZWN0aW9uc0luZm86IHtcblx0XHRcdFx0ZmU6IFN1YlNlY3Rpb25bXTtcblx0XHRcdFx0b3RoZXJzOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdFx0fSA9IHsgZmU6IFtdLCBvdGhlcnM6IFtdIH07XG5cdFx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goKHN1YlNlY3Rpb24pID0+IHtcblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uaXNBPFN1YlNlY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5zZWN0aW9uLlN1YlNlY3Rpb25cIikpIHtcblx0XHRcdFx0XHRzdWJTZWN0aW9uc0luZm8uZmUucHVzaChzdWJTZWN0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdWJTZWN0aW9uc0luZm8ub3RoZXJzLnB1c2goc3ViU2VjdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c3ViU2VjdGlvbnNJbmZvLmZlLmZvckVhY2goKHN1YlNlY3Rpb24pID0+IHN1YlNlY3Rpb24uZGlzY29ubmVjdFZpc2liaWxpdHlPYnNlcnZlcigpKTtcblx0XHRcdHJldHVybiBzdWJTZWN0aW9uc0luZm87XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsb2FkaW5nIHN0cmF0ZWd5IGZvciB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEByZXR1cm5zIFRoZSBsb2FkaW5nIHN0cmF0ZWd5IGZvciB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqL1xuXHRnZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZGF0YShcImRpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvblwiKSA9PT0gXCJ0cnVlXCI7XG5cdH1cblxuXHRwcml2YXRlIGdldEZpcnN0RWRpdGFibGVJbnB1dCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkb21FZGl0YWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTtcblx0XHRyZXR1cm4gZG9tRWRpdGFibGVFbGVtZW50ID8gVUk1RWxlbWVudC5jbG9zZXN0VG8oZG9tRWRpdGFibGVFbGVtZW50KSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IGNsaWNrYWJsZSBlbGVtZW50IGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgZm91bmQgaW4gdGhlIGhlYWRlclxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiAob2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRmaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhY3Rpb25zLmZpbmQoZnVuY3Rpb24gKGFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKGFjdGlvbi5pc0E8U3VtbWFyaXphdGlvbkJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldENvbnRlbnQoKT8uZ2V0VmlzaWJsZSgpID8/IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U2hhcmVBUEk+KFwic2FwLmZlLm1hY3Jvcy5TaGFyZVwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8RWFzeUZpbGxCdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5FYXN5RmlsbEJ1dHRvblwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8Q29sbGFib3JhdGlvbkRyYWZ0PihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb21wb25lbnRzLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZSBhbmQgQ29sbGFib3JhdGlvbkRyYWZ0IGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNhYmxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYWN0aW9uLmlzQTxJbnZpc2libGVUZXh0PihcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIWFjdGlvbi5pc0E8VG9vbGJhclNwYWNlcj4oXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgKGFjdGlvbiBhcyBCdXR0b24pLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgYmluZGluZ3Mgb2YgYmxvY2tzIGluIE9iamVjdCBQYWdlIExheW91dCBiYXNlZCBvbiB0aGUgaXRzIG92ZXJhbGwgY29udGVudC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICovXG5cdF9kaXNhYmxlQmxvY2tzQmluZGluZ3ModGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VjdGlvbnMgPSBvYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRsZXQgaVNraXAgPSAzOyAvLyAzIHNlY3Rpb25zL3N1YnNlY3Rpb25zIGFyZSBsb2FkZWQgaW5pdGlhbGx5LCB0aGUgb3RoZXJzIGFyZSBsb2FkZWQgbGF6aWx5XG5cdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdGNvbnN0IGZpcnN0VmlzaWJpbGl0eUJpbmRpbmcgPSB0aGlzLl9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZygpO1xuXHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblxuXHRcdFx0XHRjb25zdCBkaXNhYmxlQmluZGluZ0NvbnRleHRDb25kaXRpb24gPVxuXHRcdFx0XHRcdCh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpICYmXG5cdFx0XHRcdFx0XHQoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSkgfHxcblx0XHRcdFx0XHQoIXRoaXMuZ2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uKCkgJiZcblx0XHRcdFx0XHRcdCgoIWJVc2VJY29uVGFiQmFyICYmIGZpcnN0VmlzaWJpbGl0eUJpbmRpbmcpIHx8IC8vaWYgc29tZSBzdWJzZWN0aW9ucyBoYXZlIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KCFiVXNlSWNvblRhYkJhciAmJiAhZmlyc3RWaXNpYmlsaXR5QmluZGluZyAmJiBpU2tpcCA8IDEpIHx8IC8vIGlmIG5vIHN1YnNlY3Rpb24gaGFzIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKTtcblx0XHRcdFx0aWYgKGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGJsb2NrQ29udHJvbCBvZiBhQmxvY2tzKSB7XG5cdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dD8uKCkpIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYmxvY2tDb250cm9sLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbC5nZXRDb250ZW50ICYmIGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCk/LmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbD8uZ2V0Q29udGVudD8uKCk/LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9ICgoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtQVBJKS5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGZvcm1FbGVtZW50LmdldEZpZWxkcygpIGFzIElucHV0QmFzZVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbXB0eUZpZWxkID0gdGhpcy5nZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChhRmllbGRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVtcHR5RmllbGQpIHJldHVybiBlbXB0eUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSwgZnJvbVRhYk5hdmlnYXRpb24gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHRmcm9tVGFiTmF2aWdhdGlvbiA/IDMwMCA6IDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3Qgc3ViLXNlY3Rpb24gd2l0aCBhIHZpc2liaWxpdHkgYm91bmQgdG8gdGhlIG1vZGVsIG9mIHRoZSB2aWV3LlxuXHQgKiBTZWN0aW9ucyB3aXRoIGJpbmRpbmdzIG9uIGludGVybmFsIG1vZGVscyBvbmx5IGFyZSBpZ25vcmVkLlxuXHQgKiBAcmV0dXJucyBUaGUgdmlzaWJpbGl0eSBiaW5kaW5nIG9mIHRoZSBmaXJzdCBzdWItc2VjdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0X2dldGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nKCk6IEJpbmRpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGFsbHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBjdXJyZW50TW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpO1xuXHRcdHJldHVybiBhbGxzdWJTZWN0aW9uc1xuXHRcdFx0LmZpbmQoXG5cdFx0XHRcdChzdWJTZWN0aW9uKSA9PlxuXHRcdFx0XHRcdChzdWJTZWN0aW9uLmdldEJpbmRpbmcoXCJ2aXNpYmxlXCIpIGFzIENvbXBvc2l0ZUJpbmRpbmcgfCB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHQ/LmdldEJpbmRpbmdzPy4oKVxuXHRcdFx0XHRcdFx0LnNvbWUoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0TW9kZWwoKSA9PT0gY3VycmVudE1vZGVsKVxuXHRcdFx0KVxuXHRcdFx0Py5nZXRCaW5kaW5nKFwidmlzaWJsZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciBhbGwgc3Vic2VjdGlvbiB2aXNpYmlsaXR5IGJpbmRpbmdzIHRvIGJlIHJlc29sdmVkLlxuXHQgKiBUaGlzIG1ldGhvZCBsaXN0ZW5zIGZvciB0aGUgJ3Zpc2liaWxpdHlDaGFuZ2VkJyBldmVudCAgLiBUaGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkIGV2ZW4gaWYgdGhlIHZhbHVlcyBhcmUgbm90IGNoYW5nZWQgYnV0IGp1c3QgcmVzb2x2ZWQuXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHByb21pc2VzIHRoYXQgcmVzb2x2ZSB3aGVuIGVhY2ggdmlzaWJpbGl0eSBiaW5kaW5nIGlzIHJlc29sdmVkLlxuXHQgKi9cblx0d2FpdEZvckFsbFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZ3NSZXNvbHZlZCgpOiBQcm9taXNlPHVua25vd24+W10ge1xuXHRcdHJldHVybiB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpXG5cdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHQoc3ViU2VjdGlvbikgPT4gc3ViU2VjdGlvbi5pc0E8U3ViU2VjdGlvbj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLnNlY3Rpb24uU3ViU2VjdGlvblwiKSAmJiBzdWJTZWN0aW9uLmdldEJpbmRpbmcoXCJ2aXNpYmxlXCIpXG5cdFx0XHQpIC8vZmlsdGVyaW5nIG9uIEZFIHN1YnNlY3Rpb25zIHdpdGggdmlzaWJpbGl0eSBiaW5kaW5nKVxuXHRcdFx0Lm1hcChhc3luYyAoc3ViU2VjdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHN1YlNlY3Rpb24uYXR0YWNoRXZlbnRPbmNlKFwidmlzaWJpbGl0eUNoYW5nZWRcIiwgcmVzb2x2ZSkpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdGlmIChvU3ViU2VjdGlvbi5pc0E8U3ViU2VjdGlvbj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLnNlY3Rpb24uU3ViU2VjdGlvblwiKSkge1xuXHRcdFx0b1N1YlNlY3Rpb24uaGFuZGxlU3ViU2VjdGlvbkNyZWF0ZWQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0XHRjb25zdCBibG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBTdWJTZWN0aW9uQmxvY2tbXTtcblx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblxuXHRcdC8vIEZ1bmN0aW9uIHRvIG5hdmlnYXRlIGJhY2ssIG9yIGRpc3BsYXkgdGhlIGxhdW5jaHBhZCBpZiB3ZSdyZSBvbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgaGlzdG9yeVxuXHRcdGNvbnN0IG5hdkJhY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50VVJMID0gZG9jdW1lbnQuVVJMO1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhZ2UgaW4gdGhlIGhpc3RvcnksIGhpc3RvcnkuYmFjayBkb2VzIG5vdGhpbmcuXG5cdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdXNlIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0LCB0aGF0IHdpbGwgZGlzcGxheSB0aGUgaG9tZSBwYWdlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LlVSTCA9PT0gY3VycmVudFVSTCkge1xuXHRcdFx0XHRcdHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCA1MDApO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGlzIG9iamVjdCBwYWdlIGRvZXNuJ3QgaGF2ZSBhIGJpbmRpbmcgY29udGV4dCwgYnV0IHN0aWxsIGhhbmRsZXMgdGhlIHNoZWxsIGJhY2sgbmF2aWdhdGlvbiAtLT4gcGZvcm0gdGhlIG5hdiBiYWNrIGFuZCByZW1vdmUgdGhlIG5hdmJhY2sgaGFuZGxlciBhcyBpdCBtYWtlcyBubyBzZW5zZSBhbnkgbG9uZ2VyXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0LnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZClcblx0XHRcdFx0LnRoZW4obmF2QmFjaylcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGJhY2sgbmF2aWdhdGlvblwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGhpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHRcdD8uZW5hYmxlZDtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRuYXZCYWNrLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRoaWRkZW5EcmFmdEVuYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKGlucHV0QmluZGluZ0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsIG1QYXJhbWV0ZXJzOiBCaW5kaW5nUGFyYW1zIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHZpZXc/LmdldFZpZXdEYXRhKCk/LnZpZXdMZXZlbDtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSgpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0XHQob1RhYmxlUm93QmluZGluZyBhcyB1bmtub3duIGFzIHsgcmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXM6IEZ1bmN0aW9uIH0pLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUgYW5kIHVwZGF0ZSBhY3Rpb24gZW5hYmxlbWVudCBhY2NvcmRpbmdseVxuXHRcdFx0XHQvLyBXaWxsIHRvIGJlIGZpeGVkIHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IG9UYWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlQVBJID8gSlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSA6IHt9O1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIFtdLCBcInRhYmxlXCIpO1xuXG5cdFx0XHRcdG9UYWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdFx0b0ZpbmFsVUlTdGF0ZTogUHJvbWlzZTx1bmtub3duPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IFRhYmxlKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0b1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gU3RvcmUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGluIGludGVybmFsIG1vZGVsIGZvciBhY2Nlc3MgYnkgY29udHJvbGxlciBleHRlbnNpb25zXG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwibmF2aWdhdGlvblBhcmFtZXRlcnNcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSkge1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgdW5rbm93biBhcyB7IF90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzOiBGdW5jdGlvbiB9KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblxuXHRcdHRoaXMucmVjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnModGhpcy5zdWJTZWN0aW9ucywgb09iamVjdFBhZ2UsIGFwcGx5QXBwU3RhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlY29ubmVjdCB0aGUgdmlzaWJpbGl0eSBvYnNlcnZlcnMgb2YgYWxsIEZFIHN1YnNlY3Rpb25zIGFmdGVyIHRoZSBzdWJzZWN0aW9uIHZpc2liaWxpdHkgYmluZGluZ3MgYXJlIHJlc29sdmVkIGFuZCB0aGUgYXBwIHN0YXRlIGlzIGFwcGxpZWQuXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2FpdCBmb3IgdGhlIGFwcFNhdGUgdG8gYmUgYXBwbGllZCBiZWZvcmUgcmVjb25uZWN0aW5nIHRoZSBvYnNlcnZlcnMgYW5kIHRoZSBzY3JvbGxpbmcgdG8gdGhlIHNlbGVjdGVkIHNlY3Rpb24gaWYgaXQgY2hhbmdlZCBkdXJpbmcgdGhlIGFwcFN0YXRlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbkluZm8gU3Vic2VjdGlvbnMgaW5mb3JtYXRpb24gcmV0cmlldmVkIGR1cmluZyBkaXNjb25uZWN0aW9uXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlTGF5b3V0IE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEBwYXJhbSB3YWl0Rm9yQXBwbHlBcHBzdGF0ZSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXBwIHN0YXRlIGlzIGFwcGxpZWRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgb2JzZXJ2ZXJzIHdlcmUgcmVjb25uZWN0ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0YXN5bmMgcmVjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMoXG5cdFx0c3ViU2VjdGlvbkluZm86IHsgZmU6IFN1YlNlY3Rpb25bXTsgb3RoZXJzOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIH0gfCB1bmRlZmluZWQsXG5cdFx0b2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCxcblx0XHR3YWl0Rm9yQXBwbHlBcHBzdGF0ZTogUHJvbWlzZTx1bmtub3duPlxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoIXRoaXMuZ2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uKCkgJiYgc3ViU2VjdGlvbkluZm8pIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHRoaXMud2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncylcblx0XHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdG9iamVjdFBhZ2VMYXlvdXQuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Ly93YWl0aW5nIGZvciB0aGUgYXBwIHN0YXRlIHRvIGJlIGFwcGxpZWQgYnRvIGVuc3VyZSBmb2N1c2luZyBvbiB0aGUgY29ycmVjdCBzZWN0aW9uIGlmIHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRhd2FpdCB3YWl0Rm9yQXBwbHlBcHBzdGF0ZTtcblx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgYXBwbHlpbmcgYXBwIHN0YXRlXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdWJTZWN0aW9uSW5mby5mZS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiBzdWJTZWN0aW9uLm9ic2VydmVDdXJyZW50U2VjdGlvbigpKTtcblx0XHRcdFx0XHRzdWJTZWN0aW9uSW5mby5vdGhlcnNcblx0XHRcdFx0XHRcdC5maWx0ZXIoKHN1YnNlY3Rpb24pID0+IHN1YnNlY3Rpb24uZ2V0VmlzaWJsZSgpKVxuXHRcdFx0XHRcdFx0LmZvckVhY2goKHN1YlNlY3Rpb24pID0+IHN1YlNlY3Rpb24uZmlyZUV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB7IHN1YlNlY3Rpb246IHN1YlNlY3Rpb24gfSkpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgYXBwbHlpbmcgYXBwIHN0YXRlXCIsIGUgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgY2FyZHMgd2hlbiB0aGUgYmluZGluZyBpcyByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSBjYXJkcyBBcnJheSBvZiBjYXJkcyB0byBiZSB1cGRhdGVkXG5cdCAqL1xuXHRhc3luYyBfdXBkYXRlQXZhaWxhYmxlQ2FyZHMoY2FyZHM6IFdyYXBwZWRDYXJkW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpO1xuXHRcdC8vIE9ubHkgY29sbGVjdCBjYXJkcyB3aGVuIGNvbnN1bWVycyBhcmUgY29ubmVjdGVkIHRvIHRoZSBjYXJkcyBjaGFubmVsXG5cdFx0aWYgKGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZS5oYXNDb2xsYWJvcmF0aW9uTWFuYWdlckNvbm5lY3RlZCgpKSB7XG5cdFx0XHRhd2FpdCB0aGlzLmNvbGxhYm9yYXRpb25NYW5hZ2VyLmNvbGxlY3RBdmFpbGFibGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRpZiAoY2FyZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRcdGNvbnN0IHBhcmVudEFwcElkID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRJZCgpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkLCB0aGlzLmdldFZpZXcoKS5nZXRJZCgpKTtcblx0XHRcdFx0Y29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIE1lc3NhZ2VzdHJpcCBPUC5cblx0ICovXG5cdF9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcIk1lc3NhZ2VTdHJpcFwiLCB7IC4uLmludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcIk1lc3NhZ2VTdHJpcFwiKSB9KTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdChvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIHVua25vd24gYXMgQ29udHJvbClcblx0XHRcdFx0Py5maW5kRWxlbWVudHModHJ1ZSwgKGVsZW06IENvbnRyb2wpID0+IGVsZW0uaXNBKFwic2FwLm0uTWVzc2FnZVN0cmlwXCIpKVxuXHRcdFx0XHQuZm9yRWFjaCgobWVzc2FnZVN0cmlwOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZVN0cmlwLnNldEJpbmRpbmdDb250ZXh0KFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhLFxuXHRcdFx0XHRcdFx0XCJpbnRlcm5hbFwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBJZiB0aGUgdmlldydzIGJpbmRpbmcgY29udGV4dCBhbHJlYWR5IGhhZCBtZXNzYWdlcyB0aGF0IHdlcmUgbm90IGNsZWFyZWQsIHdlIHdvdWxkIG5lZWQgdG8gcmUtZXZhbHVhdGUgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcC5cblx0XHRcdHRoaXMuX2ZuU2hvd09QTWVzc2FnZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IGEgbWVzc2FnZSBzdHJpcCBpZiBhIHJlZGlyZWN0aW9uIHRvIGEgbm9uLWRyYWZ0IGVsZW1lbnQgaGFzIGJlZW4gZG9uZS5cblx0ICogUmVtb3ZlIHRoZSBtZXNzYWdlIHN0cmlwIGluIGNhc2Ugd2UgbmF2aWdhdGUgdG8gYW5vdGhlciBvYmplY3QgcGFnZS5cblx0ICogQHBhcmFtIGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgRW50aXR5IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZVxuXHQgKi9cblx0ZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKGVudGl0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlKSB7XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlO1xuXHRcdH1cblxuXHRcdGlmIChlbnRpdHlOYW1lKSB7XG5cdFx0XHR0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiUkVST1VURURfTkFWSUdBVElPTl9UT19TQVZFRF9WRVJTSU9OXCIsIFtlbnRpdHlOYW1lXSksXG5cdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uLFxuXHRcdFx0XHR0YXJnZXQ6IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHRcdH0pO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzOiBib29sZWFuIH0gfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpOiB2b2lkID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb24gPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgY3R4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly8gc2V0dGluZyB0aGlzIG1vZGVsIGRhdGEgdG8gYmUgdXNlZCBmb3IgcmVjb21tZW5kYXRpb25zIGJpbmRpbmdcblx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwiL2N1cnJlbnRDdHh0XCIsIGN0eHQpO1xuXG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBkbyBub3QgcmVxdWVzdCByZWNvbW1lbmRhdGlvbnMgYWN0aW9uIGlmIHdlIGFyZSBpbiBEaXNwbGF5IG1vZGVcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0aWYgKGlzRWRpdGFibGUgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKFt7IGNvbnRleHQ6IG9CaW5kaW5nQ29udGV4dCB9XSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRzZXRGb2N1cygpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly9UaGUgZm9sbG93aW5nIGNvZGluZyBpcyBkb25lIHRvIG1lcmdlIGFuIG9wZW4gUEFUQ0ggYW5kIHRoZSBkcmFmdHByZXBhcmUvZHJhZnRhY3RpdmF0ZVxuXHRcdC8vcmVxdWVzdCBpbnRvIG9uZSAkYmF0Y2ggcmVxdWVzdFxuXHRcdC8vVG8gYWNoaWV2ZSB0aGlzIHRoZSAkYXV0byBxdWV1ZSBpcyBsb2NrZWQgYXQgdGhlIG1vdXNlZG93biBldmVudCAoYmVmb3JlIGZvY3Vzb3V0KSBpblxuXHRcdC8vb3JkZXIgdG8gd2FpdCBmb3IgdGhlIGRyYWZ0IHJlcXVlc3QgaXNzdWVkIGluIHRoZSBzYXZlIGJ1dHRvbnMgcHJlc3MgZXZlbnQgaGFuZGxlci5cblx0XHQvL1RoZSBxdWV1ZSBpcyByZWxlYXNlZCBhZ2FpbiBkdXJpbmcgbW91c2V1cCAoYmVmb3JlIHByZXNzKS5cblx0XHQvL1RoaXMgaXMgb25seSBwb3NzaWJsZSBvbiBub24gdG91Y2ggZGV2aWNlcyBiZWNhdXNlIG9uIHRvdWNoIGRldmljZXMgdGhlIGZvY3Vzb3V0IGFuZCBwcmVzc1xuXHRcdC8vZXZlbnRzIGFyZSBib3RoIGluaXRpYXRlZCBhdCB0b3VjaGVuZCBieSBzYXAubS5CdXR0b24uXG5cdFx0Ly9tb3VzZUhhbmRsZXJTZXQgaXMgdXNlZCB0byBlbnN1cmVzIHRoYXQgdGhlIGV2ZW50IGhhbmRsZXJzIGFyZSBhdHRhY2hlZCBvbmx5IG9uZSB0aW1lLlxuXHRcdC8vVGhlcmUgY2FuIGJlIG11bHRpcGxlIG9uUGFnZVJlYWR5IGUuZy4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlZGl0L2Rpc3BsYXkgbW9kZVxuXHRcdGlmICghdGhpcy5tZXJnZVBhdGNoRHJhZnQgJiYgIURldmljZS5zdXBwb3J0LnRvdWNoKSB7XG5cdFx0XHRjb25zdCBzYXZlQnV0dG9uID0gb1ZpZXcuYnlJZChcImZlOjpGb290ZXJCYXI6OlN0YW5kYXJkQWN0aW9uOjpTYXZlXCIpIGFzIEJ1dHRvbjtcblx0XHRcdGNvbnN0IGF1dG9RdWV1ZVVubG9jayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jay51bmxvY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHR9O1xuXG5cdFx0XHRzYXZlQnV0dG9uPy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZWRvd25cIiwgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jayA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkubG9jayhcIiRhdXRvXCIpO1xuXHRcdFx0XHRcdC8vd2hlbiB0aGUgbW91c2UgaXMgZHJhZ2dlZCBhd2F5IGZyb20gdGhlIHNhdmUgYnV0dG9uIHdoaWxlIHByZXNzZWQgdGhlbiB0aGVyZSB3aWxsIGJlIG5vXG5cdFx0XHRcdFx0Ly9tb3VzZXVwIGV2ZW50IG9uIHRoZSBzYXZlIGJ1dHRvbi4gVGhlcmVmb3JlLCB0aGUgdW5sb2NraW5nIGlzIGRvbmUgb24gXCJtb3VzZXVwXCIgYW5kIFwiYmx1clwiXG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1lcmdlUGF0Y2hEcmFmdCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpOiBPYmplY3RQYWdlTGF5b3V0IHtcblx0XHRyZXR1cm4gdGhpcy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0fVxuXG5cdGFzeW5jIF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiBQcm9taXNlPHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZURlc2NyaXB0aW9uID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZURlc2NyaXB0aW9uXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3QgZXh0cmFjdFBhdGhzID0gKGJpbmRpbmdJbmZvPzogeyBwYXJ0cz86IHsgcGF0aD86IHN0cmluZzsgbW9kZWw/OiBzdHJpbmcgfVtdIH0pOiBzdHJpbmdbXSA9PlxuXHRcdFx0QXJyYXkuZnJvbShcblx0XHRcdFx0bmV3IFNldChcblx0XHRcdFx0XHQoYmluZGluZ0luZm8/LnBhcnRzIHx8IFtdKVxuXHRcdFx0XHRcdFx0LmZpbHRlcigocGFydCkgPT4gIXBhcnQubW9kZWwpXG5cdFx0XHRcdFx0XHQubWFwKChwYXJ0KSA9PiBwYXJ0LnBhdGggfHwgXCJcIilcblx0XHRcdFx0XHRcdC5maWx0ZXIoQm9vbGVhbilcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRjb25zdCBzdWJ0aXRsZVBhdGhzID0gZXh0cmFjdFBhdGhzKG9PYmplY3RQYWdlU3VidGl0bGU/LmdldEJpbmRpbmdJbmZvKFwidmFsdWVcIikpO1xuXHRcdGNvbnN0IGRlc2NyaXB0aW9uUGF0aHMgPSBleHRyYWN0UGF0aHMob09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSk7XG5cdFx0Y29uc3QgcGF0aHNUb1Jlc29sdmUgPSBbLi4uc3VidGl0bGVQYXRocywgLi4uZGVzY3JpcHRpb25QYXRoc107XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSBhcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgZm5DbGVhckNhY2hlVGl0bGUgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGUob09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpIGFzIHN0cmluZyk7XG5cdFx0fTtcblx0XHRpZiAoKG9PYmplY3RQYWdlRGVzY3JpcHRpb24gfHwgb09iamVjdFBhZ2VTdWJ0aXRsZSkgJiYgIXRoaXMuaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCkge1xuXHRcdFx0b09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0QmluZGluZyhcInZhbHVlXCIpPy5hdHRhY2hDaGFuZ2UoZm5DbGVhckNhY2hlVGl0bGUsIHRoaXMpO1xuXHRcdFx0b09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0QmluZGluZyhcInZhbHVlXCIpPy5hdHRhY2hDaGFuZ2UoZm5DbGVhckNhY2hlVGl0bGUsIHRoaXMpO1xuXHRcdFx0dGhpcy5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBidWlsZCA9ICgpOiB7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSA9PiAoe1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgPz8gXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRWYWx1ZSgpID8/IFwiXCIsXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiLFxuXHRcdFx0ZGVzY3JpcHRpb246IG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldFZhbHVlKCkgPz8gXCJcIlxuXHRcdH0pO1xuXHRcdC8vaWYgbm8gY29udGV4dCBvciBub3RoaW5nIHRvIHJlc29sdmUsIGRpcmVjdCByZXR1cm5cblx0XHRpZiAoIW9PYmplY3RQYWdlQ29udGV4dCB8fCBwYXRoc1RvUmVzb2x2ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYnVpbGQoKSk7XG5cdFx0fVxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHBhdGhzVG9SZXNvbHZlLm1hcChhc3luYyAocCkgPT4gKG9PYmplY3RQYWdlQ29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkucmVxdWVzdE9iamVjdChwKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpKSk7XG5cdFx0cmV0dXJuIGJ1aWxkKCk7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gKG9FeGVjdXRpb24uZ2V0U291cmNlKCkgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uKS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkhKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBpc0Vycm9yTWVzc2FnZSA9IG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VWYWxpZGF0aW9uID0gaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0XHQ/IGlzRXJyb3JNZXNzYWdlXG5cdFx0XHRcdFx0OiBpc0Vycm9yTWVzc2FnZSAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaW5jbHVkZXMoc1ZpZXdJZCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZVZhbGlkYXRpb24pIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcigpOiB2b2lkIHtcblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHBhcmFtIHVzZVNhdmVBbmRMZWF2ZSBJbmRpY2F0ZXMgaWYgdGhlIHNhdmUgaXMgdHJpZ2dlcmVkIGZyb20gYSBzYXZlIGFuZCBsZWF2ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sIHVzZVNhdmVBbmRMZWF2ZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0bGV0IG1lc3NhZ2VQb3BvdmVyRXJyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXG5cdFx0XHRcdGNvbnN0IGNvbnRleHRLZXlzID0gT2JqZWN0LmtleXMoKGNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0T2JqZWN0KCkgfHwge30pO1xuXHRcdFx0XHRpZiAoY29udGV4dEtleXMuZmlsdGVyKChrZXkpID0+ICFrZXkuc3RhcnRzV2l0aChcIkAkdWk1LlwiKSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3dcblx0XHRcdFx0XHRcdFx0LmNyZWF0ZURvY3VtZW50KHRhYmxlQmluZGluZywge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvblJvdzogY3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6XG5cdFx0XHRcdFx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0QWdncmVnYXRpb24oXCJjcmVhdGlvbk1vZGVcIikgYXMgVGFibGVDcmVhdGlvbk9wdGlvbnMgfCB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcdCk/LmdldFByb3BlcnR5KFwiY3JlYXRlQXRFbmRcIikgPT09IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0c2tpcFNpZGVFZmZlY3RzOiB0cnVlIC8vIHRoZSBza2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXksIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4gdGFibGVCaW5kaW5nKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgaXNTa2lwQmluZGluZ1RvVmlldyA9IHNraXBCaW5kaW5nVG9WaWV3IGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQ7XG5cdFx0XHRjb25zdCBpc1N0YW5kYXJkU2F2ZSA9XG5cdFx0XHRcdGlzU2tpcEJpbmRpbmdUb1ZpZXcgJiYgdHlwZW9mIGlzU2tpcEJpbmRpbmdUb1ZpZXcgPT0gXCJvYmplY3RcIiAmJiBpc1NraXBCaW5kaW5nVG9WaWV3LmdldFNvdXJjZSgpLmdldENvbW1hbmQoKSA9PT0gXCJTYXZlXCI7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRcdGJpbmRpbmdzOiBiaW5kaW5ncyBhcyB1bmtub3duIGFzIE9EYXRhTGlzdEJpbmRpbmdbXSxcblx0XHRcdFx0XHRtZXJnZVBhdGNoRHJhZnQ6IHRoaXMubWVyZ2VQYXRjaERyYWZ0LFxuXHRcdFx0XHRcdHNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGlzU3RhbmRhcmRTYXZlLFxuXHRcdFx0XHRcdHVzZVNhdmVBbmRMZWF2ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdGlmIChlcnJvciAhPT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VQb3BvdmVyRXJyID0gKGVycm9yIGFzIHN0cmluZykgPz8gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQobW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG1vZGVsKTtcblx0XHRcdH1cblx0XHRcdGlmIChtZXNzYWdlUG9wb3ZlckVyciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChtZXNzYWdlUG9wb3ZlckVyci5sZW5ndGgpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IobWVzc2FnZVBvcG92ZXJFcnIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbikgYXMgQnV0dG9uIHwgdW5kZWZpbmVkOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpPy5nZXRJZCgpO1xuXHRcdGxldCBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIGZhbHNlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImRpc2NhcmRDb25maXJtZWRcIikge1xuXHRcdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZ2V0IGNvbGxhYm9yYXRpdmUgdXNlcnNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fFxuXHRcdFx0KCF0aGlzLmdldFN0aWNreUVkaXRNb2RlKCkgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZFN1bW1hcml6ZUJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhZ2VUaXRsZSA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlVGl0bGU/LmdldEFjdGlvbnMoKTtcblx0XHRsZXQgc3VtbWFyaXplQnV0dG9uOiBCdXR0b24gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBhY3Rpb24uZ2V0Q29udGVudCgpIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGJ1dHRvbiAmJiBidXR0b24uZ2V0SWQoKS5lbmRzV2l0aChcIjo6U3VtbWFyaXplOjpidXR0b25cIikpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24gPSBidXR0b247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3VtbWFyaXplQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHRyaWdnZXJzIHRoZSBzbWFydCBzdW1tYXJ5IGFjdGlvbiBvbiB0aGUgT2JqZWN0IFBhZ2UgaWYgcmVxdWlyZWQuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhhdCBhIHNtYXJ0IHN1bW1hcnkgc2hvdWxkIGJlIHBlcmZvcm1lZCBmb3IgdGhlIGN1cnJlbnQgT2JqZWN0IFBhZ2UgbGV2ZWwuXG5cdCAqIFRoZSBsZXZlbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBPYmplY3QgUGFnZSBzaG91bGQgYmUgc3VtbWFyaXplZCwgd2hpY2ggaXMgcmVsZXZhbnQgaW4gRmxleGlibGUgQ29sdW1uIExheW91dCAoRkNMKSBzY2VuYXJpb3Mgd2hlcmVcblx0ICogbXVsdGlwbGUgT2JqZWN0IFBhZ2VzIG1heSBiZSBkaXNwbGF5ZWQgc2ltdWx0YW5lb3VzbHkuXG5cdCAqIElmIG5vIGxldmVsIGlzIHByb3ZpZGVkIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHRoZSBtZXRob2QgZGVmYXVsdHMgdGhlIGxldmVsIHRvIDEuXG5cdCAqIElmIHRoZSBzdW1tYXJ5IGFjdGlvbiBpcyBhbGxvd2VkIGFuZCB0aGUgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUsIGl0IGxvY2F0ZXMgdGhlIHN1bW1hcml6ZSBidXR0b24gYW5kIHRyaWdnZXJzIGl0cyBwcmVzcyBldmVudC5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoZSBzdW1tYXJ5IGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgbmF2aWdhdGlvbiBhbmQgbG9ncyBlcnJvcnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldCBvciB0aGUgYnV0dG9uIGlzIHVuYXZhaWxhYmxlLlxuXHQgKiBBbGwgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0IGFuZCBsb2dnZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGFwcENvbXBvbmVudFxuXHRcdFx0Py5nZXRTdGFydHVwUGFyYW1ldGVycygpXG5cdFx0XHQ/LnRoZW4oKHN0YXJ0dXBQYXJhbXM6IFN0YXJ0dXBQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb24gfHwgIXN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnN0YXJ0c1dpdGgoXCJzdW1tYXJ5XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IE9QIGJ5IGNoZWNraW5nIHRoZSBsZXZlbCBwcm92aWRlZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0XHRjb25zdCBwcmVmZXJyZWRBY3Rpb25MZXZlbCA9XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0gPT09IFwic3VtbWFyeVwiID8gMSA6IHBhcnNlSW50KHN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnNwbGl0KFwiLVwiKVsxXSwgMTApO1xuXHRcdFx0XHRpZiAoaXNOYU4ocHJlZmVycmVkQWN0aW9uTGV2ZWwpIHx8IHZpZXdMZXZlbCAhPT0gcHJlZmVycmVkQWN0aW9uTGV2ZWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBzdW1tYXJ5IGFjdGlvbiBzaGFsbCBiZSBleGVjdXRlZCBub3cgKGl0IG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIGJ5IGEgaGlnaGVyIGxldmVsIE9QKVxuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldFByZWZlcnJlZEFjdGlvblN0YXR1cygpID09PSBQcmVmZXJyZWRBY3Rpb25TdGF0dXMuQ2FuUGVyZm9ybSkge1xuXHRcdFx0XHRcdGFwcENvbXBvbmVudC5zZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoUHJlZmVycmVkQWN0aW9uU3RhdHVzLkFscmVhZHlQZXJmb3JtZWQpOyAvLyB0byBwcmV2ZW50IG90aGVyIE9QcyBvbiBoaWdoZXIgbGV2ZWxzIHRvIGV4ZWN1dGUgdGhlIHN1bW1hcnkgYWdhaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZVxuXHRcdFx0XHRjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRcdFx0aWYgKCFlbnZpcm9ubWVudFNlcnZpY2U/LmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNtYXJ0U3VtbWFyaXplKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBTdW1tYXJ5IGJ1dHRvblxuXHRcdFx0XHRjb25zdCBzdW1tYXJpemVCdXR0b24gPSB0aGlzLl9maW5kU3VtbWFyaXplQnV0dG9uKCk7XG5cblx0XHRcdFx0aWYgKHN1bW1hcml6ZUJ1dHRvbiAmJiBzdW1tYXJpemVCdXR0b24uZ2V0VmlzaWJsZSgpICYmIHN1bW1hcml6ZUJ1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24uZmlyZVByZXNzKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XHRcdFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIHRoZSBTdW1tYXJpemUgYnV0dG9uIGlzIGVpdGhlciBub3QgdmlzaWJsZSBvciBub3QgZW5hYmxlZCBvciBub3QgZm91bmQuXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyBzdGFydHVwIHBhcmFtZXRlcnMgb3IgdHJpZ2dlcmluZyBzbWFydCBzdW1tYXJ5OlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0b25UYWJsZUJpbmRpbmdVcGRhdGVkKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHRhc3luYyBvbkNhbGxBY3Rpb24oXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXG5cdFx0XHQvLyBXYWl0IGZvciBWSCB2YWx1ZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgdGhlIGFjdGlvblxuXHRcdFx0YXdhaXQgb0NvbnRyb2xsZXIuZWRpdEZsb3cuc3luY1Rhc2soKTtcblxuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbigocmVzKSA9PiB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0XHRcdHJldHVybiByZXM7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1NvdXJjZTogQ29udHJvbCxcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+LFxuXHRcdFx0c0NvbnRyb2xDb25maWc6IHN0cmluZyxcblx0XHRcdHNDb2xsZWN0aW9uUGF0aDogc3RyaW5nXG5cdFx0KTogdm9pZCB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSEsXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCksXG5cdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiB1bmtub3duKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBDaGVjayBpZiBpbXBsaWNpdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBuZWVkZWRcblx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21EYXRhID0gb1NvdXJjZS5nZXRDdXN0b21EYXRhKCkuZmluZCgoZGF0YSkgPT4gZGF0YS5nZXRLZXkoKSA9PT0gXCJWYWx1ZVByb3BlcnR5UGF0aFwiKTtcblx0XHRcdFx0aWYgKGN1c3RvbURhdGEpIHtcblx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0NvbnRyb2xsZXIuX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRcdFx0XHRcdGN1c3RvbURhdGEuZ2V0VmFsdWUoKSxcblx0XHRcdFx0XHRcdG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdHNPdXRib3VuZFRhcmdldDogc3RyaW5nLFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0NyZWF0ZVBhdGg6IHN0cmluZ1xuXHRcdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSkgJiZcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMjAwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogc3RyaW5nIHwgb2JqZWN0KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIHRoZSB0YXJnZXQgSUQgYmFzZWQgb24gaW5wdXQgdHlwZVxuXHRcdFx0bGV0IHRhcmdldElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAodHlwZW9mIG9EZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0dGFyZ2V0SWQgPSBvRGV0YWlsQ29uZmlnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gUHJpb3JpdHk6IHN1YlNlY3Rpb25JZCA+IHNlY3Rpb25JZFxuXHRcdFx0XHR0YXJnZXRJZCA9IG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkID8/IG9EZXRhaWxDb25maWcuc2VjdGlvbklkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGFyZ2V0SWQpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuZ2V0RXh0ZW5zaW9uQVBJKCkubmF2aWdhdGVUb1N1YlNlY3Rpb24odGFyZ2V0SWQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlHQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBZ0I7RUFDbkQsTUFBTUUscUJBQXFCLEdBQUdELFNBQVMsQ0FBQ0UseUJBQXlCOztFQUVqRTtBQUNBO0FBQ0E7RUFGQSxJQUlNQyxvQkFBb0IsSUFBQUMsSUFBQSxHQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVBQUFDLEtBQUEsR0FJakVDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLEVBQUFDLEtBQUEsR0FHM0JGLGNBQWMsQ0FBQ0csS0FBSyxDQUFDQyxRQUFRLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHOUNOLGNBQWMsQ0FBQ08sZUFBZSxDQUFDSCxRQUFRLENBQUNJLHVCQUF1QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdqRVQsY0FBYyxDQUFDVSxTQUFTLENBQUNOLFFBQVEsQ0FBQ08saUJBQWlCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3JEWixjQUFjLENBQUNhLGNBQWMsQ0FBQ1QsUUFBUSxDQUFDVSxzQkFB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
1805
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwib25UYWJsZUJpbmRpbmdVcGRhdGVkIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwicmVzIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImNhdGNoIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvU291cmNlIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0IiwiY3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzIiwiZ2V0VmFsdWUiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRQcm9wZXJ0eSIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsInRhcmdldElkIiwic3ViU2VjdGlvbklkIiwic2VjdGlvbklkIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0T3duZXJDb21wb25lbnQiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbiIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJiaW5kIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiZm9yRWFjaCIsInN1YlNlY3Rpb24iLCJieUlkIiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbiIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZGlzY29ubmVjdCIsImRldGFjaENoYW5nZSIsImdldEFwcENvbXBvbmVudCIsImlzU3VzcGVuZGVkIiwibWVzc2FnZXMiLCJfc2hvd01lc3NhZ2VzIiwib1RhYmxlIiwiZ2V0Um93QmluZGluZyIsImNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUiLCJzdWJTZWN0aW9ucyIsImNoYW5nZUNsYXNzRm9yVGFibGVzIiwidmlzaWJsZVN1YlNlY3Rpb24iLCJibG9ja3MiLCJnZXRCbG9ja3MiLCJnZXRNb3JlQmxvY2tzIiwic2VhcmNoVGFibGVJbkJsb2NrIiwidGFibGVUeXBlIiwiaXNBIiwiZ2V0VHlwZSIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJyb3dDb3VudE1vZGUiLCJhZGRTdHlsZUNsYXNzIiwiZGV0YWNoRXZlbnQiLCJnZXRWaXNpYmxlIiwiYmxvY2siLCJnZXRUYWJsZUFQSSIsIm1haW5Db250ZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJtYWluQ29udGVudFRhYmxlQVBJIiwic2lkZUNvbnRlbnQiLCJnZXRTaWRlQ29udGVudCIsInNpZGVDb250ZW50VGFibGVBUEkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwiYXBwbHkiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwic2VjdGlvbiIsImdldFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJfZmluZFRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJyZWFzb24iLCJOYXZpZ2F0aW9uUmVhc29uIiwiRWRpdEZsb3dBY3Rpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic29tZSIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJpdGVtIiwiZ2V0Q3JlYXRpb25Sb3ciLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwiZm5PUFJlbmRlcmluZ0xheW91dCIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJhZGRFdmVudERlbGVnYXRlIiwiX2luaXRpYWxpemVQYWdpbmF0aW9uIiwibGlzdEJpbmRpbmciLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwiZGlzY29ubmVjdFN1YlNlY3Rpb25WaXNpYmlsaXR5T2JzZXJ2ZXJzIiwid2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyIsIndhaXRGb3JBbGxTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmdzUmVzb2x2ZWQiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJlbmFibGVBbmltYXRpb24iLCJvYmplY3RQYWdlTGF5b3V0Iiwic2V0VmlzaWJsZSIsInN1YlNlY3Rpb25zSW5mbyIsImZlIiwib3RoZXJzIiwiZGlzY29ubmVjdFZpc2liaWxpdHlPYnNlcnZlciIsImdldEZpcnN0RWRpdGFibGVJbnB1dCIsImRvbUVkaXRhYmxlRWxlbWVudCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJVSTVFbGVtZW50IiwiY2xvc2VzdFRvIiwiZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib2JqZWN0UGFnZSIsImZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJnZXRDb250ZW50IiwiZ2V0RW5hYmxlZCIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiRWRpdGFibGVIZWFkZXIiLCJmaXJzdFZpc2liaWxpdHlCaW5kaW5nIiwiX2dldGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nIiwiaVNlY3Rpb24iLCJvU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uIiwic3ViQmxvY2siLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiYmxvY2tDb250cm9sIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImVtcHR5RmllbGQiLCJnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZCIsImZpZWxkcyIsImdldFJlcXVpcmVkIiwiaXNFbXB0eSIsImdldE11bHRpVmFsdWVGaWVsZCIsImdldEl0ZW1zIiwidmFsdWUiLCJkZWJ1ZyIsImZyb21UYWJOYXZpZ2F0aW9uIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImdldEVuYWJsZVN1Z2dlc3Rpb25zIiwiaXNCb3VuZCIsInNldEVuYWJsZVN1Z2dlc3Rpb25zIiwiZm9jdXMiLCJhbGxzdWJTZWN0aW9ucyIsImN1cnJlbnRNb2RlbCIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFuZGxlU3ViU2VjdGlvbkNyZWF0ZWQiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsIm9CaW5kaW5nIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJnZXRDb250ZXh0IiwiZm5IYW5kbGVDaGFuZ2UiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImNvbXB1dGVNb2RlbHNGb3JFZGl0TW9kZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIm9FcnJvciIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwicmVjb21tZW5kYXRpb25zIiwiY2xlYXJSZWNvbW1lbmRhdGlvbnMiLCJkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UiLCJyZWRpcmVjdGVkVG9Ob25EcmFmdCIsIl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCIsImFwcGx5QXBwU3RhdGUiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0Rm9yIiwicmVjb25uZWN0U3ViU2VjdGlvblZpc2liaWxpdHlPYnNlcnZlcnMiLCJzdWJTZWN0aW9uSW5mbyIsIndhaXRGb3JBcHBseUFwcHN0YXRlIiwiYWxsIiwib2JzZXJ2ZUN1cnJlbnRTZWN0aW9uIiwic3Vic2VjdGlvbiIsImZpcmVFdmVudCIsImNhcmRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiaGFzQ29sbGFib3JhdGlvbk1hbmFnZXJDb25uZWN0ZWQiLCJjb2xsYWJvcmF0aW9uTWFuYWdlciIsImNvbGxlY3RBdmFpbGFibGVDYXJkcyIsImNhcmRPYmplY3QiLCJ1cGRhdGVDYXJkcyIsInBhcmVudEFwcElkIiwiYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwic2hhcmVBdmFpbGFibGVDYXJkcyIsImZpbmRFbGVtZW50cyIsImVsZW0iLCJtZXNzYWdlU3RyaXAiLCJlbnRpdHlOYW1lIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJjb2xsYWJvcmF0aW9uTWVzc2FnZSIsIk1lc3NhZ2UiLCJnZXRUZXh0IiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvT2JqZWN0UGFnZURlc2NyaXB0aW9uIiwiZXh0cmFjdFBhdGhzIiwiYmluZGluZ0luZm8iLCJmcm9tIiwiU2V0IiwicGFydHMiLCJwYXJ0IiwibW9kZWwiLCJwYXRoIiwiQm9vbGVhbiIsInN1YnRpdGxlUGF0aHMiLCJnZXRCaW5kaW5nSW5mbyIsImRlc2NyaXB0aW9uUGF0aHMiLCJwYXRoc1RvUmVzb2x2ZSIsImFwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImZuQ2xlYXJDYWNoZVRpdGxlIiwiaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvT2JqZWN0UGFnZUNvbnRleHQiLCJidWlsZCIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJwIiwicmVxdWVzdE9iamVjdCIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwib01lc3NhZ2UiLCJpc0Vycm9yTWVzc2FnZSIsInZhbGlkYXRpb24iLCJtZXNzYWdlVmFsaWRhdGlvbiIsImluY2x1ZGVzIiwiaXNFZGl0TW9kZSIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsIm9JdGVtQmluZGluZyIsImdldExlbmd0aCIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJlZGl0RG9jdW1lbnQiLCJmaW5hbGx5IiwicHJvcGVydHlQYXRoIiwiTG9jYWxQcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJnZXRBY3RpdmVFbGVtZW50IiwiYnlQYXNzU2lkZUVmZmVjdHMiLCJpc1RyYW5zaWVudCIsImNyZWF0ZWQiLCJob2xkTWVzc2FnZXNGb3JDb250cm9sIiwicmV0IiwiZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24iLCJzaG93TWVzc2FnZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiY3JlYXRlUm9vdENvbnRleHQiLCJEcmFmdCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJpc0Nvbm5lY3RlZCIsInNraXBCaW5kaW5nVG9WaWV3IiwidXNlU2F2ZUFuZExlYXZlIiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwibWVzc2FnZVBvcG92ZXJFcnIiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZGlhbG9nQWN0aW9uIiwiQ29sbGFib3JhdGlvbkRpc2NhcmQiLCJnZXRVc2VyQWN0aW9uIiwiZXJyIiwiY3JlYXRpb25Sb3ciLCJ0YWJsZUJpbmRpbmciLCJjb250ZXh0S2V5cyIsInN0YXJ0c1dpdGgiLCJjcmVhdGVEb2N1bWVudCIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZUF0RW5kIiwiZ2V0QWdncmVnYXRpb24iLCJza2lwU2lkZUVmZmVjdHMiLCJpc1NraXBCaW5kaW5nVG9WaWV3IiwiaXNTdGFuZGFyZFNhdmUiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwibGFzdEZvY3VzZWRDb250cm9sSWQiLCJzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImFmdGVyQ2FuY2VsIiwicHJvbWlzZVJlc3VsdCIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsIml0ZW0xIiwib0VsZW1lbnQiLCJjaGFydENvbnRyb2wiLCJnZXRDaGFydENvbnRyb2wiLCJvU3ViRWxlbWVudCIsIl9nZXRBbGxCbG9ja3MiLCJfZmluZENoYXJ0cyIsImFDaGFydHMiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwicmVwbGFjZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsImVudGl0eVNldCIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9WaWV3RGF0YSIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwic0tleSIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsImJpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJmbkdldExpbmtzIiwiZm5PbkVycm9yIiwiZm5TZXRMaW5rRW5hYmxlbWVudCIsImlkIiwiYVN1cHBvcnRlZExpbmtzIiwic0xpbmtJZCIsInN1cHBvcnRlZCIsIm9TdWJEYXRhUG9pbnRzIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rIiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyIsIl9maW5kU3VtbWFyaXplQnV0dG9uIiwib2JqZWN0UGFnZVRpdGxlIiwic3VtbWFyaXplQnV0dG9uIiwiYnV0dG9uIiwiZW5kc1dpdGgiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbXMiLCJwcmVmZXJyZWRBY3Rpb24iLCJwcmVmZXJyZWRBY3Rpb25MZXZlbCIsInBhcnNlSW50Iiwic3BsaXQiLCJpc05hTiIsImdldFByZWZlcnJlZEFjdGlvblN0YXR1cyIsIkNhblBlcmZvcm0iLCJzZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMiLCJBbHJlYWR5UGVyZm9ybWVkIiwiZW52aXJvbm1lbnRTZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJTbWFydFN1bW1hcml6ZSIsImZpcmVQcmVzcyIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0LCBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB7IHR5cGUgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9DaGFydFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsbEJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9FYXN5RmlsbEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU3VtbWFyaXphdGlvbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9TdW1tYXJpemF0aW9uQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL3NlY3Rpb24vU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQ3JlYXRpb25PcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQ3JlYXRpb25PcHRpb25zXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFNlYXJjaEZpZWxkIGZyb20gXCJzYXAvbS9TZWFyY2hGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb21wb3NpdGVCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQ29tcG9zaXRlQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIExpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aW9uRHJhZnQgZnJvbSBcIi4vY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRHJhZnRcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuZXhwb3J0IHR5cGUgQmluZGluZ1BhcmFtcyA9IHtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5jb25zdCBQcmVmZXJyZWRBY3Rpb25TdGF0dXMgPSBGRUxpYnJhcnkuUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZTtcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogRkVWaWV3O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihDb2xsYWJvcmF0aW9uTWFuYWdlci5vdmVycmlkZShDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlKSlcblx0Y29sbGFib3JhdGlvbk1hbmFnZXIhOiBDb2xsYWJvcmF0aW9uTWFuYWdlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0TmF2aWdhdGlvbk1vZGU6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSgpO1xuXHRcdFx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGUgPyBcImV4cGxhY2VcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbiE6IE1lc3NhZ2VCdXR0b247XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgd2FpdEZvclZpc2liaWxpdHlCaW5kaW5ncyE6IFByb21pc2U8dW5rbm93bj5bXTtcblxuXHRwcml2YXRlIHN1YlNlY3Rpb25zPzogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfTtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9LCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXG5cdFx0XHRcInJlbGF0ZWRBcHBzXCIsXG5cdFx0XHR7XG5cdFx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0XHRpdGVtczogbnVsbFxuXHRcdFx0fSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKChzdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRcdHN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKSBhcyBNZXNzYWdlQnV0dG9uO1xuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmcgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuYmluZExpc3QoXCIvXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdEVuYWJsZWRcIiwgdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cblx0XHR0aGlzLl9oYW5kbGVTbWFydFN1bW1hcnlTdGFydHVwQWN0aW9uKCk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uZGV0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgYXBwIGlzIHN1c3BlbmRlZCwgd2UgZG8gbm90IHNob3cgdGhlIG1lc3NhZ2VzICh0aGUgTWVzc2FnZU1vZGVsIGNvbnRhaW5zIG1lc3NhZ2VzIGZyb20gdGhlIGFjdGl2ZSBhcHApLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nPy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuX3Nob3dNZXNzYWdlcyhtZXNzYWdlcywgXCJCYWNrZW5kXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBUYWJsZSk6IE9EYXRhTGlzdEJpbmRpbmcge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgdG8gZXZlcnkgdmlzaWJsZSBzdWJzZWN0aW9uIHRoYXQgY29udGFpbnMgb25seSBhIHNpbmdsZSBHcmlkVGFibGUgb3IgVHJlZVRhYmxlLlxuXHQgKiBUaGlzIG1ha2VzIHRoZSB0YWJsZSBmaWxsIHRoZSBmdWxsIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSB0YWJsZSBpdHNlbGYgcmF0aGVyIHRoYW4gb24gdGhlIHBhZ2UuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIHZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLnZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi52aXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKGJsb2Nrcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAodGFibGUuZ2V0VHlwZSgpIGFzIFRhYmxlVHlwZUJhc2UpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy5UYWJsZVwiKSA/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZVR5cGUgJiZcblx0XHRcdFx0XHQodGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikgfHwgdGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLlRyZWVUYWJsZVR5cGVcIikpICYmXG5cdFx0XHRcdFx0dGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wucm93Q291bnRNb2RlID09PSBcIkF1dG9cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdFx0dmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0XHR2aXNpYmxlU3ViU2VjdGlvbi5kZXRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBzdWJTZWN0aW9ucykge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdHN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgc3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZ2V0VGFibGVBUEkgPSAoY29udHJvbDogQ29udHJvbCk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MuVGFibGVcIikpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRyb2wgYXMgVGFibGVBUEk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRjb25zdCBtYWluQ29udGVudCA9IChjb250cm9sIGFzIER5bmFtaWNTaWRlQ29udGVudCkuZ2V0TWFpbkNvbnRlbnQoKVswXTtcblx0XHRcdFx0Y29uc3QgbWFpbkNvbnRlbnRUYWJsZUFQSSA9IGdldFRhYmxlQVBJKG1haW5Db250ZW50KTtcblx0XHRcdFx0aWYgKG1haW5Db250ZW50VGFibGVBUEkpIHtcblx0XHRcdFx0XHR0YWJsZUFQSSA9IG1haW5Db250ZW50VGFibGVBUEk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUNvbnRlbnQgPSAoY29udHJvbCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldFNpZGVDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3Qgc2lkZUNvbnRlbnRUYWJsZUFQSSA9IGdldFRhYmxlQVBJKHNpZGVDb250ZW50KTtcblx0XHRcdFx0XHRpZiAoc2lkZUNvbnRlbnRUYWJsZUFQSSkge1xuXHRcdFx0XHRcdFx0dGFibGVBUEkgPSBzaWRlQ29udGVudFRhYmxlQVBJO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGFibGVBUEkgPSBnZXRUYWJsZUFQSShjb250cm9sKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcuZ2V0Vmlld0RhdGEoKT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGxldCBzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRpZiAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRVc2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGl0ZW0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgeyBpc0ZpcnN0UmVuZGVyaW5nPzogKCkgPT4gYm9vbGVhbiB9KS5pc0ZpcnN0UmVuZGVyaW5nPy4oKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdGNvbnN0IGZuT1BSZW5kZXJpbmdMYXlvdXQgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5lZGl0YWJsZUhlYWRlckNvbnRlbnQpIHtcblx0XHRcdFx0XHRmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKGZuT1BSZW5kZXJpbmdMYXlvdXQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0dGhpcy5faW5pdGlhbGl6ZVBhZ2luYXRpb24ob0NvbnRleHQsIG9JbnRlcm5hbE1vZGVsLCBtUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcpO1xuXG5cdFx0dGhpcy5fZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKG9PYmplY3RQYWdlKTtcblxuXHRcdHRoaXMuc3ViU2VjdGlvbnMgPSB0aGlzLmRpc2Nvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhvT2JqZWN0UGFnZSk7XG5cdFx0dGhpcy53YWl0Rm9yVmlzaWJpbGl0eUJpbmRpbmdzID0gdGhpcy53YWl0Rm9yQWxsU3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nc1Jlc29sdmVkKCk7XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IG9Db250YWluZXI6IENvbnRyb2wgfSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuZW5hYmxlQW5pbWF0aW9uKCk7XG5cdFx0XHRcdChvTmF2Q29udGFpbmVyIGFzIHVua25vd24gYXMgeyBzaG93UGxhY2Vob2xkZXI6IEZ1bmN0aW9uIH0pLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3QgdGhlIHZpc2liaWxpdHkgb2JzZXJ2ZXJzIG9mIGFsbCBGRSBzdWJzZWN0aW9ucy5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2VMYXlvdXRcblx0ICogQHJldHVybnMgVGhlIHN1YnNlY3Rpb25zIGluZm9ybWF0aW9uIG9yIHVuZGVmaW5lZCBpZiBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWRcblx0ICovXG5cdGRpc2Nvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhcblx0XHRvYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0XG5cdCk6IHsgZmU6IFN1YlNlY3Rpb25bXTsgb3RoZXJzOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIH0gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSkge1xuXHRcdFx0b2JqZWN0UGFnZUxheW91dC5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zSW5mbzoge1xuXHRcdFx0XHRmZTogU3ViU2VjdGlvbltdO1xuXHRcdFx0XHRvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0XHR9ID0geyBmZTogW10sIG90aGVyczogW10gfTtcblx0XHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAoc3ViU2VjdGlvbi5pc0E8U3ViU2VjdGlvbj4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLnNlY3Rpb24uU3ViU2VjdGlvblwiKSkge1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25zSW5mby5mZS5wdXNoKHN1YlNlY3Rpb24pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25zSW5mby5vdGhlcnMucHVzaChzdWJTZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRzdWJTZWN0aW9uc0luZm8uZmUuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4gc3ViU2VjdGlvbi5kaXNjb25uZWN0VmlzaWJpbGl0eU9ic2VydmVyKCkpO1xuXHRcdFx0cmV0dXJuIHN1YlNlY3Rpb25zSW5mbztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxvYWRpbmcgc3RyYXRlZ3kgZm9yIHRoZSBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgVGhlIGxvYWRpbmcgc3RyYXRlZ3kgZm9yIHRoZSBvYmplY3QgcGFnZS5cblx0ICovXG5cdGdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5kYXRhKFwiZGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uXCIpID09PSBcInRydWVcIjtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZCBpbiB0aGUgaGVhZGVyXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIChvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFjdGlvbnMuZmluZChmdW5jdGlvbiAoYWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0Q29udGVudCgpPy5nZXRWaXNpYmxlKCkgPz8gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTaGFyZUFQST4oXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxFYXN5RmlsbEJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLkVhc3lGaWxsQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxDb2xsYWJvcmF0aW9uRHJhZnQ+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbXBvbmVudHMuQ29sbGFib3JhdGlvbkRyYWZ0XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlIGFuZCBDb2xsYWJvcmF0aW9uRHJhZnQgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2FibGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhY3Rpb24uaXNBPEludmlzaWJsZVRleHQ+KFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhYWN0aW9uLmlzQTxUb29sYmFyU3BhY2VyPihcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKSAmJiAoYWN0aW9uIGFzIEJ1dHRvbikuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSBiaW5kaW5ncyBvZiBibG9ja3MgaW4gT2JqZWN0IFBhZ2UgTGF5b3V0IGJhc2VkIG9uIHRoZSBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDM7IC8vIDMgc2VjdGlvbnMvc3Vic2VjdGlvbnMgYXJlIGxvYWRlZCBpbml0aWFsbHksIHRoZSBvdGhlcnMgYXJlIGxvYWRlZCBsYXppbHlcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Y29uc3QgZmlyc3RWaXNpYmlsaXR5QmluZGluZyA9IHRoaXMuX2dldGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nKCk7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXG5cdFx0XHRcdGNvbnN0IGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0RGlzYWJsZU9iamVjdFBhZ2VSZXF1ZXN0T3B0aW1pemF0aW9uKCkgJiZcblx0XHRcdFx0XHRcdChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKSB8fFxuXHRcdFx0XHRcdCghdGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSAmJlxuXHRcdFx0XHRcdFx0KCghYlVzZUljb25UYWJCYXIgJiYgZmlyc3RWaXNpYmlsaXR5QmluZGluZykgfHwgLy9pZiBzb21lIHN1YnNlY3Rpb25zIGhhdmUgdmlzaWJpbGl0eSBiaW5kaW5nIGFuZCB3ZSBhcmUgbm90IGluIEljb25UYWJCYXIgbW9kZVxuXHRcdFx0XHRcdFx0XHQoIWJVc2VJY29uVGFiQmFyICYmICFmaXJzdFZpc2liaWxpdHlCaW5kaW5nICYmIGlTa2lwIDwgMSkgfHwgLy8gaWYgbm8gc3Vic2VjdGlvbiBoYXMgdmlzaWJpbGl0eSBiaW5kaW5nIGFuZCB3ZSBhcmUgbm90IGluIEljb25UYWJCYXIgbW9kZVxuXHRcdFx0XHRcdFx0XHQoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkpO1xuXHRcdFx0XHRpZiAoZGlzYWJsZUJpbmRpbmdDb250ZXh0Q29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBiaW5kaW5nIGlzIGVuYWJsZWQuXG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRjb25zdCBibG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKTtcblx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgY29udGVudHMgYmluZGluZyBpcyBkaXNhYmxlZC5cblx0XHRcdFx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHtcblx0XHRcdFx0XHRcdGlmIChibG9jay5pc0E8U3ViU2VjdGlvbkJsb2NrPihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdFx0XHRcdFx0YmxvY2suY29udGVudC5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFCbG9ja3MgPSBzdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIChGb3JtIHwgRm9ybUFQSSlbXTtcblxuXHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBibG9ja0NvbnRyb2wgb2YgYUJsb2Nrcykge1xuXHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQ/LigpKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYmxvY2tDb250cm9sLmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGJsb2NrQ29udHJvbC5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCAmJiBibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpPy5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSAoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChibG9ja0NvbnRyb2w/LmdldENvbnRlbnQ/LigpPy5pc0E8Rm9ybUFQST4oXCJzYXAuZmUubWFjcm9zLmZvcm0uRm9ybUFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSAoKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybUFQSSkuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUNvbnRhaW5lciBvZiBhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gZm9ybUNvbnRhaW5lci5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtRWxlbWVudCBvZiBhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBmb3JtRWxlbWVudC5nZXRGaWVsZHMoKSBhcyBJbnB1dEJhc2VbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZW1wdHlGaWVsZCA9IHRoaXMuZ2V0Rmlyc3RFbXB0eVJlcXVpcmVkRmllbGQoYUZpZWxkcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbXB0eUZpZWxkKSByZXR1cm4gZW1wdHlGaWVsZDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFZlcmlmeSBpZiB0aGUgZmlyc3QgZmllbGQgaXMgZW1wdHkgYW5kIHJlcXVpcmVkLlxuXHQgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gY2hlY2tcblx0ICogQHJldHVybnMgVGhlIGZpcnN0IGVtcHR5IHJlcXVpcmVkIGZpZWxkIG9yIHVuZGVmaW5lZCBpZiBubyBzdWNoIGZpZWxkIGV4aXN0c1xuXHQgKi9cblx0Z2V0Rmlyc3RFbXB0eVJlcXVpcmVkRmllbGQoZmllbGRzOiBJbnB1dEJhc2VbXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFmaWVsZHMgfHwgZmllbGRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0aWYgKCFmaWVsZHNbMF0uZ2V0UmVxdWlyZWQ/LigpKSByZXR1cm47XG5cblx0XHRsZXQgaXNFbXB0eSA9IGZhbHNlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGlmIChmaWVsZHNbMF0uaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0Y29uc3QgaXRlbXMgPSAoZmllbGRzWzBdIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSBpdGVtcy5sZW5ndGggPT09IDA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IChmaWVsZHNbMF0gYXMgSW5wdXRCYXNlKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRpc0VtcHR5ID0gIXZhbHVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gY2hlY2tpbmcgZmllbGQgcHJvcGVydGllczogJHtlcnJvcn1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXNFbXB0eSA/IGZpZWxkc1swXSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGluaXRpYWwgZm9jdXMgaW4gZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gYVN1YlNlY3Rpb25zIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uc1xuXHQgKiBAcGFyYW0gZnJvbVRhYk5hdmlnYXRpb24gSW5kaWNhdGVzIGlmIHRoZSBmb2N1cyBpcyBzZXQgYWZ0ZXIgYSB0YWIgbmF2aWdhdGlvblxuXHQgKi9cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10sIGZyb21UYWJOYXZpZ2F0aW9uID0gZmFsc2UpOiB2b2lkIHtcblx0XHRzZXRUaW1lb3V0KFxuXHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRcdFx0bGV0IG9GaWVsZFRvRm9jdXM6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRpZiAob01hbmRhdG9yeUZpZWxkLmlzQShcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIE11bHRpVmFsdWVGaWVsZEJsb2NrKS5nZXRNdWx0aVZhbHVlRmllbGQoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChcblx0XHRcdFx0XHRcdFx0b01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgeyBjb250ZW50OiB7IGdldENvbnRlbnRFZGl0OiBGdW5jdGlvbiB9IH1cblx0XHRcdFx0XHRcdCkuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gdGhpcy5nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSA/PyB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdFx0XHRjb25zdCBmb2N1c0luZm8gPSBvRmllbGRUb0ZvY3VzLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRcdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzLmlzQShcInNhcC51aS5tZGMuZmllbGQuRmllbGRJbnB1dFwiKSkge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9GaWVsZFRvRm9jdXMuZ2V0UGFyZW50KCkgYXMgVUk1RWxlbWVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzPy5pc0E8U2VhcmNoRmllbGQ+KFwic2FwLm0uU2VhcmNoRmllbGRcIikgJiZcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMuZ2V0RW5hYmxlU3VnZ2VzdGlvbnMoKSAmJlxuXHRcdFx0XHRcdFx0IW9GaWVsZFRvRm9jdXMuaXNCb3VuZChcImVuYWJsZVN1Z2dlc3Rpb25zXCIpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHQvLyBJbiBjYXNlIHRoZSBmb2N1cyBpcyBzZXQgb24gYSBzZWFyY2ggZmllbGQgd2l0aCBzdWdnZXN0aW9ucywgd2UgdGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgc3VnZ2VzdGlvbnMgdG8gYXZvaWQgdHJpZ2dlcmluZyB0aGVtIG9uIGZvY3VzXG5cdFx0XHRcdFx0XHQvLyB1bmxlc3MgdGhpcyBwcm9wZXJ0eSBpcyBib3VuZCAodG8gYXZvaWQgbW9kaWZ5aW5nIHNvbWV0aGluZyBpbiBhIG1vZGVsKVxuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5zZXRFbmFibGVTdWdnZXN0aW9ucyhmYWxzZSk7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLnNldEVuYWJsZVN1Z2dlc3Rpb25zKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fS5iaW5kKHRoaXMpLFxuXHRcdFx0ZnJvbVRhYk5hdmlnYXRpb24gPyAzMDAgOiAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IHN1Yi1zZWN0aW9uIHdpdGggYSB2aXNpYmlsaXR5IGJvdW5kIHRvIHRoZSBtb2RlbCBvZiB0aGUgdmlldy5cblx0ICogU2VjdGlvbnMgd2l0aCBiaW5kaW5ncyBvbiBpbnRlcm5hbCBtb2RlbHMgb25seSBhcmUgaWdub3JlZC5cblx0ICogQHJldHVybnMgVGhlIHZpc2liaWxpdHkgYmluZGluZyBvZiB0aGUgZmlyc3Qgc3ViLXNlY3Rpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdF9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZygpOiBCaW5kaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhbGxzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgY3VycmVudE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKTtcblx0XHRyZXR1cm4gYWxsc3ViU2VjdGlvbnNcblx0XHRcdC5maW5kKFxuXHRcdFx0XHQoc3ViU2VjdGlvbikgPT5cblx0XHRcdFx0XHQoc3ViU2VjdGlvbi5nZXRCaW5kaW5nKFwidmlzaWJsZVwiKSBhcyBDb21wb3NpdGVCaW5kaW5nIHwgdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Py5nZXRCaW5kaW5ncz8uKClcblx0XHRcdFx0XHRcdC5zb21lKChiaW5kaW5nKSA9PiBiaW5kaW5nLmdldE1vZGVsKCkgPT09IGN1cnJlbnRNb2RlbClcblx0XHRcdClcblx0XHRcdD8uZ2V0QmluZGluZyhcInZpc2libGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgYWxsIHN1YnNlY3Rpb24gdmlzaWJpbGl0eSBiaW5kaW5ncyB0byBiZSByZXNvbHZlZC5cblx0ICogVGhpcyBtZXRob2QgbGlzdGVucyBmb3IgdGhlICd2aXNpYmlsaXR5Q2hhbmdlZCcgZXZlbnQgIC4gVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBldmVuIGlmIHRoZSB2YWx1ZXMgYXJlIG5vdCBjaGFuZ2VkIGJ1dCBqdXN0IHJlc29sdmVkLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwcm9taXNlcyB0aGF0IHJlc29sdmUgd2hlbiBlYWNoIHZpc2liaWxpdHkgYmluZGluZyBpcyByZXNvbHZlZC5cblx0ICovXG5cdHdhaXRGb3JBbGxTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmdzUmVzb2x2ZWQoKTogUHJvbWlzZTx1bmtub3duPltdIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKVxuXHRcdFx0LmZpbHRlcihcblx0XHRcdFx0KHN1YlNlY3Rpb24pID0+IHN1YlNlY3Rpb24uaXNBPFN1YlNlY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5zZWN0aW9uLlN1YlNlY3Rpb25cIikgJiYgc3ViU2VjdGlvbi5nZXRCaW5kaW5nKFwidmlzaWJsZVwiKVxuXHRcdFx0KSAvL2ZpbHRlcmluZyBvbiBGRSBzdWJzZWN0aW9ucyB3aXRoIHZpc2liaWxpdHkgYmluZGluZylcblx0XHRcdC5tYXAoYXN5bmMgKHN1YlNlY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzdWJTZWN0aW9uLmF0dGFjaEV2ZW50T25jZShcInZpc2liaWxpdHlDaGFuZ2VkXCIsIHJlc29sdmUpKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRpZiAob1N1YlNlY3Rpb24uaXNBPFN1YlNlY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5zZWN0aW9uLlN1YlNlY3Rpb25cIikpIHtcblx0XHRcdG9TdWJTZWN0aW9uLmhhbmRsZVN1YlNlY3Rpb25DcmVhdGVkKHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCk7XG5cdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7XG5cdFx0XHRpZiAoYmxvY2suaXNBPFN1YlNlY3Rpb25CbG9jaz4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHRcdGJsb2NrLmNvbnRlbnQuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDUwMCk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdC8vIFRoaXMgb2JqZWN0IHBhZ2UgZG9lc24ndCBoYXZlIGEgYmluZGluZyBjb250ZXh0LCBidXQgc3RpbGwgaGFuZGxlcyB0aGUgc2hlbGwgYmFjayBuYXZpZ2F0aW9uIC0tPiBwZm9ybSB0aGUgbmF2IGJhY2sgYW5kIHJlbW92ZSB0aGUgbmF2YmFjayBoYW5kbGVyIGFzIGl0IG1ha2VzIG5vIHNlbnNlIGFueSBsb25nZXJcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHQuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbihuYXZCYWNrKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNldHRpbmcgYmFjayBuYXZpZ2F0aW9uXCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdFx0Py5lbmFibGVkO1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdG5hdkJhY2ssXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0RW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdmlldz8uZ2V0Vmlld0RhdGEoKT8udmlld0xldmVsO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBTdG9yZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaW4gaW50ZXJuYWwgbW9kZWwgZm9yIGFjY2VzcyBieSBjb250cm9sbGVyIGV4dGVuc2lvbnNcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChtUGFyYW1ldGVycykge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJuYXZpZ2F0aW9uUGFyYW1ldGVyc1wiLCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5lZGl0Rmxvdy5jb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzXG5cdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgYmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHt9LCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmdldERpc2FibGVPYmplY3RQYWdlUmVxdWVzdE9wdGltaXphdGlvbigpKSB7XG5cdFx0XHRcdChvT2JqZWN0UGFnZSBhcyB1bmtub3duIGFzIHsgX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHM6IEZ1bmN0aW9uIH0pLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhbXSk7XG5cdFx0fVxuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRvRmluYWxVSVN0YXRlPy50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWNvbW1lbmRhdGlvbnMuY2xlYXJSZWNvbW1lbmRhdGlvbnMoKTtcblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UobVBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0KTtcblx0XHR0aGlzLl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpO1xuXG5cdFx0Y29uc3QgYXBwbHlBcHBTdGF0ZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh2aWV3KTtcblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKGFwcGx5QXBwU3RhdGUpO1xuXG5cdFx0dGhpcy5yZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyh0aGlzLnN1YlNlY3Rpb25zLCBvT2JqZWN0UGFnZSwgYXBwbHlBcHBTdGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVjb25uZWN0IHRoZSB2aXNpYmlsaXR5IG9ic2VydmVycyBvZiBhbGwgRkUgc3Vic2VjdGlvbnMgYWZ0ZXIgdGhlIHN1YnNlY3Rpb24gdmlzaWJpbGl0eSBiaW5kaW5ncyBhcmUgcmVzb2x2ZWQgYW5kIHRoZSBhcHAgc3RhdGUgaXMgYXBwbGllZC5cblx0ICogVGhpcyBmdW5jdGlvbiB3YWl0IGZvciB0aGUgYXBwU2F0ZSB0byBiZSBhcHBsaWVkIGJlZm9yZSByZWNvbm5lY3RpbmcgdGhlIG9ic2VydmVycyBhbmQgdGhlIHNjcm9sbGluZyB0byB0aGUgc2VsZWN0ZWQgc2VjdGlvbiBpZiBpdCBjaGFuZ2VkIGR1cmluZyB0aGUgYXBwU3RhdGUgYXBwbGljYXRpb24uXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9uSW5mbyBTdWJzZWN0aW9ucyBpbmZvcm1hdGlvbiByZXRyaWV2ZWQgZHVyaW5nIGRpc2Nvbm5lY3Rpb25cblx0ICogQHBhcmFtIG9iamVjdFBhZ2VMYXlvdXQgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICogQHBhcmFtIHdhaXRGb3JBcHBseUFwcHN0YXRlIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhcHAgc3RhdGUgaXMgYXBwbGllZFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSBvYnNlcnZlcnMgd2VyZSByZWNvbm5lY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRhc3luYyByZWNvbm5lY3RTdWJTZWN0aW9uVmlzaWJpbGl0eU9ic2VydmVycyhcblx0XHRzdWJTZWN0aW9uSW5mbzogeyBmZTogU3ViU2VjdGlvbltdOyBvdGhlcnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gfSB8IHVuZGVmaW5lZCxcblx0XHRvYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdHdhaXRGb3JBcHBseUFwcHN0YXRlOiBQcm9taXNlPHVua25vd24+XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5nZXREaXNhYmxlT2JqZWN0UGFnZVJlcXVlc3RPcHRpbWl6YXRpb24oKSAmJiBzdWJTZWN0aW9uSW5mbykge1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwodGhpcy53YWl0Rm9yVmlzaWJpbGl0eUJpbmRpbmdzKVxuXHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHQvL3dhaXRpbmcgZm9yIHRoZSBhcHAgc3RhdGUgdG8gYmUgYXBwbGllZCBidG8gZW5zdXJlIGZvY3VzaW5nIG9uIHRoZSBjb3JyZWN0IHNlY3Rpb24gaWYgcmVxdWlyZWRcblx0XHRcdFx0XHRcdGF3YWl0IHdhaXRGb3JBcHBseUFwcHN0YXRlO1xuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBhcHBseWluZyBhcHAgc3RhdGVcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN1YlNlY3Rpb25JbmZvLmZlLmZvckVhY2goKHN1YlNlY3Rpb24pID0+IHN1YlNlY3Rpb24ub2JzZXJ2ZUN1cnJlbnRTZWN0aW9uKCkpO1xuXHRcdFx0XHRcdHN1YlNlY3Rpb25JbmZvLm90aGVyc1xuXHRcdFx0XHRcdFx0LmZpbHRlcigoc3Vic2VjdGlvbikgPT4gc3Vic2VjdGlvbi5nZXRWaXNpYmxlKCkpXG5cdFx0XHRcdFx0XHQuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4gc3ViU2VjdGlvbi5maXJlRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHsgc3ViU2VjdGlvbjogc3ViU2VjdGlvbiB9KSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGU6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBhcHBseWluZyBhcHAgc3RhdGVcIiwgZSBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIGNhcmRzIEFycmF5IG9mIGNhcmRzIHRvIGJlIHVwZGF0ZWRcblx0ICovXG5cdGFzeW5jIF91cGRhdGVBdmFpbGFibGVDYXJkcyhjYXJkczogV3JhcHBlZENhcmRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCk7XG5cdFx0Ly8gT25seSBjb2xsZWN0IGNhcmRzIHdoZW4gY29uc3VtZXJzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGNhcmRzIGNoYW5uZWxcblx0XHRpZiAoY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlLmhhc0NvbGxhYm9yYXRpb25NYW5hZ2VyQ29ubmVjdGVkKCkpIHtcblx0XHRcdGF3YWl0IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGNhcmRPYmplY3QgPSB0aGlzLmNvbGxhYm9yYXRpb25NYW5hZ2VyLnVwZGF0ZUNhcmRzKGNhcmRzKTtcblx0XHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldElkKCk7XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZS5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2Uuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTWVzc2FnZXN0cmlwIE9QLlxuXHQgKi9cblx0X3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIsIHsgLi4uaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIpIH0pO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0KG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHQ/LmZpbmRFbGVtZW50cyh0cnVlLCAoZWxlbTogQ29udHJvbCkgPT4gZWxlbS5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpXG5cdFx0XHRcdC5mb3JFYWNoKChtZXNzYWdlU3RyaXA6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlU3RyaXAuc2V0QmluZGluZ0NvbnRleHQoXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSEsXG5cdFx0XHRcdFx0XHRcImludGVybmFsXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIElmIHRoZSB2aWV3J3MgYmluZGluZyBjb250ZXh0IGFscmVhZHkgaGFkIG1lc3NhZ2VzIHRoYXQgd2VyZSBub3QgY2xlYXJlZCwgd2Ugd291bGQgbmVlZCB0byByZS1ldmFsdWF0ZSB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0dGhpcy5fZm5TaG93T1BNZXNzYWdlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgYSBtZXNzYWdlIHN0cmlwIGlmIGEgcmVkaXJlY3Rpb24gdG8gYSBub24tZHJhZnQgZWxlbWVudCBoYXMgYmVlbiBkb25lLlxuXHQgKiBSZW1vdmUgdGhlIG1lc3NhZ2Ugc3RyaXAgaW4gY2FzZSB3ZSBuYXZpZ2F0ZSB0byBhbm90aGVyIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlXG5cdCAqL1xuXHRkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UoZW50aXR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UpIHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdFx0ZGVsZXRlIHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2U7XG5cdFx0fVxuXG5cdFx0aWYgKGVudGl0eU5hbWUpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJSRVJPVVRFRF9OQVZJR0FUSU9OX1RPX1NBVkVEX1ZFUlNJT05cIiwgW2VudGl0eU5hbWVdKSxcblx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24sXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBjdHh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvLyBzZXR0aW5nIHRoaXMgbW9kZWwgZGF0YSB0byBiZSB1c2VkIGZvciByZWNvbW1lbmRhdGlvbnMgYmluZGluZ1xuXHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvY3VycmVudEN0eHRcIiwgY3R4dCk7XG5cblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRvIG5vdCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBhY3Rpb24gaWYgd2UgYXJlIGluIERpc3BsYXkgbW9kZVxuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRpZiAoaXNFZGl0YWJsZSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoW3sgY29udGV4dDogb0JpbmRpbmdDb250ZXh0IH1dKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmZvcmNlRm9jdXMpIHtcblx0XHRcdHNldEZvY3VzKCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RoZSBmb2xsb3dpbmcgY29kaW5nIGlzIGRvbmUgdG8gbWVyZ2UgYW4gb3BlbiBQQVRDSCBhbmQgdGhlIGRyYWZ0cHJlcGFyZS9kcmFmdGFjdGl2YXRlXG5cdFx0Ly9yZXF1ZXN0IGludG8gb25lICRiYXRjaCByZXF1ZXN0XG5cdFx0Ly9UbyBhY2hpZXZlIHRoaXMgdGhlICRhdXRvIHF1ZXVlIGlzIGxvY2tlZCBhdCB0aGUgbW91c2Vkb3duIGV2ZW50IChiZWZvcmUgZm9jdXNvdXQpIGluXG5cdFx0Ly9vcmRlciB0byB3YWl0IGZvciB0aGUgZHJhZnQgcmVxdWVzdCBpc3N1ZWQgaW4gdGhlIHNhdmUgYnV0dG9ucyBwcmVzcyBldmVudCBoYW5kbGVyLlxuXHRcdC8vVGhlIHF1ZXVlIGlzIHJlbGVhc2VkIGFnYWluIGR1cmluZyBtb3VzZXVwIChiZWZvcmUgcHJlc3MpLlxuXHRcdC8vVGhpcyBpcyBvbmx5IHBvc3NpYmxlIG9uIG5vbiB0b3VjaCBkZXZpY2VzIGJlY2F1c2Ugb24gdG91Y2ggZGV2aWNlcyB0aGUgZm9jdXNvdXQgYW5kIHByZXNzXG5cdFx0Ly9ldmVudHMgYXJlIGJvdGggaW5pdGlhdGVkIGF0IHRvdWNoZW5kIGJ5IHNhcC5tLkJ1dHRvbi5cblx0XHQvL21vdXNlSGFuZGxlclNldCBpcyB1c2VkIHRvIGVuc3VyZXMgdGhhdCB0aGUgZXZlbnQgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIG9ubHkgb25lIHRpbWUuXG5cdFx0Ly9UaGVyZSBjYW4gYmUgbXVsdGlwbGUgb25QYWdlUmVhZHkgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQvZGlzcGxheSBtb2RlXG5cdFx0aWYgKCF0aGlzLm1lcmdlUGF0Y2hEcmFmdCAmJiAhRGV2aWNlLnN1cHBvcnQudG91Y2gpIHtcblx0XHRcdGNvbnN0IHNhdmVCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OlNhdmVcIikgYXMgQnV0dG9uO1xuXHRcdFx0Y29uc3QgYXV0b1F1ZXVlVW5sb2NrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrLnVubG9jaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdH07XG5cblx0XHRcdHNhdmVCdXR0b24/LmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlZG93blwiLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5sb2NrKFwiJGF1dG9cIik7XG5cdFx0XHRcdFx0Ly93aGVuIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGF3YXkgZnJvbSB0aGUgc2F2ZSBidXR0b24gd2hpbGUgcHJlc3NlZCB0aGVuIHRoZXJlIHdpbGwgYmUgbm9cblx0XHRcdFx0XHQvL21vdXNldXAgZXZlbnQgb24gdGhlIHNhdmUgYnV0dG9uLiBUaGVyZWZvcmUsIHRoZSB1bmxvY2tpbmcgaXMgZG9uZSBvbiBcIm1vdXNldXBcIiBhbmQgXCJibHVyXCJcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVyZ2VQYXRjaERyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk6IE9iamVjdFBhZ2VMYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0YXN5bmMgX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IFByb21pc2U8eyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0+IHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlRGVzY3JpcHRpb24gPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlRGVzY3JpcHRpb25cIjtcblx0XHR9KTtcblx0XHRjb25zdCBleHRyYWN0UGF0aHMgPSAoYmluZGluZ0luZm8/OiB7IHBhcnRzPzogeyBwYXRoPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9W10gfSk6IHN0cmluZ1tdID0+XG5cdFx0XHRBcnJheS5mcm9tKFxuXHRcdFx0XHRuZXcgU2V0KFxuXHRcdFx0XHRcdChiaW5kaW5nSW5mbz8ucGFydHMgfHwgW10pXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChwYXJ0KSA9PiAhcGFydC5tb2RlbClcblx0XHRcdFx0XHRcdC5tYXAoKHBhcnQpID0+IHBhcnQucGF0aCB8fCBcIlwiKVxuXHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGNvbnN0IHN1YnRpdGxlUGF0aHMgPSBleHRyYWN0UGF0aHMob09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0QmluZGluZ0luZm8oXCJ2YWx1ZVwiKSk7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25QYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBwYXRoc1RvUmVzb2x2ZSA9IFsuLi5zdWJ0aXRsZVBhdGhzLCAuLi5kZXNjcmlwdGlvblBhdGhzXTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBmbkNsZWFyQ2FjaGVUaXRsZSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHJvb3RWaWV3Q29udHJvbGxlci5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmICgob09iamVjdFBhZ2VEZXNjcmlwdGlvbiB8fCBvT2JqZWN0UGFnZVN1YnRpdGxlKSAmJiAhdGhpcy5pbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHRvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZShmbkNsZWFyQ2FjaGVUaXRsZSwgdGhpcyk7XG5cdFx0XHR0aGlzLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBvT2JqZWN0UGFnZUNvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJ1aWxkID0gKCk6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9ID0+ICh7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSA/PyBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGU/LmdldFZhbHVlKCkgPz8gXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0VmFsdWUoKSA/PyBcIlwiXG5cdFx0fSk7XG5cdFx0Ly9pZiBubyBjb250ZXh0IG9yIG5vdGhpbmcgdG8gcmVzb2x2ZSwgZGlyZWN0IHJldHVyblxuXHRcdGlmICghb09iamVjdFBhZ2VDb250ZXh0IHx8IHBhdGhzVG9SZXNvbHZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZCgpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHNUb1Jlc29sdmUubWFwKGFzeW5jIChwKSA9PiAob09iamVjdFBhZ2VDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5yZXF1ZXN0T2JqZWN0KHApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCkpKTtcblx0XHRyZXR1cm4gYnVpbGQoKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSAob0V4ZWN1dGlvbi5nZXRTb3VyY2UoKSBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24pLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSEpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAtMSAmJiBpU2VjdGlvbkluZGV4TWF4ID4gMCkge1xuXHRcdFx0aWYgKHNDb21tYW5kID09PSBcIk5leHRUYWJcIikge1xuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4IDw9IGlTZWN0aW9uSW5kZXhNYXggLSAxKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1srK2lTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdC8vIFByZXZpb3VzVGFiXG5cdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0XHRcdGNvbnN0IGlzRXJyb3JNZXNzYWdlID0gb01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIjtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZVZhbGlkYXRpb24gPSBpc0hpZGRlbkRyYWZ0RW5hYmxlZFxuXHRcdFx0XHRcdD8gaXNFcnJvck1lc3NhZ2Vcblx0XHRcdFx0XHQ6IGlzRXJyb3JNZXNzYWdlICYmIG9NZXNzYWdlLmdldFRhcmdldHMoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5pbmNsdWRlcyhzVmlld0lkKSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlVmFsaWRhdGlvbikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKCk6IHZvaWQge1xuXHRcdGNvbnN0IGlzRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKGlzRWRpdE1vZGUgJiYgIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBMaXN0QmluZGluZztcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2VkaXREb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdC5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgcG9pbnQgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHNlbWFudGljIG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgdGhlIGRlZmF1bHQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgb2JqZWN0XG5cdCAqL1xuXHRfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmdcblx0KTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHNlbWFudGljT2JqZWN0XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIG9uIGEgdHJhbnNpZW50IGNvbnRleHQ6XG5cdCAqIC0gaWYgdGhlIGNvbnRleHQgZ2V0cyBkYXRhLCB3YWl0IGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIGV4ZWN1dGUgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqIC0gaWYgbm8gZGF0YSBpcyBmb3VuZCBvbiB0aGlzIGNvbnRleHQsIG9ubHkgdGhlIHByZXBhcmVBY3Rpb24gaXMgcmVxdWVzdGVkXG5cdCAqIC0gb24gYSByZWd1bGFyIGNvbnRleHQsIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBpcyByZXF1ZXN0ZWQuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZXhlY3V0ZWRcblx0ICovXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCkgYXMgQ29udHJvbDtcblx0XHRjb25zdCBjb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghY29udHJvbCB8fCAhY29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IGJ5UGFzc1NpZGVFZmZlY3RzID0gZmFsc2U7XG5cdFx0aWYgKGNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ5UGFzc1NpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKGNvbnRyb2wpO1xuXHRcdGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMpO1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29udHJvbCB9KTtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvZiB0aGUgZHJhZnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIHRoZSBnbG9iYWwgc2lkZSBlZmZlY3RzIGFyZSBleGVjdXRlZCBpZiB0aGVzZSBzaWRlIGVmZmVjdHMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnRleHRcblx0ICogLSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBvbiB0aGUgRHJhZnRSb290IGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0XG5cdCAqIEBwYXJhbSBieVBhc3NTaWRlRWZmZWN0cyBPbmx5IHRoZSBkcmFmdCBWYWxpZGF0aW9uIHN0ZXAgaXMgZXhlY3V0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICovXG5cdGFzeW5jIGV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Ly8gdGhlIGRyYWZ0IHZhbGlkYXRpb24gaXMgdHJlYXRlZCBhcyBhIHVzZXIgaW50ZXJhY3Rpb24sIGFuZCB0aGUgc2VydmljZSBtdXN0IHJldHVybiB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFnYWluIGlmIHN0aWxsIHZhbGlkXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAoIWJ5UGFzc1NpZGVFZmZlY3RzKSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IGdsb2JhbFNpZGVFZmZlY3RzID0gZW50aXR5VHlwZSA/IHNpZGVFZmZlY3RzU2VydmljZS5nZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGUpIDogW107XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2xvYmFsIFNpZGVFZmZlY3RzIGZvciB0aGUgcmVsYXRlZCBlbnRpdHksIGV4ZWN1dGUgaXQvdGhlbVxuXHRcdFx0aWYgKGdsb2JhbFNpZGVFZmZlY3RzLmxlbmd0aCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRnbG9iYWxTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKHNpZGVFZmZlY3RzKSA9PiB0aGlzLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMsIGNvbnRleHQpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSAoYXdhaXQgQ29tbW9uVXRpbHMuY3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRQcm9ncmFtbWluZ01vZGVsLkRyYWZ0LFxuXHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRhcHBDb21wb25lbnRcblx0XHQpKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHQvL0V4ZWN1dGUgdGhlIGRyYWZ0VmFsaWRhdGlvbiBpZiB0aGVyZSBpcyBubyBnbG9iYWxTaWRlRWZmZWN0cyAoaWdub3JlIEVUYWdzIGluIGNvbGxhYm9yYXRpb24gZHJhZnQpXG5cdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCwgdGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBJZiBkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIG9uIHRoZSBjcmVhdGlvbiByb3dzLCB0aGUgcmVsYXRlZCBkb2N1bWVudHMgYXJlIGNyZWF0ZWRcblx0ICogYmVmb3JlIHNhdmluZyB0aGUgZHJhZnQgdmVyc2lvbi5cblx0ICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IEluZGljYXRlcyBpZiB0aGUgYmluZGluZyB0byB0aGUgdmlldyBzaG91bGQgYmUgc2tpcHBlZFxuXHQgKiBAcGFyYW0gdXNlU2F2ZUFuZExlYXZlIEluZGljYXRlcyBpZiB0aGUgc2F2ZSBpcyB0cmlnZ2VyZWQgZnJvbSBhIHNhdmUgYW5kIGxlYXZlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfc2F2ZURvY3VtZW50KHNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbiwgdXNlU2F2ZUFuZExlYXZlPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzOiBQcm9taXNlPHZvaWQgfCBPRGF0YUxpc3RCaW5kaW5nPltdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgbWVzc2FnZVBvcG92ZXJFcnI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRCdXN5TG9ja2VyLmxvY2sobW9kZWwpO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCB0cnVlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbGxhYm9yYXRpb24gZGlzY2FyZDogJHtlcnJ9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKHRhYmxlOiBUYWJsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk7XG5cblx0XHRcdFx0Y29uc3QgY29udGV4dEtleXMgPSBPYmplY3Qua2V5cygoY3JlYXRpb25Sb3c/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRPYmplY3QoKSB8fCB7fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0S2V5cy5maWx0ZXIoKGtleSkgPT4gIWtleS5zdGFydHNXaXRoKFwiQCR1aTUuXCIpKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvd1xuXHRcdFx0XHRcdFx0XHQuY3JlYXRlRG9jdW1lbnQodGFibGVCaW5kaW5nLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uUm93OiBjcmVhdGlvblJvdyxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVBdEVuZDpcblx0XHRcdFx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0XHRcdFx0KHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRBZ2dyZWdhdGlvbihcImNyZWF0aW9uTW9kZVwiKSBhcyBUYWJsZUNyZWF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHRcdFx0KT8uZ2V0UHJvcGVydHkoXCJjcmVhdGVBdEVuZFwiKSA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRza2lwU2lkZUVmZmVjdHM6IHRydWUgLy8gdGhlIHNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleSwgd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB0YWJsZUJpbmRpbmcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBpc1NraXBCaW5kaW5nVG9WaWV3ID0gc2tpcEJpbmRpbmdUb1ZpZXcgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudDtcblx0XHRcdGNvbnN0IGlzU3RhbmRhcmRTYXZlID1cblx0XHRcdFx0aXNTa2lwQmluZGluZ1RvVmlldyAmJiB0eXBlb2YgaXNTa2lwQmluZGluZ1RvVmlldyA9PSBcIm9iamVjdFwiICYmIGlzU2tpcEJpbmRpbmdUb1ZpZXcuZ2V0U291cmNlKCkuZ2V0Q29tbWFuZCgpID09PSBcIlNhdmVcIjtcblxuXHRcdFx0Y29uc3QgYmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhd2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChjb250ZXh0LCB7XG5cdFx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdFx0YmluZGluZ3M6IGJpbmRpbmdzIGFzIHVua25vd24gYXMgT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdFx0XHRcdG1lcmdlUGF0Y2hEcmFmdDogdGhpcy5tZXJnZVBhdGNoRHJhZnQsXG5cdFx0XHRcdFx0c2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdFx0aXNTdGFuZGFyZFNhdmUsXG5cdFx0XHRcdFx0dXNlU2F2ZUFuZExlYXZlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0aWYgKGVycm9yICE9PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKSB7XG5cdFx0XHRcdFx0bWVzc2FnZVBvcG92ZXJFcnIgPSAoZXJyb3IgYXMgc3RyaW5nKSA/PyBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChtb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sobW9kZWwpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1lc3NhZ2VQb3BvdmVyRXJyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKG1lc3NhZ2VQb3BvdmVyRXJyLmxlbmd0aCkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihtZXNzYWdlUG9wb3ZlckVycik7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2NhbmNlbERvY3VtZW50KG1QYXJhbWV0ZXJzOiB7IGNhbmNlbEJ1dHRvbjogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRleHQgfCB2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKSBhcyBCdXR0b24gfCB1bmRlZmluZWQ7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdGNvbnN0IGxhc3RGb2N1c2VkQ29udHJvbElkID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk/LmdldElkKCk7XG5cdFx0bGV0IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgZmFsc2UpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgaGF2ZSBkaXNwbGF5ZWQgdGhlIGRpYWxvZyBhbmQgdGhlIHVzZXIgY29uZmlybWVkIHRoZSBkaXNjYXJkIC0+IFdlIHNraXAgdGhlIGRpc2NhcmQgY29uZmlybWF0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiZGlzY2FyZENvbmZpcm1lZFwiKSB7XG5cdFx0XHRcdFx0c2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBnZXQgY29sbGFib3JhdGl2ZSB1c2Vyc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaXNEb2N1bWVudE1vZGlmaWVkID1cblx0XHRcdCEhdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8XG5cdFx0XHQoIXRoaXMuZ2V0U3RpY2t5RWRpdE1vZGUoKSAmJiBjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpID09PSBmYWxzZSk7XG5cdFx0Y29uc3QgYWZ0ZXJDYW5jZWw6IEZ1bmN0aW9uID0gKHByb21pc2VSZXN1bHQ6IE9EYXRhVjRDb250ZXh0KSA9PiB7XG5cdFx0XHQvLyBmb2N1cyBpcyByZXRhaW5lZCBvbiB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnRcblx0XHRcdGlmIChsYXN0Rm9jdXNlZENvbnRyb2xJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQobGFzdEZvY3VzZWRDb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByb21pc2VSZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoXG5cdFx0XHQodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCAmJlxuXHRcdFx0aXNEb2N1bWVudE1vZGlmaWVkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGFmdGVyQ2FuY2VsLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3dcblx0XHRcdC5jYW5jZWxEb2N1bWVudChjb250ZXh0LCB7IGNvbnRyb2w6IGNhbmNlbEJ1dHRvbiwgc2tpcERpc2NhcmRQb3BvdmVyOiBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgfSlcblx0XHRcdC50aGVuKChwcm9taXNlUmVzdWx0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBhZnRlckNhbmNlbChwcm9taXNlUmVzdWx0KTtcblx0XHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgX2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuYXBwbHlEb2N1bWVudChvQ29udGV4dCkuY2F0Y2goKCkgPT4ge1xuXHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IHNob3dSZWxhdGVkQXBwcyA9IG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIik7XG5cdFx0aWYgKHNob3dSZWxhdGVkQXBwcyA9PT0gXCJ0cnVlXCIgfHwgc2hvd1JlbGF0ZWRBcHBzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0Q29tbW9uVXRpbHMudXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlLCBhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogQ29udHJvbFtdLCBhU3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIGFDb250cm9sczogQ29udHJvbFtdLCBiSXNDaGFydD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW0xIG9mIGFQYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IChpdGVtMSBhcyBNYWNyb0FQSSkuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudD8uZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1zID0gb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSBhcyBDb250cm9sW107XG5cdFx0XHRcdFx0aXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0uaXNBPENoYXJ0QmxvY2s+KFwic2FwLmZlLm1hY3Jvcy5DaGFydFwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFydENvbnRyb2wgPSBpdGVtLmdldENoYXJ0Q29udHJvbCgpO1xuXHRcdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChjaGFydENvbnRyb2wpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0XHRjb25zdCBvU3ViRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvU3ViRWxlbWVudCAmJiBvU3ViRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9TdWJFbGVtZW50WzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5tLlBhbmVsXCIpICYmIG9FbGVtZW50LmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MuVGFibGVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBvU3ViRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9FbGVtZW50LmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQuaXNBICYmIG9TdWJFbGVtZW50LmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChvU3ViRWxlbWVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCk6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKTogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdIHtcblx0XHRsZXQgYUJsb2NrczogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKTogVGFibGVbXSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBUYWJsZVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2ZpbmRDaGFydHMoKTogQ2hhcnRbXSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhQ2hhcnRzOiBDaGFydFtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKTogdm9pZCB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+KTogdm9pZCB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBPER5bmFtaWNTaWRlQ29udGVudD4oXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogQ29udGV4dCwgc0NoYXJ0UGF0aDogc3RyaW5nKTogdW5rbm93bltdIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSb3dQYXRoICdzUGF0aCBvZiB0aGUgdGFibGUgcm93J1xuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9maW5kVGFibGVzICYmIHRoaXMuX2ZpbmRUYWJsZXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGl0ZW0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKFxuXHRcdG9QYWdlQ29udGV4dDogQ29udGV4dCxcblx0XHRhTGluZUNvbnRleHQ6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0c0NoYXJ0UGF0aDogc3RyaW5nXG5cdCk6IHsgc2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDsgYXR0cmlidXRlczogdW5rbm93bltdIH0ge1xuXHRcdGxldCBhQXR0cmlidXRlczogdW5rbm93bltdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzQ2hhcnRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NoYXJ0Q29udGV4dERhdGEgPSB0aGlzLl9nZXRDaGFydENvbnRleHREYXRhKG9TaW5nbGVDb250ZXh0LCBzQ2hhcnRQYXRoKTtcblx0XHRcdFx0XHRpZiAob0NoYXJ0Q29udGV4dERhdGEpIHtcblx0XHRcdFx0XHRcdGFBdHRyaWJ1dGVzID0gb0NoYXJ0Q29udGV4dERhdGEubWFwKGZ1bmN0aW9uIChvU3ViQ2hhcnRDb250ZXh0RGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1BhZ2VMZXZlbFNWLFxuXHRcdFx0YXR0cmlidXRlczogYUF0dHJpYnV0ZXNcblx0XHR9O1xuXHR9XG5cblx0X2dldEJhdGNoR3JvdXBzRm9yVmlldygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdG9Db25maWd1cmF0aW9ucyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdGFDb25maWd1cmF0aW9ucyA9IG9Db25maWd1cmF0aW9ucyAmJiBPYmplY3Qua2V5cyhvQ29uZmlndXJhdGlvbnMpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gW1wiJGF1dG8uSGVyb2VzXCIsIFwiJGF1dG8uRGVjb3JhdGlvblwiLCBcIiRhdXRvLldvcmtlcnNcIl07XG5cblx0XHRpZiAoYUNvbmZpZ3VyYXRpb25zICYmIGFDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XSBhcyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRpZiAob0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgPT09IFwiTG9uZ1J1bm5lcnNcIikge1xuXHRcdFx0XHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG8uTG9uZ1J1bm5lcnNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUJhdGNoR3JvdXBzO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBpbml0aWFsaXplIHBhZ2luYXRpb24uXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgb2Ygb2JqZWN0IHBhZ2Vcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFBhcmVudCBsaXN0IGJpbmRpbmcgdG8gdXNlXG5cdCAqL1xuXHRfaW5pdGlhbGl6ZVBhZ2luYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCwgbGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0aWYgKHZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGNvbnN0IHBhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChwYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nVG9Vc2UgPSBwYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUoYmluZGluZ1RvVXNlLCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKGxpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUobGlzdEJpbmRpbmcsIGNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogb2JqZWN0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGFQb2ludHMsIG9EYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiB7IHN1cHBvcnRlZD86IGJvb2xlYW4gfVtdKTogdm9pZCB7XG5cdFx0XHRjb25zdCBzTGlua0lkID0gaWQ7XG5cdFx0XHQvLyBwcm9jZXNzIHZpYWJsZSBsaW5rcyBmcm9tIGdldExpbmtzIGZvciBhbGwgZGF0YXBvaW50cyBoYXZpbmcgb3V0Ym91bmRcblx0XHRcdGlmIChhU3VwcG9ydGVkTGlua3MgJiYgYVN1cHBvcnRlZExpbmtzLmxlbmd0aCA9PT0gMSAmJiBhU3VwcG9ydGVkTGlua3NbMF0uc3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7c0xpbmtJZH1gLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1N1YkRhdGFQb2ludHNcblx0XHQgKiBAcGFyYW0gb1BhZ2VEYXRhXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5HZXRMaW5rcyhcblx0XHRcdG9TdWJEYXRhUG9pbnRzOiBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W107XG5cdFx0XHRcdH1cblx0XHRcdD4sXG5cdFx0XHRvUGFnZURhdGE6IG9iamVjdFxuXHRcdCk6IHZvaWQge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgaW4gb1N1YkRhdGFQb2ludHMpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFQb2ludCA9IG9TdWJEYXRhUG9pbnRzW3NJZF07XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogb2JqZWN0ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gbWVyZ2Uoe30sIG9QYWdlRGF0YSwgb0xpbmtEYXRhKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0Ly8gcHJvY2VzcyBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3Ncblx0XHRcdFx0aWYgKG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBpbiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaXRlbV07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFpblByb3BlcnR5ID0gb01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdIVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0hO1xuXHRcdFx0XHRcdFx0aWYgKHNNYWluUHJvcGVydHkgIT09IHNNYXBwZWRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob01peGVkQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShzTWFpblByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdNYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCJfXCIpICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0gb01peGVkQ29udGV4dFtzS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFsaWRhdGUgaWYgYSBsaW5rIG11c3QgYmUgcmVuZGVyZWRcblx0XHRcdFx0b1NoZWxsU2VydmljZXNcblx0XHRcdFx0XHQuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvRGF0YVBvaW50LmFjdGlvblxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmblNldExpbmtFbmFibGVtZW50KHNJZCwgYUxpbmtzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmbk9uRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9maW5kU3VtbWFyaXplQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb2JqZWN0UGFnZVRpdGxlID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG9iamVjdFBhZ2VUaXRsZT8uZ2V0QWN0aW9ucygpO1xuXHRcdGxldCBzdW1tYXJpemVCdXR0b246IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblxuXHRcdGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcblx0XHRcdGlmIChhY3Rpb24uaXNBPFN1bW1hcml6YXRpb25CdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5TdW1tYXJpemF0aW9uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGJ1dHRvbiA9IGFjdGlvbi5nZXRDb250ZW50KCkgYXMgQnV0dG9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoYnV0dG9uICYmIGJ1dHRvbi5nZXRJZCgpLmVuZHNXaXRoKFwiOjpTdW1tYXJpemU6OmJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdHN1bW1hcml6ZUJ1dHRvbiA9IGJ1dHRvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzdW1tYXJpemVCdXR0b247XG5cdH1cblxuXHQvKipcblx0ICogRXZhbHVhdGVzIHN0YXJ0dXAgcGFyYW1ldGVycyBhbmQgdHJpZ2dlcnMgdGhlIHNtYXJ0IHN1bW1hcnkgYWN0aW9uIG9uIHRoZSBPYmplY3QgUGFnZSBpZiByZXF1aXJlZC5cblx0ICpcblx0ICogVGhpcyBtZXRob2QgY2hlY2tzIHdoZXRoZXIgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycyBpbmRpY2F0ZSB0aGF0IGEgc21hcnQgc3VtbWFyeSBzaG91bGQgYmUgcGVyZm9ybWVkIGZvciB0aGUgY3VycmVudCBPYmplY3QgUGFnZSBsZXZlbC5cblx0ICogVGhlIGxldmVsIHBhcmFtZXRlciBkZXRlcm1pbmVzIHdoaWNoIE9iamVjdCBQYWdlIHNob3VsZCBiZSBzdW1tYXJpemVkLCB3aGljaCBpcyByZWxldmFudCBpbiBGbGV4aWJsZSBDb2x1bW4gTGF5b3V0IChGQ0wpIHNjZW5hcmlvcyB3aGVyZVxuXHQgKiBtdWx0aXBsZSBPYmplY3QgUGFnZXMgbWF5IGJlIGRpc3BsYXllZCBzaW11bHRhbmVvdXNseS5cblx0ICogSWYgbm8gbGV2ZWwgaXMgcHJvdmlkZWQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycywgdGhlIG1ldGhvZCBkZWZhdWx0cyB0aGUgbGV2ZWwgdG8gMS5cblx0ICogSWYgdGhlIHN1bW1hcnkgYWN0aW9uIGlzIGFsbG93ZWQgYW5kIHRoZSBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZSwgaXQgbG9jYXRlcyB0aGUgc3VtbWFyaXplIGJ1dHRvbiBhbmQgdHJpZ2dlcnMgaXRzIHByZXNzIGV2ZW50LlxuXHQgKiBUaGUgbWV0aG9kIGVuc3VyZXMgdGhlIHN1bW1hcnkgaXMgb25seSBleGVjdXRlZCBvbmNlIHBlciBuYXZpZ2F0aW9uIGFuZCBsb2dzIGVycm9ycyBpZiBwcmVyZXF1aXNpdGVzIGFyZSBub3QgbWV0IG9yIHRoZSBidXR0b24gaXMgdW5hdmFpbGFibGUuXG5cdCAqIEFsbCBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBwcm9jZXNzIGFyZSBjYXVnaHQgYW5kIGxvZ2dlZC5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9oYW5kbGVTbWFydFN1bW1hcnlTdGFydHVwQWN0aW9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0YXBwQ29tcG9uZW50XG5cdFx0XHQ/LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKClcblx0XHRcdD8udGhlbigoc3RhcnR1cFBhcmFtczogU3RhcnR1cFBhcmFtZXRlcnMpID0+IHtcblx0XHRcdFx0aWYgKCFzdGFydHVwUGFyYW1zLnByZWZlcnJlZEFjdGlvbiB8fCAhc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0uc3RhcnRzV2l0aChcInN1bW1hcnlcIikpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBjaGVjayBpZiB3ZSBhcmUgb24gdGhlIGNvcnJlY3QgT1AgYnkgY2hlY2tpbmcgdGhlIGxldmVsIHByb3ZpZGVkIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0XHRcdFx0Y29uc3Qgdmlld0xldmVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRcdGNvbnN0IHByZWZlcnJlZEFjdGlvbkxldmVsID1cblx0XHRcdFx0XHRzdGFydHVwUGFyYW1zLnByZWZlcnJlZEFjdGlvblswXSA9PT0gXCJzdW1tYXJ5XCIgPyAxIDogcGFyc2VJbnQoc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0uc3BsaXQoXCItXCIpWzFdLCAxMCk7XG5cdFx0XHRcdGlmIChpc05hTihwcmVmZXJyZWRBY3Rpb25MZXZlbCkgfHwgdmlld0xldmVsICE9PSBwcmVmZXJyZWRBY3Rpb25MZXZlbCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHN1bW1hcnkgYWN0aW9uIHNoYWxsIGJlIGV4ZWN1dGVkIG5vdyAoaXQgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gZXhlY3V0ZWQgYnkgYSBoaWdoZXIgbGV2ZWwgT1ApXG5cdFx0XHRcdGlmIChhcHBDb21wb25lbnQuZ2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzKCkgPT09IFByZWZlcnJlZEFjdGlvblN0YXR1cy5DYW5QZXJmb3JtKSB7XG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50LnNldFByZWZlcnJlZEFjdGlvblN0YXR1cyhQcmVmZXJyZWRBY3Rpb25TdGF0dXMuQWxyZWFkeVBlcmZvcm1lZCk7IC8vIHRvIHByZXZlbnQgb3RoZXIgT1BzIG9uIGhpZ2hlciBsZXZlbHMgdG8gZXhlY3V0ZSB0aGUgc3VtbWFyeSBhZ2FpblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlXG5cdFx0XHRcdGNvbnN0IGVudmlyb25tZW50U2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpO1xuXHRcdFx0XHRpZiAoIWVudmlyb25tZW50U2VydmljZT8uZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMuU21hcnRTdW1tYXJpemUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTbWFydCBTdW1tYXJpemF0aW9uIHdhcyBub3QgdHJpZ2dlcmVkIGJlY2F1c2UgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBub3QgYXZhaWxhYmxlXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIFN1bW1hcnkgYnV0dG9uXG5cdFx0XHRcdGNvbnN0IHN1bW1hcml6ZUJ1dHRvbiA9IHRoaXMuX2ZpbmRTdW1tYXJpemVCdXR0b24oKTtcblxuXHRcdFx0XHRpZiAoc3VtbWFyaXplQnV0dG9uICYmIHN1bW1hcml6ZUJ1dHRvbi5nZXRWaXNpYmxlKCkgJiYgc3VtbWFyaXplQnV0dG9uLmdldEVuYWJsZWQoKSkge1xuXHRcdFx0XHRcdHN1bW1hcml6ZUJ1dHRvbi5maXJlUHJlc3MoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdFx0XCJTbWFydCBTdW1tYXJpemF0aW9uIHdhcyBub3QgdHJpZ2dlcmVkIGJlY2F1c2UgdGhlIFN1bW1hcml6ZSBidXR0b24gaXMgZWl0aGVyIG5vdCB2aXNpYmxlIG9yIG5vdCBlbmFibGVkIG9yIG5vdCBmb3VuZC5cIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHN0YXJ0dXAgcGFyYW1ldGVycyBvciB0cmlnZ2VyaW5nIHNtYXJ0IHN1bW1hcnk6XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBGRVZpZXcsXG5cdFx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzPzogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcblx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRtb2RlbD86IE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJlcXVpcmVzTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHRcdGJTdGF0aWNBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0fSxcblx0XHRcdG1Db25kaXRpb25zOiB7XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogdm9pZCB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEludm9rZXMgdGhlIHBhZ2UgcHJpbWFyeSBhY3Rpb24gb24gcHJlc3Mgb2YgQ3RybCtFbnRlci5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbDtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVZpZXdMZXZlbCA9PT0gMSAmJiBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KCk7XG5cdFx0XHR9IGVsc2UgaWYgKENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob1ZpZXcpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTWFuYWdlcyB0aGUgY29udGV4dCBjaGFuZ2UgZXZlbnQgb24gdGhlIHRhYmxlcy5cblx0XHQgKiBUaGUgZm9jdXMgaXMgc2V0IGlmIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYW4gZWRpdEZsb3cgYWN0aW9uIGFuZFxuXHRcdCAqIGFuIGV2ZW50IGlzIGZpcmVkIG9uIHRoZSBvYmplY3RQYWdlIG1lc3NhZ2VCdXR0b24uXG5cdFx0ICogQHBhcmFtIHRoaXMgVGhlIG9iamVjdFBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBldmVudCBUaGUgVUk1IGV2ZW50XG5cdFx0ICovXG5cdFx0YXN5bmMgb25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIGV2ZW50OiBVSTVFdmVudDx7fSwgVGFibGVBUEk+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRjb25zdCB0YWJsZUFQSSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0Y29uc3QgdGFibGUgPSB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0Y29uc3QgY3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLmVkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRjb25zdCB0YWJsZUNvbnRleHRzID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKHRhYmxlKT8uZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cblx0XHRcdGlmIChjdXJyZW50QWN0aW9uUHJvbWlzZSAmJiB0YWJsZUNvbnRleHRzPy5sZW5ndGgpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25SZXNwb25zZSA9IGF3YWl0IGN1cnJlbnRBY3Rpb25Qcm9taXNlO1xuXHRcdFx0XHRcdGlmIChhY3Rpb25SZXNwb25zZT8uY29udHJvbElkID09PSB0YWJsZS5nZXRJZCgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhY3Rpb25EYXRhID0gYWN0aW9uUmVzcG9uc2Uub0RhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXlzID0gYWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW0gPSB0YWJsZUNvbnRleHRzLmZpbmRJbmRleCgodGFibGVDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlRGF0YSA9IHRhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleXMuZXZlcnkoKGtleTogc3RyaW5nKSA9PiB0YWJsZURhdGFba2V5XSA9PT0gYWN0aW9uRGF0YVtrZXldKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW0gIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRpYWxvZyA9IEluc3RhbmNlTWFuYWdlci5nZXRPcGVuRGlhbG9ncygpLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKTtcblx0XHRcdFx0XHRcdFx0aWYgKGRpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZWQgYmVmb3JlIHNldCB0aGUgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cobmV3SXRlbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGUuZm9jdXNSb3cobmV3SXRlbSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2V9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHRvblRhYmxlQmluZGluZ1VwZGF0ZWQodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdGFzeW5jIG9uQ2FsbEFjdGlvbihcblx0XHRcdG9WaWV3OiBGRVZpZXcsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzPzogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcblx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRtb2RlbD86IE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJlcXVpcmVzTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHRcdGJTdGF0aWNBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cblx0XHRcdC8vIFdhaXQgZm9yIFZIIHZhbHVlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyB0aGUgYWN0aW9uXG5cdFx0XHRhd2FpdCBvQ29udHJvbGxlci5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKChyZXMpID0+IHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlcztcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvU291cmNlOiBDb250cm9sLFxuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQ6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4sXG5cdFx0XHRzQ29udHJvbENvbmZpZzogc3RyaW5nLFxuXHRcdFx0c0NvbGxlY3Rpb25QYXRoOiBzdHJpbmdcblx0XHQpOiB2b2lkIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpISxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0YU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKSxcblx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IHVua25vd24pIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIGltcGxpY2l0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIG5lZWRlZFxuXHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IGN1c3RvbURhdGEgPSBvU291cmNlLmdldEN1c3RvbURhdGEoKS5maW5kKChkYXRhKSA9PiBkYXRhLmdldEtleSgpID09PSBcIlZhbHVlUHJvcGVydHlQYXRoXCIpO1xuXHRcdFx0XHRpZiAoY3VzdG9tRGF0YSkge1xuXHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvQ29udHJvbGxlci5fZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YS5nZXRWYWx1ZSgpLFxuXHRcdFx0XHRcdFx0b1RhcmdldEluZm8uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKSAmJlxuXHRcdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAyMDAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBzdHJpbmcgfCBvYmplY3QpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgdGhlIHRhcmdldCBJRCBiYXNlZCBvbiBpbnB1dCB0eXBlXG5cdFx0XHRsZXQgdGFyZ2V0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmICh0eXBlb2Ygb0RldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHR0YXJnZXRJZCA9IG9EZXRhaWxDb25maWc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBQcmlvcml0eTogc3ViU2VjdGlvbklkID4gc2VjdGlvbklkXG5cdFx0XHRcdHRhcmdldElkID0gb0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQgPz8gb0RldGFpbENvbmZpZy5zZWN0aW9uSWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0YXJnZXRJZCkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5nZXRFeHRlbnNpb25BUEkoKS5uYXZpZ2F0ZVRvU3ViU2VjdGlvbih0YXJnZXRJZCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNsb3NlQ29sbGFib3JhdGlvblN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoXCIvc2hvd0NvbGxhYm9yYXRpb25TdHJpcFwiLCBmYWxzZSk7XG5cdFx0fSxcblxuXHRcdGNsb3NlT1BNZXNzYWdlU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodmlldyk7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSBpbnRlcm5hbE1vZGVsXG5cdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpITtcblx0XHRcdC8vIFJlbW92ZSBjb250ZXh0IGJvdW5kIG1lc3NhZ2VzIGFuZCBzZXQgdGhlIHByb3BlcnR5IHRvIGZhbHNlIGZvciB0aGUgYmFja2VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGluIGVkaXQgbW9kZS5cblx0XHRcdGlmICghYklzSW5FZGl0TW9kZSAmJiBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcIk9QQmFja2VuZE1lc3NhZ2VWaXNpYmxlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRCb3VuZE1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHRcdC5maWx0ZXIoXG5cdFx0XHRcdFx0XHQobWVzc2FnZTogTWVzc2FnZSkgPT5cblx0XHRcdFx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSAmJiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChjb250ZXh0Qm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoY29udGV4dEJvdW5kTWVzc2FnZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQmFja2VuZE1lc3NhZ2VWaXNpYmxlXCIsIGZhbHNlKTtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuaGlkZU1lc3NhZ2UoKTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMEdBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFnQjtFQUNuRCxNQUFNRSxxQkFBcUIsR0FBR0QsU0FBUyxDQUFDRSx5QkFBeUI7O0VBRWpFO0FBQ0E7QUFDQTtFQUZBLElBSU1DLG9CQUFvQixJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxH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